Управление узлами кластера

Данный раздел содержит инструкции по работе с узлами кластера. Доступные операции:

Просмотр состояния узлов кластера

С помощью командной строки

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

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

Чтобы просмотреть состояние узлов кластера:

  1. Подключитесь к кластеру с помощью Lens.

  2. Перейдите в раздел Nodes. В правой части экрана отобразится таблица узлов кластера. Состояние узлов отобразится в столбце Conditions.

Также состояние узлов кластера можно посмотреть в разделе Инструменты → Мониторинг веб-интерфейса системы.

Добавление узла к кластеру

Добавление узла к кластеру производится в два этапа:

  1. Подготовительные работы на узле, добавляемом в кластер:

    1. Установите утилиты, требуемые для подключения узла к кластеру:

      sudo dnf install bash-completion vim telnet chrony jq htop tcpdump zip unzip rsync ebtables ethtool conntrack -y
    2. Настройте синхронизацию времени с сервером времени:

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

  2. Работы на управляющем узле:

    1. Внесите в файл inventory/offline-cluster/inventory.ini информацию о новом узле:

      sudo nano inventory/offline-cluster/inventory.ini

      Внесите информацию об узле в группу all и в группу, для которой он предназначен. В качестве образца синтаксиса используйте поля инвентарных данных уже имеющихся в этом файле узлов.

    2. Запустите 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 ~
    3. Отключите offline-репозитории:

      sudo dnf config-manager --set-disabled deps-offline
      sudo dnf config-manager --set-enabled base updates
    4. Проверьте список узлов в кластере:

      sudo kubectl get node
    5. Проверьте, какой набор приложений был развернут с помощью kubespray:

      sudo kubectl get po -A

Перезапуск узла кластера

При выполнении работ по обслуживанию узла кластера (например, обновлению ОС или добавлению вычислительных ресурсов на хост) может понадобиться перезапуск узла. Чтобы сделать это, выполните на узле следующие команды:

  1. Переведите узел в drain-режим:

    kubectl drain <node_name> --ignore-daemonsets

    Здесь:

    • <node_name> — имя узла (например, system-worker05.k8s.dev.rvision.local).

      Операция drain позволяет перераспределить все поды с узла. В процессе выполнения drain узел помечается как unschedulable. Это предотвращает появление на нем новых подов. Затем drain начинает перемещать поды с узла и завершает работу контейнеров, которые на данный момент запущены на узле, отправляя сигнал TERM контейнерам в поде.
  2. Остановите сервисы kubelet и containerd:

    sudo systemctl stop kubelet
    sudo systemctl stop containerd
  3. Произведите обслуживание узла.

  4. Повторно запустите сервисы kubelet и containerd:

    sudo systemctl start containerd
    sudo systemctl start kubelet
  5. Сделайте узел вновь назначаемым, чтобы на нем появлялись поды:

    kubectl uncordon <node_name>
    kubectl get nodes -o wide

    Здесь:

    • <node_name> — имя узла (например, system-worker05.k8s.dev.rvision.local).

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

Для удаления узла выполните следующие шаги:

  1. Откройте файл инвентаризации:

    sudo nano inventory/offline-cluster/inventory.ini

    Удалите узел из файла инвентаризации и сохраните его.

  2. Переведите узел в drain-режим, чтобы освободить ресурсы на нем:

    kubectl drain --ignore-daemonsets worker02.example.local
  3. После того как ресурсы будут перераспределены, запустите плейбук на удаление узлов:

    Так как плейбуку требуется доступ к файлу /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"

    Плейбук запросит подтверждение операции.

  4. После завершения работы плейбука запросите список узлов и проверьте, что узел удален:

    kubectl get nodes