Управление узлами платформы
1. Общие сведения о процессах управления узлами
В процессе эксплуатации кластеров Nova Container Platform вы можете столкнуться с различными задачами по управлению узлами кластера, например:
-
Расширение количества узлов
-
Изменение объема выделенных ресурсов
-
Переустановка компонентов платформы на узле кластера
-
Перевод узла в режим обслуживания
Текущая конфигурация узлов кластера определена в манифесте infrastructures.config.nova-platform.io/cluster, ознакомиться с которым вы можете выполнив команду:
kubectl describe infrastructures.config.nova-platform.io cluster
Пример
$ kubectl describe infrastructures.config.nova-platform.io cluster
Name: cluster
Namespace:
Labels: <none>
Annotations: <none>
API Version: config.nova-platform.io/v1alpha2
Kind: Infrastructure
Metadata:
Creation Timestamp: 2023-09-05T15:14:06Z
Generation: 1
Resource Version: 3263
UID: bfd04986-dca3-4361-b669-6a7e0da4e861
Spec:
Cluster Configuration:
Dns Base Domain: nova.mycompany.local
Cluster Nodes:
Infra:
Network Spec:
Hostname: infra.mycompany.local
Ip: 172.31.101.24
State: present
Master:
Network Spec:
Hostname: master.mycompany.local
Ip: 172.31.101.25
State: present
Worker:
Network Spec:
Hostname: worker.mycompany.local
Ip: 172.31.101.26
State: present
Customer ID: 5d4a2c84b6e22623
Infrastructure Provider:
None:
License Key: a098f0aefdc021b643c2eb76c1cad0a8
Version: v6.0.1
Status:
API Server URL: https://172.31.100.122:6443
Platform: none
Events: <none>
|
Изменение манифеста |
2. Горизонтальное масштабирование кластера
Горизонтальное масштабирование заключается в добавлении новых узлов в кластер Kubernetes и выполняется с помощью утилиты nova-ctl.
2.1. Масштабирование кластера, установленного универсальным методом (UPI)
Необходимые условия
-
Вы подготовили виртуальный или физический узел для добавления в кластер согласно разделу Подготовка к установке платформы Nova Container Platform.
-
На вашем локальном компьютере установлена утилита nova-ctl.
-
У вас есть доступ к Kubernetes API с привилегиями администратора кластера (
cluster-admin). -
У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите
nova-ctl. -
У вас есть токен доступа к хранилищу секретов StarVault с привилегиями
root.
|
При подготовке нового узла используйте такие же имя пользователя и открытую часть ключа SSH, как и на остальных узлах кластера, которые использовались на подготовительном этапе. |
Процедура
-
Запустите процесс масштабирования узлов кластера с помощью команды:
nova-ctl scale --ssh-user <имя_пользователя> --ssh-key <закрытый ключ SSH>В качестве аргументов
--ssh-keyи--ssh-userукажите информацию, использованную на этапе конфигурации ключевой пары SSH. -
Далее для временного редактирования будет открыт файл конфигурации кластера в текстовом редакторе
vi. -
Добавьте новый узел в блок конфигурации ClusterNodes и сохраните изменения.
Пример
nova-ctl scale --ssh-user nova-installer --ssh-key id_rsa.pem spec: ... clusterNodes: ... worker: # Роль узла в кластере Kubernetes. - hostGroup: "worker" # Существующий узел в кластере Kubernetes. networkSpec: hostname: "worker01.mycompany.local" ip: "172.31.101.26" state: "present" ... - hostGroup: "worker" # Добавляемый узел в кластер Kubernetes. networkSpec: hostname: "worker02.mycompany.local" ip: "172.31.101.27" state: "present" -
На запрос
Enter Vault root token:введите токен доступа к хранилищу секретов StarVault с привилегиямиroot, после чего начнется процесс добавления узла в кластер. -
Дождитесь сообщения об успешном выполнении операции.
Пример
■ Validating cluster nodes... done ■ Validating license... done ■ Cleaning up... done ■ Preparing cluster nodes... done 🚀 Cluster is successfully scaled. -
Проверьте состояние узлов кластера Kubernetes после успешного масштабирования согласно руководству.
2.2. Масштабирование кластера, установленного в среде zVirt (IPI)
Необходимые условия
-
На вашем локальном компьютере установлена утилита nova-ctl.
-
У вас есть доступ к Kubernetes API с привилегиями администратора кластера (
cluster-admin). -
У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите
nova-ctl. -
У вас есть токен доступа к хранилищу секретов StarVault с привилегиями
root.
|
Если вы решили использовать новый шаблон для виртуальной машины, то при его подготовке используйте такие же имя пользователя и открытую часть ключа SSH, как и на остальных узлах кластера, которые использовались на подготовительном этапе. |
Процедура
-
Запустите процесс масштабирования узлов кластера с помощью команды:
nova-ctl scale --ssh-user <имя_пользователя> --ssh-key <закрытый ключ SSH>В качестве аргументов
--ssh-keyи--ssh-userукажите информацию, использованную на этапе конфигурации ключевой пары SSH. -
Далее для временного редактирования будет открыт файл конфигурации кластера в текстовом редакторе
vi. -
Добавьте новый узел в блок конфигурации ClusterNodes и сохраните изменения.
Пример
nova-ctl scale --ssh-user nova-installer --ssh-key id_rsa.pem spec: ... clusterNodes: ... worker: # Роль узла в кластере Kubernetes. - hostGroup: "worker" # Существующий узел в кластере Kubernetes. networkSpec: hostname: "worker01.mycompany.local" ip: "10.251.11.120" gateway: "10.251.11.254" netmask: "255.255.255.0" dns: - "10.251.1.2" state: "present" ... - hostGroup: "example-worker" # Добавляемый узел в кластер Kubernetes. networkSpec: hostname: "worker02.mycompany.local" ip: "10.251.11.119" gateway: "10.251.11.254" netmask: "255.255.255.0" dns: - "10.251.1.2" state: "present" -
При необходимости вы можете добавить в блок hostGroup описание новой группы узлов, в которой можно указать идентификатор нового шаблона виртуальной машины.
Пример
nova-ctl scale --ssh-user nova-installer --ssh-key id_rsa.pem spec: ... infrastructureProvider: ... zvirt: ... hostGroup: ... - name: "example-worker" templateId: "729df7ab-900b-4df7-ac40-01b70629dd4e" vnicProfileId: "9a58ffa8-98d8-472c-9198-5f54a9f8aaac" cpuCores: 1 cpuSockets: 8 cpuThreads: 1 memory: "8GiB" maximumMemory: "16GiB" -
На запрос
Enter Vault root token:введите токен доступа к хранилищу секретов StarVault с привилегиямиroot, после чего начнется процесс добавления узла в кластер. -
В процессе масштабирования будет запрошено подтверждение на создание виртуальных машин и сетевых интерфейсов в среде виртуализации zVirt.
Пример
nova-ctl scale –ssh-user nova-installer –ssh-key id_rsa.pem ■ Validating license… done ☕️ 3/8: Preparing infrastructure… The following actions will be preformed: * create ovirt_vm worker01-nova-internal * create ovirt_vm worker02-nova-internal * create ovirt_nic worker01-nova-internal * create ovirt_nic worker02-nova-internal * create ovirt_vm_start worker01-nova-internal * create ovirt_vm_start worker02-nova-internal Are you sure you want to apply these changes? (yes/no) [no] yes -
Дождитесь сообщения об успешном выполнении операции.
Пример
nova-ctl scale --ssh-user nova-installer --ssh-key id_rsa.pem ■ Validating license... done ■ Preparing infrastructure... done ■ Validating cluster nodes... done ■ Preparing cluster nodes... done ■ Scaling Kubernetes cluster... done 🚀 Cluster is successfully scaled. -
Проверьте состояние узлов кластера Kubernetes после успешного масштабирования согласно руководству.
3. Вертикальное масштабирование узлов кластера
Вертикальное масштабирование заключается в добавлении физических или виртуальных ресурсов к текущим узлам кластера Kubernetes. В зависимости от метода установки платформы вертикальное масштабирование может выполняться как с помощью утилиты nova-ctl, так и вручную.
3.1. Масштабирование узлов кластера, установленного универсальным методом (UPI)
Перед проведением работ по изменению ресурсов узла кластера Kubernetes необходимо вывести данный узел в режим обслуживания.
Необходимые условия
-
На вашем локальном компьютере установлена утилита nova-ctl.
-
У вас есть доступ к Kubernetes API с привилегиями администратора кластера (
cluster-admin). -
У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите
nova-ctl.
Процедура
-
Выведите список всех узлов кластера и определите имя узла, которому необходимо изменить количество выделенных ресурсов:
kubectl get nodesПример
kubectl get nodes NAME STATUS ROLES AGE VERSION master.mycompany.local Ready control-plane 5d17h v1.26.8 worker.mycompany.local Ready ingress,worker 5d17h v1.26.8 infra.mycompany.local Ready infra 5d17h v1.26.8 -
Переведите выбранный узел в режим обслуживания согласно процедуре, описанной в разделе Перевод узла в режим обслуживания.
-
После успешного перевода узла в режим обслуживания вы можете выключить узел для проведения работ по масштабированию ресурсов.
-
После завершения работ по масштабированию включите узел и дождитесь его загрузки.
-
Проверьте, что узел стал доступен для размещения рабочих нагрузок, следуя процедуре возврата узла в эксплуатацию.
3.2. Масштабирование кластера, установленного в среде zVirt (IPI)
Необходимые условия
-
На вашем локальном компьютере установлена утилита nova-ctl.
-
У вас есть доступ к Kubernetes API с привилегиями администратора кластера (
cluster-admin). -
У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите
nova-ctl.
Процедура
-
Запустите процесс масштабирования узлов кластера с помощью команды:
nova-ctl scale --ssh-user <имя_пользователя> --ssh-key <закрытый ключ SSH>В качестве аргументов
--ssh-keyи--ssh-userукажите информацию, использованную на этапе конфигурации ключевой пары SSH. -
Далее для временного редактирования будет открыт файл конфигурации кластера в текстовом редакторе
vi. -
Измените количество выделенных ресурсов для групп узлов определенных в блоке hostGroup и сохраните изменения.
Пример
nova-ctl scale --ssh-user nova-installer --ssh-key id_rsa.pem spec: ... infrastructureProvider: ... zvirt: ... hostGroup: ... - name: example-worker templateId: 729df7ab-900b-4df7-ac40-01b70629dd4e vnicProfileId: 9a58ffa8-98d8-472c-9198-5f54a9f8aaac cpuCores: 1 cpuSockets: 12 cpuThreads: 1 memory: 12GiB maximumMemory: 16GiBВ среде виртуализации zVirt ресурсы для виртуальных машин будут добавлены c помощью горячего подключения (hot plug) при следующих условиях:
-
Увеличение объема ОЗУ (memory) на значение не превышающее установленный лимит (maximumMemory).
-
Увеличение количества виртуальных процессоров (cpuSockets) без изменениях их характеристик (cpuCores, cpuThreads).
Уменьшение количества ресурсов, изменение характеристик виртуальных процессоров (cpuCores, cpuThreads), а также изменение лимита ОЗУ (maximumMemory) требует последующего перезапуска виртуальных машин вручную. Для выполнения корректного перезапуска узлов кластера действуйте согласно процедуре вертикального масштабирования кластера, установленного универсальным методом (UPI).
-
-
В процессе масштабирования будет запрошено подтверждение на изменение виртуальных машин в среде виртуализации zVirt.
Пример
nova-ctl scale –ssh-user nova-installer –ssh-key id_rsa.pem ■ Validating license… done ☕️ 3/8: Preparing infrastructure… The following actions will be preformed: * update ovirt_vm worker03-nova-internal * update ovirt_vm worker04-nova-internal * update ovirt_vm worker05-nova-internal * update ovirt_vm ingress01-nova-internal * update ovirt_vm ingress02-nova-internal Are you sure you want to apply these changes? (yes/no) [no] yes -
Дождитесь сообщения об успешном выполнении операции.
Пример
nova-ctl scale --ssh-user nova-installer --ssh-key id_rsa.pem ■ Validating license... done ■ Preparing infrastructure... done ■ Validating cluster nodes... done ■ Preparing cluster nodes... done ■ Scaling Kubernetes cluster... done 🚀 Cluster is successfully scaled. -
Перейдите в веб-интерфейс среды виртуализации zVirt и убедитесь, что ресурсы виртуальных машин были изменены.
-
Запланируйте и выполните процедуру перезапуска узла в среде zVirt. Перезапуск узла рекомендуется выполнять вместе с переводом узла в режим обслуживания.
4. Удаление узлов кластера
Удаление узлов из кластера может быть выполнено в автоматическом режиме с помощью утилиты nova-ctl.
Необходимые условия
-
На вашем локальном компьютере установлена утилита nova-ctl.
-
У вас есть доступ к Kubernetes API с привилегиями администратора кластера (
cluster-admin). -
У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите
nova-ctl. -
У вас есть токен доступа к хранилищу секретов StarVault с привилегиями
root.
Процедура
-
Запустите процесс удаления узлов кластера с помощью команды:
nova-ctl scale --ssh-user <имя_пользователя> --ssh-key <закрытый ключ SSH>В качестве аргументов
--ssh-keyи--ssh-userукажите информацию, использованную на этапе конфигурации ключевой пары SSH. -
Далее для временного редактирования будет открыт файл конфигурации кластера в текстовом редакторе
vi. -
Отметьте узлы выбранные для удаления, изменив значение ключа
stateсpresentнаabsentи сохраните изменения.Пример
nova-ctl scale --ssh-user nova-installer --ssh-key id_rsa.pem spec: ... clusterNodes: ... worker: # Роль узла в кластере Kubernetes. - hostGroup: "worker" # Существующий узел в кластере Kubernetes. networkSpec: hostname: "worker01.mycompany.local" ip: "10.251.11.119" gateway: "10.251.11.254" netmask: "255.255.255.0" dns: - "10.251.1.2" state: "present" ... - hostGroup: "worker" # Удаляемый узел из кластера Kubernetes. networkSpec: hostname: "worker02.mycompany.local" ip: "10.251.11.119" gateway: "10.251.11.254" netmask: "255.255.255.0" dns: - "10.251.1.2" state: "absent" -
В процессе будет запрошено подтверждение на удаление виртуальной машины.
Пример
nova-ctl scale –ssh-user nova-installer –ssh-key id_rsa.pem ☕️ 8/8: Finishing installation… The following actions will be preformed: * delete ovirt_nic worker02-nova-internal * delete ovirt_vm worker02-nova-internal * delete ovirt_vm_start worker02-nova-internal Are you sure you want to apply these changes? (yes/no) [no] yesДанный этап выполняется только для кластеров Kubernetes, развернутых в инфраструктуре, подготавливаемой узлом
nova-ctlдля управления платформой (IPI). Виртуальная машина будет полностью удалена из платформы виртуализации. -
Дождитесь сообщения об успешном выполнении операции.
Пример
■ Validating license... done ■ Preparing infrastructure... done ■ Validating cluster nodes... done ■ Preparing cluster nodes... done ■ Scaling Kubernetes cluster... done 🚀 Cluster is successfully scaled. -
Проверьте состояние узлов кластера Kubernetes после успешного масштабирования согласно руководству.
5. Повторное добавление узлов в кластер
В случае необходимости повторного добавления узла в кластер Kubernetes, например, в ситуациях, когда на узле требуется полная переустановка компонентов платформы, вам необходимо сначала удалить узел из кластера, следуя процедуре удаления узлов, а затем выполнить повторное добавление узла, используя процедуру горизонтального масштабирования кластера. На данном узле будет выполнен полный сброс и переустановка всех компонентов Nova Container Platform.
6. Перевод узла в режим обслуживания
В процессе эксплуатации платформы Nova Container Platform может возникнуть необходимость перевода узла в режим обслуживания. Находясь в режиме обслуживания, узел исключается из очереди Kubernetes Scheduler и более не может размещать какие-либо вновь запланированные рабочие нагрузки. Любые существующие рабочие нагрузки будут эвакуированы и запущенны на других подходящий узлах кластера Kubernetes. Исключение составляют нагрузки, запущенные контроллером DaemonSet, перезапуск которых на других узлах невозможен.
Перевод узла кластера Kubernetes в режим обслуживания может быть выполнен с помощью утилиты kubectl согласно процедуре, описанной далее.
|
Объекты Pod, которые не управляются контроллерами ReplicaSet, DaemonSet, StatefulSet и Job, не могут быть эвакуированы с узла и будут удалены при переводе узла в режим обслуживания. Убедитесь, что в кластере Kubernetes есть достаточное количество узлов, отвечающих тем же критериям, что и переводимый в режим обслуживания узел. В противном случае эвакуированные объекты Pod будут находиться в состоянии |
6.1. Перевод узла кластера в режим обслуживания
Для перевода узла в режим эксплуатации следуйте процедуре ниже.
Необходимые условия
-
На вашем локальном компьютере установлена утилита nova-ctl.
-
У вас есть доступ к Kubernetes API с привилегиями администратора кластера (
cluster-admin). -
У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите
nova-ctl.
Процедура
-
Получите список всех узлов кластера и определите имя узла, который необходимо вывести в режим обслуживания:
kubectl get nodesПример
kubectl get nodes NAME STATUS ROLES AGE VERSION master.mycompany.local Ready control-plane 5d17h v1.26.8 worker.mycompany.local Ready ingress,worker 5d17h v1.26.8 infra.mycompany.local Ready infra 5d17h v1.26.8 -
Переведите выбранный узел в состояние
SchedulingDisabled, выполнив команду:kubectl cordon <имя узла>Пример
$ kubectl cordon worker.mycompany.local node/worker.mycompany.local cordoned -
Выполните эвакуацию всех рабочих нагрузок с выбранного узла, выполнив команду:
kubectl drain <имя узла> --ignore-daemonsetsПример
$ kubectl drain worker.mycompany.local --ignore-daemonsets node/worker.mycompany.local already cordoned Warning: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-rdmzh, nova-csi-drivers/nova-oauth-csi-provider-6hnbs, nova-csi-drivers/nova-secrets-store-csi-driver-qcmnh, nova-ingress-public/nova-ingress-public-controller-g8g7h, nova-monitoring/nova-cadvisor-f9pfm, nova-monitoring/nova-prometheus-node-exporter-ppfn6, nova-neuvector/neuvector-enforcer-pod-nxwch, nova-secrets-webhook/nova-oauth-secrets-webhook-slssp evicting pod kube-system/coredns-5b7664d478-w269k evicting pod kube-system/coredns-5b7664d478-7vbbb pod/coredns-5b7664d478-w269k evicted pod/coredns-5b7664d478-7vbbb evicted node/worker.mycompany.local drainedДля удаления с узла объектов Pod, запущенных без использования контроллеров ReplicaSet, DaemonSet, StatefulSet и Job, используйте
kubectl drainс опцией--force. -
После успешного выполнения команды
kubectl drainвы можете выключить узел для проведения запланированных работ.
6.2. Возврат узла кластера в режим эксплуатации
Для возврата узла в режим эксплуатации следуйте процедуре ниже.
Необходимые условия
-
На вашем локальном компьютере установлена утилита nova-ctl.
-
У вас есть доступ к Kubernetes API с привилегиями администратора кластера (
cluster-admin). -
У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите
nova-ctl.
Процедура
-
После завершения работ включите ранее выключенный узел и дождитесь его загрузки.
-
Проверьте, что узел стал доступен для размещения рабочих нагрузок (статус узла
Ready) выполнив команду:kubectl get nodesПример
kubectl get nodes NAME STATUS ROLES AGE VERSION master.mycompany.local Ready control-plane 5d18h v1.26.8 worker.mycompany.local Ready,SchedulingDisabled ingress,worker 5d18h v1.26.8 infra.mycompany.local Ready infra 5d18h v1.26.8 -
Разрешите запуск рабочих нагрузок на выбранном узле, выполнив команду:
kubectl uncordon <имя узла>Пример
$ kubectl uncordon worker.mycompany.local node/worker.mycompany.local uncordoned -
Узел готов к эксплуатации в кластере Kubernetes.
7. Выключение платформы Nova Container Platform
В данном разделе описана процедура корректного выключения платформы Nova Container Platform.
7.1. Подготовительные действия для выключение Nova Container Platform
-
Выполните полное резервное копирование мастер-узлов перед выключением кластера Kubernetes.
Убедитесь, что резервная копия надежна сохранена на внешнем хранилище. В случае каких-либо проблем с Nova Container Platform данная резервная копия поможет вам восстановить кластер в прежнее состояние.
-
Если вы планируете отключение кластера Kubernetes на довольно продолжительное время, то проверьте срок действия TLS-сертификатов.
-
Для проверки срока действия сертификатов используйте раздел документации Проверка срока действия сертификатов платформы.
-
При необходимости обновления сертификатов воспользуйтесь разделом документации Обновление сертификатов платформы.
-
-
(Опционально) Выполните резервное копирование данных пользовательских приложений предусмотренным вами методом.
7.2. Выключение узлов кластера
|
Вы можете выключить узлы кластера Kubernetes на срок не более 1 года от даты первоначальной установки платформы или перевыпуска сертификатов в кластере. При соблюдении данных сроков кластер Kubernetes запустится корректно и продолжит функционировать. |
-
Вы выполнили полное резервное копирование мастер-узлов
-
У вас есть доступ к кластеру с учетной записью, имеющей роль
cluster-adminв Kubernetes. -
Вы установили утилиту
kubectlдля работы с Kubernetes.
Процедура
-
Установите на каждом узле кластера Kubernetes запрет на запуск новых нагрузок:
for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; kubectl cordon ${node} ; doneПример
for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; kubectl cordon ${node} ; done nova-infra-1.mycompany.local node/nova-infra-1.mycompany.local cordoned nova-master-1.mycompany.local node/nova-master-1.mycompany.local cordoned nova-worker-1.mycompany.local node/nova-worker-1.mycompany.local cordoned -
Остановите существующие нагрузки и освободите от них рабочие узлы кластера Kubernetes:
for node in $(kubectl get nodes -l node-role.kubernetes.io/worker -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; kubectl drain ${node} --delete-emptydir-data --ignore-daemonsets=true --timeout=15s ; doneПример
for node in $(kubectl get nodes -l node-role.kubernetes.io/worker -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; kubectl drain ${node} --delete-emptydir-data --ignore-daemonsets=true --timeout=15s ; done nova-worker-1.mycompany.local node/nova-worker-1.mycompany.local already cordoned Warning: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-4c5t6, nova-csi-drivers/nova-oauth-csi-provider-s4zk5, nova-csi-drivers/nova-secrets-store-csi-driver-t65px, nova-ingress-public/nova-ingress-public-controller-lzjhk, nova-monitoring/nova-cadvisor-s2pc4, nova-monitoring/nova-prometheus-node-exporter-nqhmq, nova-secrets-webhook/nova-oauth-secrets-webhook-dzvlk node/nova-worker-1.mycompany.local drained -
Остановите существующие нагрузки и освободите от них инфраструктурные узлы кластера Kubernetes:
for node in $(kubectl get nodes -l node-role.kubernetes.io/infra -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; kubectl drain ${node} --delete-emptydir-data --ignore-daemonsets=true --timeout=15s ; doneПример
for node in $(kubectl get nodes -l node-role.kubernetes.io/infra -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; kubectl drain ${node} --delete-emptydir-data --ignore-daemonsets=true --timeout=15s ; done nova-infra-1.mycompany.local node/nova-infra-1.mycompany.local already cordoned Warning: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-qkdc8, nova-csi-drivers/nova-oauth-csi-provider-4rp6k, nova-csi-drivers/nova-secrets-store-csi-driver-2l7mj, nova-ingress-internal/nova-ingress-internal-controller-97mkb, nova-monitoring/nova-cadvisor-pdncn, nova-monitoring/nova-prometheus-node-exporter-4626w, nova-secrets-webhook/nova-oauth-secrets-webhook-sc8ms evicting pod nova-monitoring/prometheus-main-0 evicting pod kube-system/nova-dns-6fb4489cd7-qn8mw evicting pod nova-gitops/image-automation-controller-5ffdb68d9d-t4flv evicting pod kube-system/coredns-6ccbfbdc9d-6fk7l ... -
Выключите узлы кластер Kubernetes:
for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do kubectl debug node/${node} --image=hub.nova-platform.io/registry/nova/support-tools:v1.0.0 -n kube-system -- chroot /host shutdown -h 1; doneПример
for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do kubectl debug node/${node} --image=hub.nova-platform.io/registry/nova/support-tools:v1.0.0 -n kube-system -- chroot /host shutdown -h 1; done Creating debugging pod node-debugger-nova-infra-1.mycompany.local-n6vjk with container debugger on node nova-infra-1.mycompany.local. Creating debugging pod node-debugger-nova-master-1.mycompany.local-78gfx with container debugger on node nova-master-1.mycompany.local. Creating debugging pod node-debugger-nova-worker-1.mycompany.local-xd6wc with container debugger on node nova-worker-1.mycompany.local.Если кластер Kubernetes установлен в закрытом сетевом окружении с использованием Nova Universe, то необходимо использовать образ
nova/support-tools:v1.0.0из хранилища образов Nova Universe. -
Выключите при необходимости связанные с Nova Container Platform внешние ресурсы (внешние хранилища, службы каталогов, хранилища образов и т.п.).
Для включения кластера Nova Container Platform следуйте процедуре перезапуска узлов платформы.
8. Перезапуск платформы Nova Container Platform
В данном разделе описана процедура корректного перезапуска (включения) платформы Nova Container Platform.
8.1. Предварительные условия для перезапуска Nova Container Platform
-
Вы корректно выключили кластер Nova Container Platform согласно процедуре выключения.
-
У вас есть доступ к кластеру с учетной записью, имеющей роль
cluster-adminв Nova Container Platform. -
Вы установили утилиту
kubectlдля работы с Nova Container Platform.
Процедура
-
Включите связанные с Nova Container Platform внешние ресурсы (внешние хранилища, службы каталогов, хранилища образов и т.п.).
-
Включите узлы кластера Nova Container Platform и дождитесь загрузки ОС. Подождите не менее 5 минут перед как проверять статус мастер-узлов платформы.
-
Проверьте, узлы запущены и готовы к работе:
kubectl get nodesУзлы запущены и готовы к работе, если имеют статус Ready, как показано ниже:
NAME STATUS ROLES AGE VERSION nova-master-1.mycompany.local Ready,SchedulingDisabled control-plane 22h v1.27.11 nova-infra-1.mycompany.local Ready,SchedulingDisabled infra 22h v1.27.11 nova-worker-1.mycompany.local Ready,SchedulingDisabled ingress,worker 22h v1.27.11 -
Разрешите планирование (запуск) рабочих нагрузок на мастер-узлах:
kubectl uncordon -l node-role.kubernetes.io/control-planeПример
kubectl uncordon -l node-role.kubernetes.io/control-plane node/nova-master-1.mycompany.local uncordoned -
Дождитесь запуска рабочих нагрузок на мастер-узлах.
-
Разрешите запуск (планирование) рабочих нагрузок на инфраструктурных узлах:
kubectl uncordon -l node-role.kubernetes.io/infraПример
kubectl uncordon -l node-role.kubernetes.io/infra node/nova-infra-1.mycompany.local uncordoned -
Дождитесь запуска рабочих нагрузок на инфраструктурных узлах.
-
Разрешите запуск рабочих нагрузок на рабочих узлах:
kubectl uncordon -l node-role.kubernetes.io/workerПример
kubectl uncordon -l node-role.kubernetes.io/worker node/nova-worker-1.mycompany.local uncordoned -
Проверьте, что в кластере Kubernetes все необходимые сервисы запустились корректно:
kubectl get pods -A -o wide | grep -v "Run\|Comp"Пустой вывод данной команды означает, что в кластере Kubernetes отсутствуют какие-либо сервисы, находящиеся в статусах, отличных от Running или Completed.
9. Распределение рабочей нагрузки в процессе работы
Базовая функциональность Kubernetes не предусматривает перераспределение рабочей нагрузки в процессе работы. В Nova Container Platform для поддержки оптимального распределения и использования ресурсов задействуется компонент descheduler.
Descheduler на основе заданных критериев периодически оценивает нагрузку и вытесняет поды.
Descheduler запускается в Nova Container Platform с политикой, заданной в ConfigMap nova-descheduler в namespace nova-descheduler.
Descheduler каждые 15 минут вытесняет поды, которые удовлетворяют включенной в ConfigMap политике.
|
Время, после которого будут вытеснены поды завист от настройки |
9.1. Настройки политики Descheduler
9.1.1. DefaultEvictor
DefaultEvictor обеспечивает вытеснение подов таким образом, чтобы результирующий под поместился хотя бы на одном доступном узле, если указана опция nodeFit: true.
- name: "DefaultEvictor"
args:
nodeFit: true
9.1.2. RemoveDuplicates
Политика RemoveDuplicates следит за тем, чтобы на узле был запущенн только один под с одним контроллера. Если подов с контроллером два на одном узле, descheduler удаляет дублирующий под.
- name: ProfileName
pluginConfig:
- name: "RemoveDuplicates"
plugins:
balance:
enabled:
- "RemoveDuplicates"
9.1.3. RemoveFailedPods
Политика RemoveFailedPods вытесняет поды, которые завершились с ошибкой и в течении установленного времени minPodLifetimeSeconds не восстановились, за исключением тех, которые принадлежат типам, перечисленным в excludeOwnerKinds.
- name: "RemoveFailedPods"
args:
excludeOwnerKinds:
- "Job"
minPodLifetimeSeconds: 900
9.1.4. PodLifeTime
Политика PodLifeTime гарантирует, что поды в состояниях Pending и/или PodInitializing старше 30 минут будут вытеснены с узлов.
- name: "PodLifeTime"
args:
maxPodLifeTimeSeconds: 1800
states:
- "Pending"
- "PodInitializing"
9.1.5. RemovePodsHavingTooManyRestarts
Политика RemovePodsHavingTooManyRestarts гарантирует, что поды, имеющие больше 50 перезапусков контейнеров (включая init-контейнеры), будут удалены с узлов.
- name: "RemovePodsHavingTooManyRestarts"
args:
podRestartThreshold: 50
includingInitContainers: true
9.1.6. RemovePodsViolatingNodeTaints
Политика RemovePodsViolatingNodeTaints гарантирует, что поды, нарушающие определённые условия (taint) на узлах, будут удалены. Например, под имеющий toleration и запущенный на узле с соответствующим taint будет будет вытеснен с узла, если taint на узле будет изменен или удален.
Настроенные taint можно посмотреть в настройке политики.
- name: "RemovePodsViolatingNodeTaints"
args:
excludedTaints:
- node.kubernetes.io/memory-pressure
- node.kubernetes.io/disk-pressure
- node.kubernetes.io/pid-pressure
- node.kubernetes.io/unschedulable
- node.kubernetes.io/network-unavailable
9.1.7. RemovePodsViolatingNodeAffinity
Политика RemovePodsViolatingNodeAffinity обеспечивает соблюдение подами affinity rules. Если поды не соответствуют affinity rules, то поды будут вытеснены с узла.
Настроенные affinity rules:
-
requiredDuringSchedulingIgnoredDuringExecution -
preferredDuringSchedulingIgnoredDuringExecution
- name: "RemovePodsViolatingNodeAffinity"
args:
nodeAffinityType:
- "requiredDuringSchedulingIgnoredDuringExecution"
- "preferredDuringSchedulingIgnoredDuringExecution"
9.1.8. RemovePodsViolatingInterPodAntiAffinity
Политика RemovePodsViolatingInterPodAntiAffinity следит за тем, чтобы все поды нарушившие правила anti-affinity были удалены.
- name: "RemovePodsViolatingInterPodAntiAffinity"
9.1.9. LowNodeUtilization
Политика LowNodeUtilization находит нагруженные узлы и перераспределяет их поды на ненагруженные узлы. Узлы в кластере отслеживаются по CPU/памяти/подам (в процентах). После превышения порога указанного в политике — перераспределяет поды.
|
Настройка учитывает не реальное потребление ресурсов на узле, а реквесты у подов. |
- name: ProfileName
pluginConfig:
- name: "LowNodeUtilization"
args:
thresholds:
"cpu" : 40
"memory": 40
"pods": 20
targetThresholds:
"cpu" : 80
"memory": 80
"pods": 60
plugins:
balance:
enabled:
- "LowNodeUtilization"
9.2. Пример настроенной политики Descheduler
policy.yaml
apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
- name: Default
pluginConfig:
- name: "DefaultEvictor"
args:
nodeFit: true
- name: "RemoveDuplicates"
- name: "RemoveFailedPods"
args:
excludeOwnerKinds:
- "Job"
minPodLifetimeSeconds: 900
- name: "PodLifeTime"
args:
maxPodLifeTimeSeconds: 1800
states:
- "Pending"
- "PodInitializing"
- name: "RemovePodsHavingTooManyRestarts"
args:
podRestartThreshold: 50
includingInitContainers: true
- name: "RemovePodsViolatingNodeTaints"
args:
excludedTaints:
- node.kubernetes.io/memory-pressure
- node.kubernetes.io/disk-pressure
- node.kubernetes.io/pid-pressure
- node.kubernetes.io/unschedulable
- node.kubernetes.io/network-unavailable
- name: "RemovePodsViolatingNodeAffinity"
args:
nodeAffinityType:
- "requiredDuringSchedulingIgnoredDuringExecution"
- "preferredDuringSchedulingIgnoredDuringExecution"
- name: "RemovePodsViolatingInterPodAntiAffinity"
- name: "LowNodeUtilization"
args:
thresholds:
"cpu" : 40
"memory": 40
"pods": 20
targetThresholds:
"cpu" : 80
"memory": 80
"pods": 60
plugins:
deschedule:
enabled:
- "RemovePodsViolatingInterPodAntiAffinity"
- "RemovePodsViolatingNodeAffinity"
- "RemovePodsViolatingNodeTaints"
- "RemovePodsHavingTooManyRestarts"
- "PodLifeTime"
- "RemoveFailedPods"
balance:
enabled:
- "LowNodeUtilization"
- "RemoveDuplicates"
При обновлении платформы старая политика сохраняется в ConfigMap nova-descheduler-deprecated.