Модуль с допуском запланирован на узел без заражения

#kubernetes

#kubernetes

Вопрос:

У меня есть модуль с этими настройками:

 Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/memory-pressure:NoSchedule
                 node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 60s
                 role_va
  

Модуль запланирован на этот узел:

 Labels:             balancer=true
                    beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    cpu_avx2=true
                    cpu_avx512f=true
                    kubernetes.io/hostname=p20b-sr3-r5-k8s-node4
                    master=true
                    worker=true
Annotations:        node.alpha.kubernetes.io/ttl=0
                    volumes.kubernetes.io/controller-managed-attach-detach=true
Taints:             <none>
  

Пожалуйста, помогите мне понять, почему.
Если я не ошибаюсь, модуль с допуском «role_va» должен быть запланирован только для узла, на котором есть это заражение.
В моем случае на узле нет этого заражения, но модуль запланирован на этот узел независимо. Почему?

Ответ №1:

Как сказала Малгожата, заражения и допуски полезны только для того, чтобы узлы принимали модули определенного типа. Например. узел с «синим»заражением может принимать модули только с «синим» допуском. Однако это не означает, что модуль с «синим» допуском окажется только в узле с «синим» заражением. Планировщик Kube может выбрать любой другой узел, у которого нет заражения (и, следовательно, нет предпочтений типа pod).

Ниже приведены два возможных способа достижения ваших требований.

  1. Примените узел с заражением и модуль с этим допуском. А также объявить привязку узла к модулю, что является предпочтением модуля для получения расписания на определенном узле. Эти две конфигурации вместе гарантируют, что ваш модуль будет запланирован на определенном узле. И на узле будут только модули с определенным допуском.

  2. Если у вас три узла, нанесите «синюю» порчу на один из них и «красную» порчу на остальные узлы. Это вынудит модуль с «синим» допуском использовать только один вариант для перехода на узел с «синим» заражением. Потому что другие узлы имеют «красное» заражение, а модуль не имеет «красного» допуска.

Ответ №2:

Ответ на ваш вопрос включен в определение загрязнений и допусков в документации Kubernetes: Taints and Tolerations

Способ, которым Kubernetes обрабатывает множественные заражения и допуски, подобен фильтру: начните со всех заражений узла, затем игнорируйте те, для которых модуль имеет соответствующий допуск; остальные незарегистрированные заражения оказывают указанное влияние на модуль

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