为跨不同节点池的部署分发 pod

har*_*ryg 2 kubernetes

在我的 GKE Kubernetes 集群中,我有 2 个节点;一个带有常规节点,另一个带有抢占式节点。我希望一些 Pod 位于抢占式节点上,这样我可以节省成本,同时我在常规的非抢占式节点上至少有 1 个 Pod,以降低停机风险。

我知道podAntiAffinity用于鼓励在不同节点上安排 pod,但是有没有办法让 k8s 为跨两个的单个部署安排 pod ?

Ric*_*ico 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
Run Code Online (Sandbox Code Playgroud)

您还可以标识 a maxSkew,这意味着一个标签值(节点类型)可以具有的多个 pod 的最大差异。

您还可以将多个“Pod 拓扑扩展约束”与 PodAffinity/AntiAffinity 和 NodeAffinity 组合在一起。一切都取决于什么最适合您的用例。

注意:此功能在 1.16 中为 alpha,在 1.18 中为 beta。Beta 功能默认启用,但对于 alpha 功能,您需要在 GKE 中使用alpha 集群

???