Облачная платформаВсе платформы

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

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

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

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

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

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

    .OK.

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

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

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

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

Чтобы добавить тент к узлу, выполните kubectl taint node 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

Чтобы просмотреть конфигурацию тента, выполните 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
...

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

$ 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 добавит тент с ключом node.kubernetes.io/unschedulable и NoSchedule настройкой на узле. После того как узел помечен как несоздаваемый, новые поды не могут быть запланированы на этот узел, но работающие поды не затрагиваются.

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

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

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

  5. Вернитесь к списку узлов, найдите целевой узел и выберите Ещё > Включить планирование. После этого узел станет планируемым.

Системные тенты

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

  • 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 добавит тент к текущему узлу и пометит его как недоступный. После того как контроллер cloud-controller-manager инициализирует узел, kubelet удалит тент.

Связанные операции (толерантности)

Толерантности применяются к подам и позволяют (но не требуют) подам планироваться на узлы с соответствующими тентами.

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

Пример:

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"