Pod 无法均匀放置

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

无论我如何努力调整,我都无法使 Pod 均匀分布在 AWS EKS 集群中的四个节点上。这是 Pod yaml。

  nodeSelector:
    node_env: my-node-name
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
            - key: node_env
              operator: In
              values:
                - my-node-name
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - my-app-name
          topologyKey: topology.kubernetes.io/hostname
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
              - key: app
                operator: In
                values:
                  - my-app-name
          topologyKey: node_env
  topologySpreadConstraints:
    - maxSkew: 1
      nodeAffinityPolicy: Honor
      topologyKey: kubernetes.io/hostname
      whenUnsatisfiable: DoNotSchedule
      labelSelector:
        matchExpressions:
        - key: app
          operator: In
          values:
          - my-app-name

EKS 集群下有七个节点 - 四个用于应用程序 Pod,两个用于 Envoy Pod,一个用于其他 Pod。

我希望放置一个 pod 的四个副本,并将其均匀分布在这些应用程序 pod 节点中。

kubernetes amazon-eks kubectl
1个回答
0
投票

虽然可以将

topologySpreadConstraints
podAntiAffinity/podAffinity
一起使用,但我不建议这样做。我建议您查看以下答案进行比较:

https://stackoverflow.com/a/73159361/19206466

如果您的目标是在节点之间实现均匀分布,则可以通过将

nodeAffinity
topologySpreadConstraints
组合来实现此目的。使用
nodeAffinity
选择适当的节点,确保您的 EKS 节点附有
node_env: my-node-name
标签。要列出节点的标签,您可以使用
kubectl describe node <eks_node>

然后,使用

topologySpreadConstraints
将 pod 均匀分布在这些节点上;设置
maxSkew: 1
应足以将 pod 均匀分布在选定的节点上。 此外,请确保您的应用程序 Pod 上存在
app: my-app-name
标签。

重要提示: 如果您为 EKS 集群使用自动缩放器(例如 Karpenter),您可能还需要定义自 Kubernetes 1.25 以来支持的

minDomains
topologySpreadConstraints
属性。 在您的情况下,它将定义所需 EKS 节点的最小数量。

有关更多信息,请参阅:https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#spread-constraint-definition

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
          - key: node_env
            operator: In
            values:
              - my-node-name
topologySpreadConstraints:
  - maxSkew: 1
    nodeAffinityPolicy: Honor
    topologyKey: kubernetes.io/hostname
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        app: my-app-name

参考文献

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