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и допуски взаимодействуют в деталях. Может быть, это так DaemonSets (например, 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" (я не совсем понимаю, что он делает и как) в свое определение демона, и теперь он работает нормально. Мой демон запускает поды на всех узлах моего кластера...

Другие вопросы по тегам