Перейти к содержимому
Главная страница » Как установить Kubernetes: пошаговое руководство для начинающих

Как установить Kubernetes: пошаговое руководство для начинающих

Узнайте, как установить Kubernetes, из нашего руководства из 7 шагов. Это руководство идеально подходит для начинающих, поскольку оно проведет вас по каждому шагу установки Kubernetes.

Мы настроим кластеры Kubernetes с помощью официальной утилиты Kubeadm. Это очень упрощает настройку кластера.

Шаг 1: Создайте два сервера

Для создания кластеров Kubernetes вам потребуется как минимум два сервера Ubuntu. Эти серверы могут находиться на вашей локальной рабочей станции, облачных ИТ-серверах. Все, что вам нужно, это подключение к Интернету на серверах.

Серверы должны иметь минимум 2 vCPU и 2 ГБ оперативной памяти.

  1. Сервер 01: Будет действовать как плоскость контроллера Kubernetes
  2. Сервер 02: Будет действовать как рабочий узел Kubernetes.

На обоих серверах убедитесь, что брандмауэр отключен и все порты разрешены между серверами. Если вы хотите ограничить доступ к портам между серверами, включите все рекомендуемые порты плоскости управления и рабочих узлов, как показано на рисунке ниже.

Вы можете добавить больше серверов в качестве рабочих узлов в соответствии с вашими требованиями. Процесс установки будет одинаковым для всех рабочих узлов.

Примечание: Если вы хотите установить кластер Kubernetes в среде с воздушным зазором, мы рекомендуем вам подписаться на этот блог.

Шаг 2: Установите необходимые утилиты на все серверы

Следующим шагом будет установка следующих утилит на все серверы.

  1. Контейнерная среда выполнения (CRI-O)
  2. kubelet
  3. Kubeadm
  4. kubectl

Также мы выполним некоторые дополнительные настройки, необходимые для Kubernetes.

Чтобы упростить задачу, мы добавили все шаги в виде сценария оболочки.

Сохраните следующий сценарий командной строки как utilities.sh

#!/bin/bash

# Exit on error, undefined variable, or error in any pipeline
set -euxo pipefail

# Variables
KUBERNETES_VERSION="1.28.1-00"
OS="xUbuntu_22.04"
VERSION="1.28"

# Disable swap and keep it off during reboot
sudo swapoff -a
(crontab -l 2>/dev/null; echo "@reboot /sbin/swapoff -a") | crontab - || true

# Update package list
sudo apt-get update -y

# Install CRI-O Runtime
# Load required modules and set sysctl params
echo -e "overlay\nbr_netfilter" | sudo tee /etc/modules-load.d/crio.conf
sudo modprobe overlay
sudo modprobe br_netfilter

echo -e "net.bridge.bridge-nf-call-iptables=1\nnet.ipv4.ip_forward=1\nnet.bridge.bridge-nf-call-ip6tables=1" | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
sudo sysctl --system

# Add CRI-O to sources and install
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list

curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -

sudo apt-get update
sudo apt-get install -y cri-o cri-o-runc

sudo systemctl daemon-reload
sudo systemctl enable crio --now

echo "CRI runtime installed successfully"

# Install Kubernetes components
sudo apt-get update -y
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
sudo apt-get update -y
sudo apt-get install -y kubelet="$KUBERNETES_VERSION" kubectl="$KUBERNETES_VERSION" kubeadm="$KUBERNETES_VERSION"

# Install jq and set Kubelet node IP
sudo apt-get install -y jq
local_ip=$(ip --json addr show eth0 | jq -r '.[0].addr_info[] | select(.family == "inet") | .local')
echo "KUBELET_EXTRA_ARGS=--node-ip=$local_ip" | sudo tee /etc/default/kubelet > /dev/null

Скопируйте скрипт на все серверы.

Войдите в систему от имени пользователя root. Для выполнения этого скрипта требуются права root.

sudo su

Добавьте права доступа к исполняемому скрипту с помощью следующей команды.

chmod +x utilities.sh

Запустите скрипт.

./utilities.sh

Скрипт установит и настроит все необходимое для кластера Kubernetes.

При успешном выполнении вы получите результат, как показано ниже.

Шаг 3: Создайте файл конфигурации Kubeadm

Следующим шагом будет создание файла конфигурации Kubeadm YAML со всеми необходимыми конфигурациями для control plane.

