Kubernetes如何将Pods分配到节点上,但使用preferredDuringSchedulingIgnoredDuringExecution?

3

我希望我的API部署Pod可以分布在整个集群的节点上。 因此,我想到了以下解决方案:

spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - api
        topologyKey: "kubernetes.io/hostname"

但这样只能在每个节点上运行一个pod,不能更多。 我的问题是当我想要推出更新时,Kubernetes仍然将新创建的pod保持在“挂起”状态下。 如何将requiredDuringSchedulingIgnoredDuringExecution更改为preferredDuringSchedulingIgnoredDuringExecution? 我已经尝试过,但由于preferredDuringSchedulingIgnoredDuringExecution可能需要与requiredDuringSchedulingIgnoredDuringExecution不同的配置,因此出现了许多错误。
1个回答

4

这是正确的实现:

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

这将使得pod在节点之间平均分布,并允许每个节点拥有多个pod。因此,您可以轻松地将6个副本部署到3个节点的集群中。此外,即使新建一个额外的pod来关闭旧的pod之前,您也可以推出更新。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接