在Kubernetes集群中配置Pod的亲和性(Affinity)和反亲和性(Anti-Affinity)可通过以下步骤实现:
-
定义节点标签:
- 为节点添加标签,例如标记区域或硬件类型:
kubectl label nodes <node-name> disktype=ssd
- 为节点添加标签,例如标记区域或硬件类型:
-
配置节点亲和性:
- 在Pod的YAML中,使用
nodeAffinity
指定调度规则。例如,要求Pod必须运行在带有disktype=ssd
标签的节点:affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: disktype operator: In values: [ssd]
- 在Pod的YAML中,使用
-
配置Pod间亲和性/反亲和性:
- 使用
podAffinity
或podAntiAffinity
。例如,避免同一服务的Pod部署到同一节点:affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: [web] topologyKey: kubernetes.io/hostname
- 使用
-
验证配置:
- 部署Pod后,通过以下命令检查调度结果:
kubectl get pods -o wide kubectl describe pod <pod-name> # 查看调度事件
- 部署Pod后,通过以下命令检查调度结果:
注意事项:
required*
为硬性条件,不满足则调度失败;preferred*
为软性条件,尽量满足但不保证。- 确保目标节点或已有Pod的标签正确,可通过
kubectl get nodes --show-labels
检查。 - 反亲和性常用于实现高可用(如避免单点故障)或资源隔离场景。