Сохраните следующий файл YAML как kubeadm.config в узле control plane. Замените 35.89.184.80 на общедоступный или частный IP узла control plane.

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
apiServer:
  certSANs:
    - 127.0.0.1
    - 35.89.184.80
  extraArgs:
    bind-address: "0.0.0.0"
scheduler:
  extraArgs:
    bind-address: "0.0.0.0"
controllerManager:
  extraArgs:
    bind-address: "0.0.0.0"
networking:
  podSubnet: "10.244.0.0/16"
  serviceSubnet: "10.96.0.0/12"

Шаг 4: Инициализируйте плоскость управления с помощью файла конфигурации

Теперь, используя kubeadm, мы запустим плоскость управления.

Выполните следующую команду kubeadm в узле плоскости управления, где вы сохранили kubeadm.config файл.

kubeadm init --config=kubeadm.config

При успешном выполнении вы получите следующий результат, показанный на рисунке ниже. Скопируйте команду join и сохраните ее в блокноте. Нам нужно, чтобы команда join была запущена на рабочих узлах, чтобы присоединиться к главному узлу.

Выполните следующие действия, чтобы добавить файл admin.conf в домашнюю папку для использования команд kubectl

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Проверьте kubectl, выполнив следующую команду.

kubectl get pod -n kube-system

Вы должны увидеть результат, подобный приведенному ниже.

root@controlplane# kubectl get pod -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-5dd5756b68-6t77f               1/1     Running   0          5m23s
coredns-5dd5756b68-gkbhp               1/1     Running   0          5m23s
etcd-controlplane                      1/1     Running   1          5m36s
kube-apiserver-controlplane            1/1     Running   0          5m39s
kube-controller-manager-controlplane   1/1     Running   0          5m38s
kube-proxy-2264s                       1/1     Running   0          5m23s
kube-scheduler-controlplane            1/1     Running   0          5m38s
root@controlplane:/home/ubuntu#

Шаг 5: Присоединяйтесь к рабочим узлам для управления Plane

Теперь, когда плоскость управления настроена, нам нужно присоединить рабочий узел к плану управления.

Выполните команду join, которую вы указали на последнем шаге, на рабочих узлах. Это должно выглядеть следующим образом.

kubeadm join 172.31.41.192:6443 --token e5919f.htqtr9b1zlf0pc26 \
        --discovery-token-ca-cert-hash sha256:1b034aba240d892c3c05d7dd551623df51759164ed3072b368a7c0415a522266

Успешный результат должен выглядеть следующим образом

4oot@node01# kubeadm join 172.31.41.192:6443 --token e5919f.htqtr9b1zlf0pc26 \
        --discovery-token-ca-cert-hash sha256:1b034aba240d892c3c05d7dd551623df51759164ed3072b368a7c0415a522266

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

Выполните следующую команду на узле плоскости управления, чтобы проверить, присоединился ли узел к кластеру.

kubectl get nodes

Вы должны увидеть следующий вывод.

oot@controlplane:/home/ubuntu# kubectl get nodes
NAME           STATUS   ROLES           AGE     VERSION
controlplane   Ready    control-plane   14m     v1.28.1
node01         Ready    <none>          6m22s   v1.28.1

Шаг 6: Проверка кластера

Давайте проведем smoke-тест и валидируем кластер.

Мы добавили все команды, которые вы можете использовать для проверки различных аспектов кластеров.

КомандаОписание
kubectl get nodesПроверьте состояние узлов в кластере.
kubectl get pods --all-namespacesПроверьте, все ли модули запущены или успешно завершили работу.
kubectl cluster-infoПолучите основную информацию о кластере.
kubectl get svcПроверьте службы, работающие в пространстве имен по умолчанию.
kubectl get componentstatusesПроверьте состояние компонентов кластера, таких как etcd, controller-manager и т.д.
kubectl api-resourcesПросмотрите все доступные ресурсы API.
kubectl config viewПросмотрите настройки kubeconfig.
kubectl get eventsСмотрите такие события, как операции масштабирования или ошибки.
kubectl versionПроверьте версии клиента и сервера.

Заключение

В этом блоге мы рассмотрели установку кластера Kubernetes с использованием простых шагов и конфигураций.

Далее вы можете попробовать развернуть приложения на кластере. Настройка кластера — одна из важных задач на сертификационном экзамене CKA.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *