Product SiteDocumentation Site

Глава 56. Установка и настройка Kubernetes

56.1. Создание кластера Kubernetes
56.1.1. Инициализация кластера
56.1.2. Настройка сети
56.1.3. Добавление узлов (нод) в кластер
56.2. Тестовый запуск nginx
Для создания управляющего или вычислительного узла, при установке дистрибутива (см. главу Установка системы) в группе Контейнеры следует соответственно отметить пункт Сервисы Kubernetes для управляющего хоста или Сервисы Kubernetes для вычислительного узла:
Установка Kubernetes при установке системы

Примечание

На этапе «Подготовка диска» рекомендуется выбрать Server KVM/Docker/LXD/Podman/CRI-O (large /var/lib/) и не создавать раздел Swap.

Примечание

В данном руководстве рассмотрен процесс разворачивания кластера с использованием CRI-O.

56.1. Создание кластера Kubernetes

Для создания кластера необходимо несколько машин (nodes), одна из которых будет мастером. Системные требования:
  • 2 ГБ или больше ОЗУ на машину;
  • 2 ядра процессора или больше;
  • все машины должны быть доступны по сети друг для друга;
  • все машины должны успешно разрешать имена hostname друг друга (через DNS или hosts);
  • Swap должен быть выключен.

    Примечание

    Для отключения Swap нужно выполнить команду:
    # swapoff -a
    И удалить соответствующую строку в /etc/fstab.

56.1.1. Инициализация кластера

Для инициализации кластера нужно запустить одну из двух следующих команд (на мастере):
  • для настройки сети с использованием Flannel:
    # kubeadm init --pod-network-cidr=10.244.0.0/16
    
  • для настройки сети с использованием Calico:
    # kubeadm init --pod-network-cidr=10.168.0.0/16
    
где:
  • --pod-network-cidr=10.244.0.0/16 — адрес внутренней (разворачиваемой Kubernetes) сети, рекомендуется оставить данное значение для правильной работы Flannel;
  • --pod-network-cidr=10.168.0.0/16 — адрес внутренней (разворачиваемой Kubernetes) сети, рекомендуется оставить данное значение для правильной работы Calico.
Если все сделано правильно, на экране отобразится команда, позволяющая присоединить остальные ноды кластера к мастеру:
…
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.102:6443 --token rcbuiz.o0brh8chmu0i7ljw \
	--discovery-token-ca-cert-hash \
    sha256:b80186633ae51261c29ed4f5c2da68907b1e344f48a52022de413b3bd24191ce
Настроить kubernetes для работы от пользователя (на мастер-ноде):
  1. Создать каталог ~/.kube (с правами пользователя):
    $ mkdir ~/.kube
    
  2. Скопировать конфигурацию (с правами администратора):
    # cp /etc/kubernetes/admin.conf ~<пользователь>/.kube/config
    
  3. Изменить владельца конфигурационного файла (с правами администратора):
    # chown <пользователь>: ~<пользователь>/.kube/config
    

56.1.2. Настройка сети

Развернуть сеть (Container Network Interface), запустив один из двух наборов команд (на мастер-ноде):
  • для Flannel:
    $ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    
  • для Calico:
    $ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
    $ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml
    
В выводе будут отображены имена всех созданных ресурсов.
Проверить, что всё работает:
$ kubectl get pods --namespace kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-74ff55c5b-5rgmk            1/1     Running   0          38m
coredns-74ff55c5b-wjq4r            1/1     Running   0          38m
etcd-kube01                        1/1     Running   0          37m
kube-apiserver-kube01              1/1     Running   0          37m
kube-controller-manager-kube01     1/1     Running   0          37m
kube-flannel-ds-2gl6g              1/1     Running   0          92s
kube-proxy-tjmjt                   1/1     Running   0          38m
kube-scheduler-kube01              1/1     Running   0          37m
coredns должны находиться в состоянии Running. Количество kube-flannel и kube-proxy зависит от общего числа нод.

56.1.3. Добавление узлов (нод) в кластер

Подключить остальные узлы (ноды) в кластер. Для этого на узле выполнить команду (с правами администратора):
kubeadm join <ip адрес>:<порт> --token <токен>
 --discovery-token-ca-cert-hash sha256:<хэш> --ignore-preflight-errors=SystemVerification
Данная команда была выведена при выполнении команды kubeadm init на мастер-ноде.
В данном примере:
# kubeadm join 192.168.0.102:6443 --token rcbuiz.o0brh8chmu0i7ljw \
	--discovery-token-ca-cert-hash \
    sha256:b80186633ae51261c29ed4f5c2da68907b1e344f48a52022de413b3bd24191ce

[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.

Примечание

Получить токен, если его нет, можно выполнив команду (на мастер-ноде):
$ kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES
rcbuiz.o0brh8chmu0i7ljw   22h         2021-12-18T11:49:53Z   authentication,signing
По умолчанию, срок действия токена — 24 часа. Если требуется добавить новый узел в кластер по окончанию этого периода, можно создать новый токен:
$ kubeadm token create
Если значение параметра --discovery-token-ca-cert-hash неизвестно, его можно получить, выполнив команду (на мастер-ноде):
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \
   openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'
b80186633ae51261c29ed4f5c2da68907b1e344f48a52022de413b3bd24191ce
Для ввода IPv6-адреса в параметр <control-plane-host>:<control-plane-port>, адрес должен быть заключен в квадратные скобки:
[fd00::101]:2073
Проверить наличие нод (на мастер-ноде):
$ kubectl get nodes
NAME       STATUS   ROLES                  AGE    VERSION
kube01     Ready    control-plane,master   42m     v1.22.5
kube02     Ready    <none>                 2m43s   v1.22.5
kube03     Ready    <none>                 24s     v1.22.5
или
$ kubectl get nodes -o wide
Информация о кластере:
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.102:6443
CoreDNS is running at https://192.168.0.102:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Посмотреть подробную информацию о ноде:
$ kubectl describe node kube03