在我的GKE Kubernetes集群中,我有2个节点池;一个带有常规节点,另一个带有可抢占节点。我希望某些Pod位于可抢占式节点上,以便节省成本,而我在常规的不可抢占节点上至少有一个Pod,以减少停机的风险。
我知道使用podAntiAffinity
来鼓励将Pod安排在不同的节点上,但是有没有办法让k8s在两个池中的单个部署中安排Pod? / p>
答案 0 :(得分:5)
是的!您可以根据节点上的标签?️键使用Pod Topology Spread Constraints
。例如,标签可以是type
,值可以是regular
和preemptible
。然后您可以拥有类似这样的内容:
kind: Pod
apiVersion: v1
metadata:
name: mypod
labels:
foo: bar
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: type
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
foo: bar
containers:
- name: app
image: myimage
您还可以标识一个maxSkew
,这意味着一个标签值(节点类型)可以具有的最大数量的豆荚。
您还可以结合多个“ Pod拓扑扩展约束”,以及PodAffinity / AntiAffinity和NodeAffinity。一切都取决于最适合您的用例的。
注意:此功能在1.16中为alpha,在1.18中为beta。 Beta功能默认情况下处于启用状态,但是具有Alpha功能时,您需要在GKE中使用alpha cluster。
☮️✌️