Тайнты позволяют узлу отталкивать определённые pod'ы, чтобы предотвратить их планирование на узел.
Процедура выполнения операций в консоли
В консоли CCE вы также можете пакетно управлять тайнтами узлов.
- Войдите в консоль CCE и нажмите название кластера, чтобы открыть консоль кластера.
- В навигационной панели выберите Узлы. На отображаемой странице нажмите Узлы вкладку, выберите целевой узел и нажмите Метки и тайнты в верхнем левом углу.
- В отображаемом диалоговом окне нажмите Добавить операцию в Пакетная операция, а затем выберите Добавить/Обновить или Удалить а также taint.
Введите ключ и значение taint для операции, выберите эффект taint и нажмите OK.
- После добавления taint проверьте добавленный taint в данных узла.
Процедура выполнения операций через kubectl
taint — это пара ключ‑значение, связанная с эффектом. Доступны следующие эффекты:
- NoSchedule: Под не будет запланирован на узел, если у него нет соответствующей toleration. Существующие pod’ы не будут вытеснены с узла.
- PreferNoSchedule: Kubernetes предотвращает планирование pod’ов, которые не могут терпеть этот taint, на узел.
- NoExecute: Если Под работал на узле, Под будет выгнан с узла. Если Под не работал на узле, Под не будет назначен на узел.
Чтобы добавить taint к узлу, выполните kubectl taint node nodename команда следующая:
$ kubectl get nodeNAME STATUS ROLES AGE VERSION192.168.10.170 Ready <none> 73d v1.19.8-r1-CCE21.4.1.B003192.168.10.240 Ready <none> 4h8m v1.19.8-r1-CCE21.6.1.2.B001$ kubectl taint node 192.168.10.240 key1=value1:NoSchedulenode/192.168.10.240 tainted
Чтобы просмотреть конфигурацию taint, выполните describe и get команды следующие:
$ kubectl describe node 192.168.10.240Name: 192.168.10.240...Taints: key1=value1:NoSchedule...$ kubectl get node 192.168.10.240 -oyamlapiVersion: v1...spec:providerID: 06a5ea3a-0482-11ec-8e1a-0255ac101dc2taints:- effect: NoSchedulekey: key1value: 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.240Name: 192.168.10.240...Taints: <none>...
Настройка политики планирования узла в режиме One-Click
Вы можете настроить узел как не планируемый в консоли. Затем CCE добавит taint с ключом node.kubernetes.io/unschedulable и NoSchedule настройка узла. После того как узел помечен как недоступный для планирования, новые pods не могут быть назначены на этот узел, но pods, работающие на узле, не затронуты.
- Войдите в консоль CCE и нажмите название кластера, чтобы открыть консоль кластера.
- В навигационной панели выберите Узлы. На отображаемой странице нажмите Узлы вкладку.
- В списке узлов найдите целевой узел и выберите Больше > Отключить планирование в Операция столбце.
- В отображаемом диалоговом окне нажмите Да чтобы настроить узел как недоступный для планирования.
Эта операция добавит taint к узлу. Вы можете использовать kubectl для просмотра содержимого taint.
$ kubectl describe node 192.168.10.240...Taints: node.kubernetes.io/unschedulable:NoSchedule... - Вернитесь к списку узлов, найдите целевой узел и выберите Больше > 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 применяются к pod‑ам и позволяют (но не требуют), чтобы pod‑ы планировались на узлы с соответствующими taint‑ами.
Тейнты и толеранции работают совместно, чтобы гарантировать, что Поды не планируются на неподходящие узлы. На узел применяется один или несколько тейнтов. Это указывает, что узел не должен принимать Поды, которые не терпят эти тейнты.
Пример:
apiVersion: v1kind: Podmetadata:name: nginxlabels:env: testspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresenttolerations:- key: "key1"operator: "Equal"value: "value1"effect: "NoSchedule"
В приведённом выше примере метка толеранции Подa имеет вид key1=value1, а эффект тейнта — NoSchedule. Следовательно, Под может быть запланирован на соответствующий узел.
Вы также можете настроить толеранции, аналогичные следующей информации, что указывает, что Под может быть запланирован на узел, когда у узла есть тейнт key1:
tolerations:- key: "key1"operator: "Exists"effect: "NoSchedule"
- Процедура выполнения операций в консоли
- Процедура выполнения операций через kubectl
- Настройка политики планирования узла в режиме одного щелчка
- Тейты системы
- Связанные операции (Tolerations)