#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).
Ниже приведены два возможных способа достижения ваших требований.
-
Примените узел с заражением и модуль с этим допуском. А также объявить привязку узла к модулю, что является предпочтением модуля для получения расписания на определенном узле. Эти две конфигурации вместе гарантируют, что ваш модуль будет запланирован на определенном узле. И на узле будут только модули с определенным допуском.
-
Если у вас три узла, нанесите «синюю» порчу на один из них и «красную» порчу на остальные узлы. Это вынудит модуль с «синим» допуском использовать только один вариант для перехода на узел с «синим» заражением. Потому что другие узлы имеют «красное» заражение, а модуль не имеет «красного» допуска.
Ответ №2:
Ответ на ваш вопрос включен в определение загрязнений и допусков в документации Kubernetes: Taints and Tolerations
Способ, которым Kubernetes обрабатывает множественные заражения и допуски, подобен фильтру: начните со всех заражений узла, затем игнорируйте те, для которых модуль имеет соответствующий допуск; остальные незарегистрированные заражения оказывают указанное влияние на модуль
Это означает, что если у узла нет заражений, он будет принимать все модули, независимо от того, какие допуски будут определены в них.