Перейти к содержанию

Режим обслуживания узлов кластера

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

Внимание

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

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

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

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

  • На вашем локальном компьютере установлена утилита nova-ctl.
  • У вас есть доступ к Kubernetes API с привилегиями администратора кластера (cluster-admin).
  • У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите nova-ctl.

Процедура

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

    kubectl get nodes
    

    Пример

    $ kubectl get nodes
    
    NAME                                           STATUS   ROLES            AGE     VERSION
    node-master-536jhgcb.nova-zig4kntx30g3.local   Ready    control-plane    5d17h   v1.26.8
    node-worker-bdh6p8fn.nova-zig4kntx30g3.local   Ready    ingress,worker   5d17h   v1.26.8
    node-worker-p0ou8a2c.nova-zig4kntx30g3.local   Ready    infra            5d17h   v1.26.8
    
  2. Переведите выбранный узел в состояние SchedulingDisabled, выполнив команду:

    kubectl cordon <имя узла>
    

    Пример

    $ kubectl cordon node-worker-bdh6p8fn.nova-zig4kntx30g3.local
    
    node/node-worker-bdh6p8fn.nova-zig4kntx30g3.local cordoned
    
  3. Выполните эвакуацию всех рабочих нагрузок с выбранного узла, выполнив команду:

    kubectl drain <имя узла> --ignore-daemonsets
    

    Пример

    $ kubectl drain node-worker-bdh6p8fn.nova-zig4kntx30g3.local --ignore-daemonsets
    
    node/node-worker-bdh6p8fn.nova-zig4kntx30g3.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/node-worker-bdh6p8fn.nova-zig4kntx30g3.local drained
    

    Информация

    Для удаления с узла объектов Pod, запущенных без использования контроллеров ReplicaSet, DaemonSet, StatefulSet и Job, используйте kubectl drain с опцией --force.

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

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

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

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

  • На вашем локальном компьютере установлена утилита nova-ctl.
  • У вас есть доступ к Kubernetes API с привилегиями администратора кластера (cluster-admin).
  • У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите nova-ctl.

Процедура

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

  2. Проверьте, что узел стал доступен для размещения рабочих нагрузок (статус узла Ready) выполнив команду:

    kubectl get nodes
    

    Пример

    $ kubectl get nodes 
    NAME                                           STATUS                     ROLES            AGE     VERSION
    node-master-536jhgcb.nova-zig4kntx30g3.local   Ready                      control-plane    5d18h   v1.26.8
    node-worker-bdh6p8fn.nova-zig4kntx30g3.local   Ready,SchedulingDisabled   ingress,worker   5d18h   v1.26.8
    node-worker-p0ou8a2c.nova-zig4kntx30g3.local   Ready                      infra            5d18h   v1.26.8
    
  3. Разрешите запуск рабочих нагрузок на выбранном узле, выполнив команду:

    kubectl uncordon <имя узла>
    

    Пример

    $ kubectl uncordon node-worker-bdh6p8fn.nova-zig4kntx30g3.local
    
    node/node-worker-bdh6p8fn.nova-zig4kntx30g3.local uncordoned
    
  4. Узел готов к эксплуатации в кластере Kubernetes.