Kubernetes通过Pod Affinity和Anti-Affinity规则实现Pod的智能调度,其核心在于利用标签(Labels)和拓扑域(Topology Domain)控制Pod的分布逻辑。
-
Pod Affinity:通过
podAffinity
定义Pod间的“亲和性”,要求调度器将新Pod部署到与目标Pod(通过Label Selector匹配)同一拓扑域的节点上。例如,为缓存服务与计算密集型Pod配置亲和性,可减少跨节点通信延迟。 -
Pod Anti-Affinity:通过
podAntiAffinity
实现“反亲和性”,强制或建议调度器避免将Pod部署到与目标Pod同一拓扑域的节点。例如,数据库多副本的反亲和性可避免单节点故障导致服务中断。 -
规则类型:
- 硬性规则(
requiredDuringSchedulingIgnoredDuringExecution
):必须满足条件,否则Pod无法调度。 - 软性规则(
preferredDuringSchedulingIgnoredDuringExecution
):调度器优先但不强制满足,适用于容错场景。
- 硬性规则(
-
拓扑域关键参数:
topologyKey
:指定节点标签的键(如kubernetes.io/hostname
、failure-domain.beta.kubernetes.io/zone
),定义拓扑域粒度(节点、机架、可用区等)。
实际应用中需权衡规则严格性,避免过度约束导致调度失败,同时结合节点资源分配(Resource Requests/Limits)和污点(Taints)机制,实现高可用与资源优化的平衡。