无论我多么努力地调整它,我都无法使Pod均匀地分布在AWS EKS集群中的四个节点上。这是豆荚山药
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集群下有七个节点-四个用于apps pod,两个用于envoy pod,一个用于杂项pod。
我希望放置一个豆荚的四个副本,并均匀地分布在这些应用程序的豆荚节点。
1条答案
按热度按时间fv2wmkja1#
虽然可以将
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。此外,请确保app: my-app-name
标签存在于您的app pod模板中。**重要提示:**如果您正在为EKS群集使用自动缩放器(例如,Karpenter)您可能还需要定义自Kubernetes 1.25以来支持的
minDomains
topologySpreadConstraints
属性。在您的情况下,它将定义所需EKS节点的最小数量。有关详细信息,请参阅:https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#spread-constraint-definition
参考文献