如何在Kubernetes中均匀地在所有节点上部署Pod?

时间:2019-12-21 08:49:45

标签: kubernetes kube-scheduler

我有一些Kubernetes集群,每个集群中都有不同的#of个节点。而且我的config部署具有“副本:#nodes”。没有设置用于调度该Pod的特定配置,但是在部署之后,就节点上Pod的分布而言,我看到了奇怪的行为。

示例:

对于30个节点的集群(30个副本),所有30个pod副本仅分布在25个节点上,其他5个节点在集群中处于理想状态。 对于许多其他不同的集群,情况相似,并且在每个新的/重新部署中,此计数都不同。

问题:

我想将Pod副本分发到所有节点上。如果我设置“ replicas:#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

2 个答案:

答案 0 :(得分:0)

如果每个节点部署需要1个Pod,则应使用daemonSet而不是副本集。或者,如果每个节点需要超过1个容器,并且仍然希望容器分布基本均匀,则可以使用容器抗亲和力,如我所讨论的in this post

答案 1 :(得分:0)

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

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