Каков рекомендуемый способ развертывания kafka, чтобы он развертывался на всех доступных узлах?

#kubernetes #apache-kafka

#kubernetes #apache-kafka

Вопрос:

У меня есть 3 узла в k8s, и я запускаю kafka (3 кластера). При развертывании zk / broker / rest-proxy он не развертывается на всех доступных узлах. Как я могу убедиться, что все модули развернуты на разных узлах. Нужно ли мне использовать nodeaffinity или podaffinity?

Ответ №1:

Если вы хотите, чтобы все модули запускались на разных узлах — вы должны использовать PodAntiAffinity. Если это жесткое требование — вы должны использовать requiredDuringSchedulingIgnoredDuringExecution правило. Если это не так — используйте preferredDuringSchedulingIgnoredDuringExecution .

topologyKey должно быть kubernetes.io/hostname .

labelSelector Поместите метки вашего модуля.

Ответ №2:

Я рекомендую использовать soft anti-affinity, который будет выглядеть:

 affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - <your app label>
          topologyKey: kubernetes.io/hostname
        weight: 100
  

Здесь я объяснил разницу между типами анти-аффинности на примерах, применяемых к живому кластеру:
https://blog.verygoodsecurity.com/posts/kubernetes-multi-az-deployments-using-pod-anti-affinity /

Комментарии:

1. Могу ли я использовать nodeSelector: label: node1 , будет ли это осуществимым подходом?

2. да, но тогда вам нужно настроить селектор для каждого модуля. Использование анти-аффинности позволяет достичь именно того, что вам нужно, не привязывая вас к определенным узлам