Облачная платформаAdvanced

Управление тайнтами узлов

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Тайнты позволяют узлу отгонять определённые pods, чтобы предотвратить их планирование на узел.

Использование консоли

В консоли CCE вы также можете пакетно управлять тайнтами узлов.

  1. Войдите в консоль CCE и нажмите имя кластера, чтобы открыть консоль кластера.
  2. В навигационной панели выберите Узлы. На отображаемой странице нажмите Узлы вкладку, выберите целевой узел и нажмите Управление метками и тайнтами над списком узлов.
  3. В отображаемом диалоговом окне нажмите Добавить операцию под Пакетная операция, а затем выберите Добавить/Обновить или Удалить а также Тайнт.

    Введите ключ и значение тэйнта, который будет изменён, выберите эффект тэйнта и нажмите OK.

  4. После добавления тэйнта проверьте добавленный тэйнт в данных узла.

С помощью kubectl

Тайнт — это пара ключ‑значение, связанная с эффектом. Доступны следующие эффекты:

  • NoSchedule: Под не будет планироваться на узел, если у него нет соответствующей толерции. Существующие поды не будут вытеснены с узла.
  • PreferNoSchedule: Kubernetes предотвращает планирование подов, которые не могут tolerировать этот тайнт, на узел.
  • NoExecute: Если pod работал на узле, pod будет вытеснен с узла. Если pod не работал на узле, pod не будет запланирован на узел.

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

$ kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.10.170 Ready <none> 73d v1.19.8-r1-CCE21.4.1.B003
192.168.10.240 Ready <none> 4h8m v1.19.8-r1-CCE21.6.1.2.B001
$ kubectl taint node 192.168.10.240 key1=value1:NoSchedule
node/192.168.10.240 tainted

Чтобы просмотреть конфигурацию taint, выполните describe и get команды следующим образом:

$ kubectl describe node 192.168.10.240
Name: 192.168.10.240
...
Taints: key1=value1:NoSchedule
...
$ kubectl get node 192.168.10.240 -oyaml
apiVersion: v1
...
spec:
providerID: 06a5ea3a-0482-11ec-8e1a-0255ac101dc2
taints:
- effect: NoSchedule
key: key1
value: value1
...

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

$ kubectl taint node 192.168.10.240 key1=value1:NoSchedule-
node/192.168.10.240 untainted
$ kubectl describe node 192.168.10.240
Name: 192.168.10.240
...
Taints: <none>
...

Настройка политики планирования узлов в режиме One-Click

Вы можете сделать узел unschedulable в консоли. Затем CCE добавит taint с ключом node.kubernetes.io/unschedulable и NoSchedule настройка узла. После того как узел помечен как несогласуемый, новые pods не могут быть запланированы на этот узел, но pods, работающие на узле, не затронуты.

  1. Войдите в CCE console и нажмите имя кластера, чтобы получить доступ к консоли кластера.
  2. В навигационной панели выберите Узлы. На отображаемой странице нажмите Узлы вкладку.
  3. В списке узлов найдите целевой узел и выберите Больше > Отключить планирование в Операция столбце.
  4. В отображаемом диалоговом окне нажмите Да чтобы настроить узел как несогласуемый.

    Эта операция добавит taint к узлу. Вы можете использовать kubectl для просмотра содержимого taint.

    $ kubectl describe node 192.168.10.240
    ...
    Taints: node.kubernetes.io/unschedulable:NoSchedule
    ...

  5. Вернитесь к списку узлов, найдите целевой узел и выберите More > Enable Scheduling. Затем узел меняется на планируемый.

System Taints

Когда на узле возникают проблемы, Kubernetes автоматически добавляет taint к узлу. Встроенные taint выглядят следующим образом:

  • node.kubernetes.io/not-ready: Узел не готов. Узел Ready значение False.
  • node.kubernetes.io/unreachable: Контроллер узла не может получить доступ к узлу. Узел Ready значение Unknown.
  • node.kubernetes.io/memory-pressure: Память узла приближается к верхнему пределу.
  • node.kubernetes.io/disk-pressure: Дисковое пространство узла приближается к верхнему пределу.
  • node.kubernetes.io/pid-pressure: PID‑ы узла приближаются к верхнему пределу.
  • node.kubernetes.io/network-unavailable: Сеть узла недоступна.
  • node.kubernetes.io/unschedulable: Узел нельзя запланировать.
  • node.cloudprovider.kubernetes.io/uninitialized: Если при запуске kubelet указан внешний драйвер облачной платформы, kubelet добавляет к текущему узлу taint и помечает его как недоступный. После контроллера cloud-controller-manager инициализирует узел, kubelet удалит taint.

Связанные операции (Tolerations)

Tolerations применяются к pods, и позволяют (но не требуют), чтобы pods планировались на узлы с соответствующими taint‑ами.

Тейнты и толеранции работают вместе, чтобы обеспечить, что поды не планируются на неподходящие узлы. Один или несколько тейнтов применяются к узлу. Это указывает, что узел не должен принимать поды, которые не терпят тейнты.

Пример:

apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"

В приведённом выше примере толерантная метка пода имеет значение key1=value1, а эффект тейнта — NoSchedule. Следовательно, под может быть запланирован на соответствующий узел.

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

tolerations:
- key: "key1"
operator: "Exists"
effect: "NoSchedule"