Добавление/удаление ноды в кластере Kubernetes

В статье описывается процедура настройки новой рабочей ноды (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. Теперь нужно выполнить подготовительные шаги для настройки хоста.

  1. Отключение swap. Kubernetes требует отключить файл подкачки (swap) на нодах. Если подкачка включена, это может привести к проблемам с производительностью и стабильностью работы Kubernetes. Отключите swap с помощью команды:

    sudo swapoff –a

    Отключите использование подкачки при перезагрузке компьютера:

    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

  2. Настройка модулей ядра Linux. Создайте файл /etc/modules-load.d/containerd.conf со следующим содержимым:
    overlay
    br_netfilter

    Выполните загрузку модулей ядра с помощью команд:

    sudo modprobe overlay
    sudo modprobe br_netfilter

  3. Настройка конфигурации sysctl для сети Kubernetes

    Создайте файл /etc/sysctl.d/99-kubernetes-cri.conf со следующим содержимым:

    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    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

В данном примере устанавливаются пакеты версии 1.20.1. При необходимости вы можете изменить в данной команде требуемые версии пакетов.

Присоединение ноды к кластеру Kubernetes

Перед добавлением новой ноды в кластер Kubernetes нужно проверить, возможно данный хост уже добавлен в кластер. Если это так, то на хосте уже установлены два компонента – kubelet и kubeproxy. Проверить это можно командой:

systemctl status kubelet.service

В ответ команда вернёт либо ошибку (если kubelet не установлен), либо статус службы kubelet (пример на рисунке ниже).

systemctl status kubelet.service

Предположим, что kubelet на машине установлен. Это может говорить о том, что машина уже является нодой кластера kubernetes.

Параметры кластера Kubernetes, к которому принадлежит машина, хранятся в конфигурационном файле /var/lib/kubelet/config.yaml . Пример содержимого данного файла на скриншоте ниже:

/var/lib/kubelet/config.yaml конфиг файл кластер kubernetes

Здесь видно имя кластера (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

kubectl get node - список нод в кластере Kubernetes

Удаление ноды из кластера Kubernetes

Теперь рассмотрим, как удалить рабочую ноду из кластер.

Выведите список нод кластера на control plane ноде:

kubectl get node

Удалите рабочую нагрузку с ноды:

kubectl drain <node-name>

Для игнорирования размещённых на ноде DaemonSet и локальных данных используйте данную команду в следующем виде:

kubectl drain <node-name> --ignore-daemonsets –delete-local-data

Удалите ноду из кластера:

kubectl delete node <node-name>

После удаления ноды из кластера, выполните на ней команду:

kubeadm reset

Данная команда вернёт ноду к состоянию, в котором она была до выполнения команды kubeadm join .


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)