Управление узлами кластера
Данный раздел содержит инструкции по работе с узлами кластера. Доступные операции:
Просмотр состояния узлов кластера
С помощью командной строки
Чтобы просмотреть состояние узлов кластера, выполните следующую команду:
kubectl get nodes -o wide
Пример списка узлов кластера
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME system-master01.k8s.dev.rvision.local Ready control-plane 140d v1.26.3 10.99.57.12 <none> RED OS MUROM (7.3.2) 5.15.131-1.el7.3.x86_64 containerd://1.7.0 system-worker01.k8s.dev.rvision.local Ready <none> 140d v1.26.3 10.99.57.13 <none> RED OS MUROM (7.3.2) 5.15.131-1.el7.3.x86_64 containerd://1.7.0 system-worker02.k8s.dev.rvision.local Ready <none> 140d v1.26.3 10.99.57.11 <none> RED OS MUROM (7.3.2) 5.15.131-1.el7.3.x86_64 containerd://1.7.0 system-worker03.k8s.dev.rvision.local Ready <none> 140d v1.26.3 10.99.57.10 <none> RED OS MUROM (7.3.2) 5.15.131-1.el7.3.x86_64 containerd://1.7.0
Состояние узлов отображается в столбце STATUS
. Возможные статусы:
-
Ready
: узел исправен и готов к размещению подов. -
NotReady
: узел столкнулся с некоторой проблемой, и на нем нельзя разместить под. -
SchedulingDisabled
: на узле отключено создание новых подов. -
Unknown
: узел недоступен для работы.
С помощью Lens
Чтобы просмотреть состояние узлов кластера:
-
Подключитесь к кластеру с помощью Lens.
-
Перейдите в раздел Nodes. В правой части экрана отобразится таблица узлов кластера. Состояние узлов отобразится в столбце Conditions.
Также состояние узлов кластера можно посмотреть в разделе Инструменты → Мониторинг веб-интерфейса системы. |
Добавление узла к кластеру
Добавление узла к кластеру производится в два этапа:
-
Подготовительные работы на узле, добавляемом в кластер:
-
Установите утилиты, требуемые для подключения узла к кластеру:
sudo dnf install bash-completion vim telnet chrony jq htop tcpdump zip unzip rsync ebtables ethtool conntrack -y
-
Настройте синхронизацию времени с сервером времени:
sudo timedatectl set-ntp true sudo sed -i "/^server /d" /etc/chrony.conf sudo bash -c 'echo "server <time_server>" >> /etc/chrony.conf' sudo systemctl enable --now chronyd sudo systemctl restart chronyd sudo systemctl status chronyd chronyc sources
Здесь:
-
<time_server>
— адрес корпоративного сервера времени (например,ntp.rvision.local
).
-
-
-
Работы на управляющем узле:
-
Внесите в файл
inventory/offline-cluster/inventory.ini
информацию о новом узле:sudo nano inventory/offline-cluster/inventory.ini
Внесите информацию об узле в группу
all
и в группу, для которой он предназначен. В качестве образца синтаксиса используйте поля инвентарных данных уже имеющихся в этом файле узлов. -
Запустите Ansible-плейбуки для добавления узла в кластер:
sudo chmod -R 755 inventory/offline-cluster/credentials sudo chmod 777 inventory/offline-cluster/credentials ansible-playbook -uuser -b -i inventory/offline-cluster/inventory.ini sysprep.yml --extra-vars archive_directory=../../.. --extra-vars sysprep_name=sys-prep-redos ansible-playbook -uuser -b -i inventory/offline-cluster/inventory.ini cluster.yml cd ~
-
Отключите offline-репозитории:
sudo dnf config-manager --set-disabled deps-offline sudo dnf config-manager --set-enabled base updates
-
Проверьте список узлов в кластере:
sudo kubectl get node
-
Проверьте, какой набор приложений был развернут с помощью
kubespray
:sudo kubectl get po -A
-
Перезапуск узла кластера
При выполнении работ по обслуживанию узла кластера (например, обновлению ОС или добавлению вычислительных ресурсов на хост) может понадобиться перезапуск узла. Чтобы сделать это, выполните на узле следующие команды:
-
Переведите узел в
drain
-режим:kubectl drain <node_name> --ignore-daemonsets
Здесь:
-
<node_name>
— имя узла (например,system-worker05.k8s.dev.rvision.local
).Операция drain
позволяет перераспределить все поды с узла. В процессе выполненияdrain
узел помечается какunschedulable
. Это предотвращает появление на нем новых подов. Затемdrain
начинает перемещать поды с узла и завершает работу контейнеров, которые на данный момент запущены на узле, отправляя сигналTERM
контейнерам в поде.
-
-
Остановите сервисы
kubelet
иcontainerd
:sudo systemctl stop kubelet sudo systemctl stop containerd
-
Произведите обслуживание узла.
-
Повторно запустите сервисы
kubelet
иcontainerd
:sudo systemctl start containerd sudo systemctl start kubelet
-
Сделайте узел вновь назначаемым, чтобы на нем появлялись поды:
kubectl uncordon <node_name> kubectl get nodes -o wide
Здесь:
-
<node_name>
— имя узла (например,system-worker05.k8s.dev.rvision.local
).
-
Удаление узла кластера
Для удаления узла выполните следующие шаги:
-
Откройте файл инвентаризации:
sudo nano inventory/offline-cluster/inventory.ini
Удалите узел из файла инвентаризации и сохраните его.
-
Переведите узел в
drain
-режим, чтобы освободить ресурсы на нем:kubectl drain --ignore-daemonsets worker02.example.local
-
После того как ресурсы будут перераспределены, запустите плейбук на удаление узлов:
Так как плейбуку требуется доступ к файлу /etc/kubernetes/admin.conf
и привилегированный доступ, эти шаги необходимо производить от имени пользователя root.ansible-playbook --ask-pass -uroot -i inventory/offline-cluster/inventory.ini remove-node.yml --extra-vars "node=worker02.example.local"
Плейбук запросит подтверждение операции.
-
После завершения работы плейбука запросите список узлов и проверьте, что узел удален:
kubectl get nodes