Kubernetes EKS 1.24中Pod Anti-Affinity软硬规则配置问题
问题分析与修复方案
你的配置存在两个关键问题,导致Pod A被调度到同一节点:
- 语法缩进错误:
requiredDuringSchedulingIgnoredDuringExecution下的topologyKey缩进不足,Kubernetes无法正确解析这条强制反亲和规则,相当于这条约束根本没生效。 - 偏好规则逻辑颠倒:你用了
podAffinityTerm(亲和规则),这会让调度器优先把新Pod A调度到已有Pod A的节点,完全违背了你的第一条需求。
正确的Pod反亲和配置
要满足「优先调度到无Pod A的节点,所有节点都有Pod A时才允许挤在一起」的需求,只需要配置优先型反亲和规则即可,不需要强制型规则。修改后的配置如下:
podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAntiAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - web-store topologyKey: "kubernetes.io/hostname"
配置说明
preferredDuringSchedulingIgnoredDuringExecution:这是调度偏好而非强制约束,调度器会尽量满足,但当所有节点都不符合条件时,会忽略该规则继续调度。podAntiAffinityTerm:明确指定反亲和逻辑,匹配带有app: web-store标签的Pod(也就是你的Pod A)。topologyKey: kubernetes.io/hostname:表示以单个节点为拓扑范围,即调度器会优先选择没有运行Pod A的节点。weight: 100:设置最高权重,确保这个偏好是调度器的首要选择。
这样配置后,新Pod A会优先被调度到空节点;当集群中所有节点都已运行Pod A时,调度器会放弃这个偏好,将新Pod A调度到任意已有Pod A的节点上,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Darshan Deshmukh
相关产品推荐
相关产品推荐

