在我的 GKE Kubernetes 集群中,我有 2 个节点池;一个带有常规节点,另一个带有抢占式节点。我希望一些 Pod 位于抢占式节点上,这样我可以节省成本,同时我在常规的非抢占式节点上至少有 1 个 Pod,以降低停机风险。
我知道podAntiAffinity
用于鼓励在不同节点上安排 pod,但是有没有办法让 k8s 为跨两个池的单个部署安排 pod ?
是的 !你可以使用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
Run Code Online (Sandbox Code Playgroud)
您还可以标识 a maxSkew
,这意味着一个标签值(节点类型)可以具有的多个 pod 的最大差异。
您还可以将多个“Pod 拓扑扩展约束”与 PodAffinity/AntiAffinity 和 NodeAffinity 组合在一起。一切都取决于什么最适合您的用例。
注意:此功能在 1.16 中为 alpha,在 1.18 中为 beta。Beta 功能默认启用,但对于 alpha 功能,您需要在 GKE 中使用alpha 集群。
???
归档时间: |
|
查看次数: |
526 次 |
最近记录: |