在不同的节点池中分布用于部署的Pod

时间:2020-07-23 20:08:38

标签: kubernetes

在我的GKE Kubernetes集群中,我有2个节点;一个带有常规节点,另一个带有可抢占节点。我希望某些Pod位于可抢占式节点上,以便节省成本,而我在常规的不可抢占节点上至少有一个Pod,以减少停机的风险。

我知道使用podAntiAffinity来鼓励将Pod安排在不同的节点上,但是有没有办法让k8s在两个中的单个部署中安排Pod? / p>

1 个答案:

答案 0 :(得分:5)

是的!您可以根据节点上的标签?️键使用Pod Topology Spread Constraints。例如,标签可以是type,值可以是regularpreemptible。然后您可以拥有类似这样的内容:

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

☮️✌️