Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Перевод узла в режим обслуживания

В процессе эксплуатации платформы Nova Container Platform может возникнуть необходимость перевода узла в режим обслуживания. В режиме обслуживания узел исключается из очереди Kubernetes Scheduler, и на нем не могут размещаться вновь запланированные рабочие нагрузки. Существующие рабочие нагрузки будут эвакуированы и запущены на других подходящих узлах кластера Kubernetes (процесс drain, или освобождение от нагрузки). Исключение составляют нагрузки, запущенные контроллером DaemonSet, перезапуск которых на других узлах невозможен.

Перевод узла кластера Kubernetes в режим обслуживания выполняется с помощью утилиты kubectl согласно процедуре, описанной далее.

Объекты Pod, которые не управляются контроллерами ReplicaSet, DaemonSet, StatefulSet и Job, не могут быть эвакуированы с узла и будут удалены при переводе узла в режим обслуживания. Убедитесь, что в кластере Kubernetes есть достаточное количество узлов, отвечающих тем же критериям, что и переводимый в режим обслуживания узел. В противном случае эвакуированные объекты Pod будут находиться в состоянии Pending до тех пор, пока узел не будет возвращен в работу.

1. Перевод узла кластера в режим обслуживания

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

1.1. С помощью веб-интерфейса

Для перевода узла в режим обслуживания с помощью веб-интерфейса следуйте процедуре ниже.

  1. В консоли Nova перейдите к разделу Узлы кластераNodes.

    cluster nodes

  2. Напротив необходимого узла нажмите на menu (три точки) и выберите пункт Освободить нагрузки.

    free node

    Или зайдите в нужный узел, нажмите действия сверху справа и выберите пункт Освободить от нагрузки.

    free node 2

  3. В открывшемся окне измените параметры (при необходимости) и нажмите Освободить от нагрузки.

    free node 3

При запуске процесса освобождения узла от нагрузки (drain) узел помечается как недоступный для распределения новых объектов Pod (устанавливается признак Планирование отключено). Объекты Pod на узле принудительно завершаются и перераспределяются на другие узлы кластера. После успешного завершения узел остается в статусе Ready, но с меткой Освобожден от нагрузки. Для восстановления работы узла и распределения объектов Pod на этот узел необходимо снять блокировку планирования.

1.2. С помощью CLI

Для перевода узла в режим обслуживания с помощью командной строки следуйте процедуре ниже.

1.2.1. Необходимые условия

  • На локальном компьютере установлена утилита nova-ctl

  • Имеется доступ к Kubernetes API с привилегиями администратора кластера (cluster-admin)

  • Имеется закрытый ключ SSH на локальном компьютере, который необходимо предоставить утилите nova-ctl

1.2.2. Процедура

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

    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
  2. Переведите выбранный узел в состояние SchedulingDisabled, выполнив команду:

    kubectl cordon <имя узла>
    Пример
    $ kubectl cordon worker.mycompany.local
    
    node/worker.mycompany.local cordoned
  3. Выполните эвакуацию всех рабочих нагрузок с выбранного узла:

    kubectl drain <имя узла> --ignore-daemonsets
    Пример
    $ kubectl drain worker.mycompany.local --ignore-daemonsets
    
    node/worker.mycompany.local already cordoned
    Warning: ignoring DaemonSet-managed Pods: kube-system/cilium-gvkgx, 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.

  4. После успешного выполнения команды kubectl drain вы можете выключить узел для проведения запланированных работ.

2. Возврат узла кластера в режим эксплуатации

Вернуть узел кластера в режим эксплуатации можно двумя способами, описанными ниже.

2.1. С помощью веб-интерфейса

Для возврата узла в режим эксплуатации с помощью веб-интерфейса в том же выпадающем списке или при нажатии на статус выберите пункт Разрешить размещение ресурсов. accept

2.2. С помощью CLI

Для возврата узла в режим эксплуатации с помощью командной строки следуйте процедуре ниже.

2.2.1. Предварительные условия

  • На локальном компьютере установлена утилита nova-ctl

  • Имеется доступ к Kubernetes API с привилегиями администратора кластера (cluster-admin)

  • Имеется закрытый ключ SSH на локальном компьютере, который необходимо предоставить утилите nova-ctl

2.2.2. Процедура

  1. После завершения работ включите ранее выключенный узел и дождитесь его загрузки.

  2. Проверьте, что узел стал доступен для размещения рабочих нагрузок (статус узла 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
  3. Разрешите запуск рабочих нагрузок на выбранном узле, выполнив команду:

    kubectl uncordon <имя узла>
    Пример
    $ kubectl uncordon worker.mycompany.local
    
    node/worker.mycompany.local uncordoned
  4. Узел готов к эксплуатации в кластере Kubernetes.