我在k8s中有3个从属节点,我正在运行kafka(3个集群)。在部署zk / broker / rest-proxy时,它未部署在所有可用节点中。如何确保所有pod都部署在不同的节点中。我需要使用nodeaffinity或podaffinity吗?
如果您希望所有pod在不同节点上运行 - 您必须使用PodAntiAffinity。如果这是硬性要求 - 您必须使用requiredDuringSchedulingIgnoredDuringExecution
规则。如果不是 - 使用preferredDuringSchedulingIgnoredDuringExecution
。
topologyKey
应该是kubernetes.io/hostname。
在labelSelector
放你的豆荚标签。
我建议使用柔软的抗亲和力,它看起来像:
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/