我希望我的api部署pod将分布到整个集群的节点。所以我想出了这个:
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- api
topologyKey: "kubernetes.io/hostname"
但这只允许每个节点中有一个pod,而不是更多。我的问题是,当我想推出更新时,kubernetes仍然是";挂起";状态
如何将requiredDuringSchedulingIgnoredDuringExecution
更改为preferredDuringSchedulingIgnoredDuringExecution
?
我试过了,但我遇到了很多错误,因为preferredDuringSchedulingIgnoredDuringExecution
可能需要与requiredDuringSchedulingIgnoredDuringExecution
不同的配置。
这是正确的实现:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- api
topologyKey: kubernetes.io/hostname
这将在节点中均匀分布pod,并允许每个节点中有多个pod。所以,基本上您可以将6个副本部署到由3个节点组成的集群中,而不会出现任何问题。此外,您可以推出更新,即使它在关闭旧吊舱之前创建了一个新的额外吊舱。