将 Pod 均匀分布在拓扑域内的节点上

问题描述 投票:0回答:1

假设我有一个这样的集群:

zoneA:
- node1: 8 CPU
zoneB:
- node2: 4 CPU
- node3: 4 CPU

zoneB 的资源总和等于zoneA 的资源总和。因此,如果我想跨区域均匀分布 foo 的 pod,我可以指定 pod 拓扑分布约束:

spec:
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: topology.kubernetes.io/zone
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        app: foo

这将为每个区域创建一个拓扑域,并且约束将强制 pod 在 2 个区域中均匀分布。

但据我所知(如果我错了,请纠正我),这不能保证每个拓扑域内的节点之间均匀分布。例如,假设有 4 个 Pod 需要安排。为了将 pod 均匀分布在 zoneB 内,放置位置将如下所示:

node1 (8 CPU): 2 pods
node2 (4 CPU): 1 pod
node3 (4 CPU): 1 pod

但是,我不明白上述约束如何阻止这样的放置:

node1 (8 CPU): 2 pods
node2 (4 CPU): 2 pods
node3 (4 CPU): 0 pods

有什么方法可以表达一个约束,保证 pod 在 zoneB 内均匀分布,同时保持 zoneA 和 zoneB 之间的均匀分布?

kubernetes scheduling
1个回答
0
投票

除了您已有的

podAntiAffinity
之外,我还会添加“软”
topologySpreadConstraints

spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          topologyKey: kubernetes.io/hostname
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - foo

调度程序将尝试将 Pod 分散到一个区域中的节点上,但不会停止它,因为您在 ZoneA 中只有一个节点。

https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#types-of-inter-pod-affinity-and-anti-affinity

© www.soinside.com 2019 - 2024. All rights reserved.