В статье описывается процедура настройки новой рабочей ноды (worker node) и присоединения её к кластеру Kubernetes.
Требования к ресурсам сервера (виртуальной машины) :
Для стабильной работы на ВМ компонентов кластера Kubernetes и полезной нагрузки в виде подов и сервисов, рекомендуется выделить следующие ресурсы:
- CPU – 2 ядра;
- ОЗУ – 4 ГБайт;
- HDD – 8 Гбайт
Поддерживаемые ОС:
- Ubuntu версии 16.04 и выше;
- Debian версии 9 и выше;
- CentOS 7 и выше
Если ВМ работает в среде с межсетевыми экранами/файрволлами, должен быть открыт доступ к следующим портам:
-
10250/TCP
– необходимо для Kubelet API -
30000-32767/TCP
– необходимо для работы на данной ноде сервисов типа NodePort
Подготовка сервера перед добавлением в кластер Kubernetes
В этом примере мы подготовили виртуальную машину с Ubuntu для добавления в качестве ноды кластера Kubernetes. Теперь нужно выполнить подготовительные шаги для настройки хоста.
- Отключение swap. Kubernetes требует отключить файл подкачки (swap) на нодах. Если подкачка включена, это может привести к проблемам с производительностью и стабильностью работы Kubernetes. Отключите swap с помощью команды:
sudo swapoff –a
Отключите использование подкачки при перезагрузке компьютера:
sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
- Настройка модулей ядра Linux. Создайте файл /etc/modules-load.d/containerd.conf со следующим содержимым:
overlay_x000D_br_netfilter
Выполните загрузку модулей ядра с помощью команд:
sudo modprobe overlay
sudo modprobe br_netfilter - Настройка конфигурации sysctl для сети Kubernetes
Создайте файл /etc/sysctl.d/99-kubernetes-cri.conf со следующим содержимым:
net.bridge.bridge-nf-call-ip6tables = 1_x000D_net.bridge.bridge-nf-call-iptables = 1_x000D_net.ipv4.ip_forward = 1
Обновите конфигурацию, выполнив команду
sysctl --system
Теперь нужно установить необходимые пакеты:
- Containerd
- apt-transport-https и curl
- Kubernetes
Установите пакет containerd с помощью команды:
sudo apt-get update && sudo apt-get install -y containerd
Создайте папку конфигурации containerd:
sudo mkdir -p /etc/containerd
Сгенерируйте файл конфигурации containerd по умолчанию:
sudo containerd config default | sudo tee /etc/containerd/config.toml
Перезагрузите службу containerd:
systemctl restart containerd
Выполните установку данных пакетов apt-transport-https и curl с помощью команды:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
Теперь нужно установить пакеты kubernetes . Скачайте и установите ключ GPG для официального репозитория Kubernetes:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Добавьте репозиторий Kubernetes в локальный список репозиториев, создав файл /etc/apt/sources.list.d/kubernetes.list со следующим содержимым:
deb https://apt.kubernetes.io/ kubernetes-xenial main
Обновите список репозиториев, выполнив команду:
sudo apt-get update
Установите пакеты Kubernetes:
sudo apt-get install -y kubelet=1.20.1-00 kubeadm=1.20.1-00 kubectl=1.20.1-00
Присоединение ноды к кластеру Kubernetes
Перед добавлением новой ноды в кластер Kubernetes нужно проверить, возможно данный хост уже добавлен в кластер. Если это так, то на хосте уже установлены два компонента – kubelet и kubeproxy. Проверить это можно командой:
systemctl status kubelet.service
В ответ команда вернёт либо ошибку (если kubelet не установлен), либо статус службы kubelet (пример на рисунке ниже).
Предположим, что kubelet на машине установлен. Это может говорить о том, что машина уже является нодой кластера kubernetes.
Параметры кластера Kubernetes, к которому принадлежит машина, хранятся в конфигурационном файле /var/lib/kubelet/config.yaml
. Пример содержимого данного файла на скриншоте ниже:
Здесь видно имя кластера (clusterDomain)
Если хост не добавлен в кластер, нужно сгенерировать команду присоединения ноды. Для этого на control plane ноде Kubernetes выполните команду:
kubeadm token create --print-join-command
Данная команда сгенерирует временный токен и команду присоединения Worker ноды к кластеру. Полученная команда присоединения имеет вид:
kubeadm join <kubeAPI URL > --token <token> --discovery-token-ca-cert-hash sha256:<hash>
где
-
<kubeAPI URL>
— URL API-сервера Kubernetes вида <IP-адрес:порт>, -
<token>
— токен присоединения, -
<hash>
— хэш открытого ключа корневого центра сертификации (CA)
Теперь переключитесь на ваш хост и выполните команду присоединение рабочей (Worker) ноды к кластеру Kubernetes:
sudo kubeadm join <
команда присоединения Worker ноды из предыдущего шага>
Выведите на control plane ноде список текущих нод кластера. Проверьте, что новый хост был добавлен в кластер Kubernetes:
kubectl get node
Удаление ноды из кластера Kubernetes
Теперь рассмотрим, как удалить рабочую ноду из кластер.
Выведите список нод кластера на control plane ноде:
kubectl get node
Удалите рабочую нагрузку с ноды:
kubectl drain <node-name>
kubectl drain <node-name> --ignore-daemonsets –delete-local-data
Удалите ноду из кластера:
kubectl delete node <node-name>
После удаления ноды из кластера, выполните на ней команду:
kubeadm reset
Данная команда вернёт ноду к состоянию, в котором она была до выполнения команды kubeadm join
.