#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. да, но тогда вам нужно настроить селектор для каждого модуля. Использование анти-аффинности позволяет достичь именно того, что вам нужно, не привязывая вас к определенным узлам