4

我有几个 Kubernetes 集群,每个集群都有不同的#of 节点。我的配置部署有“副本:#nodes”。没有为调度该 pod 设置特定的配置,但在部署之后,我看到节点上 pod 分布的奇怪行为。

例子:

对于 30 个节点的集群(30 个副本),所有 30 个 pod 副本仅分布在 25 个节点上,其他 5 个节点在集群中是理想的。 许多其他不同集群的类似情况,这个计数在每次新/重新部署时都会有所不同。

问题:

我想将我的 pod 副本分布在所有节点上。如果我设置“副本:#nodes”,那么我应该在每个节点中有一个 pod 副本。如果我将副本数增加/加倍,那么它应该均匀分布。Kubernetes 的部署 yaml 中是否有任何特定配置?

使用节点 AntiAffinity 进行配置,但此配置仍然如上所示。尝试使用“requiredDuringSchedulingIgnoredDuringExecution”,并且确实在每个节点中部署了一个 pod,但是如果我增加副本或任何节点在部署期间出现故障,那么整个部署将失败。

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

2 回答 2

3

如果每个节点部署需要 1 个 pod,则应该使用daemonSet而不是 replicaSet。或者,如果您需要每个节点超过 1 个 pod,并且仍然希望 pod 分布基本均匀,您可以使用我在这篇文章中讨论的 pod 反亲和性

于 2019-12-21T13:54:58.090 回答
0

请参阅 Pod 拓扑传播约束https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ 此功能允许您根据区域精细定义您的 pod 在集群中的分布方式,区域、节点和其他用户定义的拓扑域。

因此,您可以定义自己的规则来分配 pod。

于 2020-10-24T07:38:48.773 回答