Kubernetes DaemonSets при наличии допусков
Я думаю о разделении моего кластера Kubernetes на зоны выделенных узлов для эксклюзивного использования выделенными группами пользователей, как обсуждалось здесь. Мне интересно, как портят узлы повлиять DaemonSets
включая те, которые жизненно важны для работы кластера (например, kube-proxy
, kube-flannel-ds-amd64
)?
Документация говорит, что стручки демона уважают пороки и терпимость. Но если это так, то как может система планировать, например, pube-блоки на узлах, зараженных kubectl taint nodes node-x zone=zone-y:NoSchedule
когда стручок (который не находится под моим контролем, но принадлежит собственному Kubernetes DaemonSet kube-proxy
) не несет соответствующей терпимости.
Что я нашел эмпирически до сих пор, так это то, что Kubernetes 1.14 перепланирует модуль куб-прокси независимо (после того, как я удалил его на зараженном node-x
), что, похоже, противоречит документации. С другой стороны, мне кажется, что это не так DaemonSet
, Когда я убью свой стручок на node-x
он переносится только после того, как я удаляю порчу узла (или, вероятно, после того, как я добавляю допуск к спецификации модуля внутри DaemonSet
).
Так как же DaemonSet
и допуски взаимодействуют в деталях. Может быть, это так DaemonSet
s (например, kube-proxy
, kube-flannel-ds-amd64
) лечится специально?
1 ответ
Твой kube-proxy
и у фланелевых наборов демонов будет много допусков, определенных в их манифесте, которые означают, что они будут запланированы даже на испорченных узлах.
Вот пара из моего демона набора каналов:
tolerations:
- effect: NoSchedule
operator: Exists
- key: CriticalAddonsOnly
operator: Exists
- effect: NoExecute
operator: Exists
Вот вред от одного из моих главных узлов:
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/controlplane
value: "true"
- effect: NoExecute
key: node-role.kubernetes.io/etcd
value: "true"
Хотя большинство рабочих нагрузок не будет запланировано на главном сервере из-за его NoSchedule
а также NoExectue
taints, там будет запущен модуль канала, потому что daemonset специально переносит эти taints.
Документ, с которым вы уже связаны, подробно описан.
Я была такая же проблема. Моему демону было необходимо запускать свои модули на всех узлах (определение критического модуля). У меня было это определение допусков к демону:
spec:
template:
spec:
tolerations:
- key: CriticalAddonsOnly
operator: Exists
И он работал на единственном узле без определения заражения...
Я проверил свой kube-proxy, который был просто другой строкой:
spec:
template:
spec:
tolerations:
- key: CriticalAddonsOnly
operator: Exists
- operator: Exists
Поэтому я добавил эту строку "- operator: Exists" (я не совсем понимаю, что он делает и как) в свое определение демона, и теперь он работает нормально. Мой демон запускает поды на всех узлах моего кластера...