K8S亲和性配置相关说明
- 配置说明
- **Kubernetes 亲和性配置详细说明**
- **一、亲和性类型**
- **二、节点亲和性(Node Affinity)**
- **1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution**
- **2. 软策略:preferredDuringSchedulingIgnoredDuringExecution**
- **三、Pod 亲和性(Pod Affinity)**
- **1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution**
- **2. 软策略:preferredDuringSchedulingIgnoredDuringExecution**
- **四、Pod 反亲和性(Pod Anti-Affinity)**
- **1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution**
- **2. 软策略:preferredDuringSchedulingIgnoredDuringExecution**
- **五、拓扑域(Topology Key)**
- **六、完整示例**
- **七、总结**
- 相关文献
配置说明
Kubernetes 亲和性配置详细说明
Kubernetes 的亲和性(Affinity)是一种调度策略,用于控制 Pod 调度到特定的节点或与其他 Pod 共存/分离。通过亲和性配置,可以优化资源分配、提高性能以及增强高可用性。
一、亲和性类型
Kubernetes 提供了两种主要类型的亲和性配置:
-
Node Affinity(节点亲和性)
控制 Pod 调度到哪些节点上。 -
Pod Affinity 和 Pod Anti-Affinity(Pod 亲和性和反亲和性)
控制 Pod 是否与某些已存在的 Pod 共存或分离。
二、节点亲和性(Node Affinity)
1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution
- 定义:必须满足条件,否则 Pod 不会被调度。
- 示例:
假设我们希望 Pod 只能调度到标签为disk-type=ssd
的节点上:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disk-typeoperator: Invalues:- ssd
2. 软策略:preferredDuringSchedulingIgnoredDuringExecution
- 定义:优先选择符合条件的节点,但如果找不到符合条件的节点,Pod 仍然可以被调度到其他节点。
- 示例:
假设我们希望 Pod 优先调度到标签为cpu-num=16
的节点上:affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: cpu-numoperator: Invalues:- "16"
三、Pod 亲和性(Pod Affinity)
1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution
- 定义:Pod 必须与某些已存在的 Pod 共存,否则不会被调度。
- 示例:
假设我们希望新 Pod 与标签为app=my-app
的 Pod 共存:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- my-apptopologyKey: kubernetes.io/hostname
2. 软策略:preferredDuringSchedulingIgnoredDuringExecution
- 定义:优先将 Pod 调度到与某些已存在的 Pod 共存的节点上。
- 示例:
假设我们希望新 Pod 优先与标签为env=production
的 Pod 共存:affinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: envoperator: Invalues:- productiontopologyKey: kubernetes.io/hostname
四、Pod 反亲和性(Pod Anti-Affinity)
1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution
- 定义:Pod 必须与某些已存在的 Pod 分离,否则不会被调度。
- 示例:
假设我们希望新 Pod 不与标签为app=my-app
的 Pod 共存:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- my-apptopologyKey: kubernetes.io/hostname
2. 软策略:preferredDuringSchedulingIgnoredDuringExecution
- 定义:优先将 Pod 调度到与某些已存在的 Pod 分离的节点上。
- 示例:
假设我们希望新 Pod 优先不与标签为env=production
的 Pod 共存:affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: envoperator: Invalues:- productiontopologyKey: kubernetes.io/hostname
五、拓扑域(Topology Key)
在 Pod 亲和性和反亲和性中,topologyKey
定义了拓扑域的范围。常见的拓扑键包括:
kubernetes.io/hostname
:表示单个节点。failure-domain.beta.kubernetes.io/zone
:表示可用区。failure-domain.beta.kubernetes.io/region
:表示区域。
例如,使用 failure-domain.beta.kubernetes.io/zone
可以实现跨可用区的调度策略。
六、完整示例
apiVersion: v1
kind: Pod
metadata:name: example-podlabels:app: example
spec:containers:- name: example-containerimage: nginxaffinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disk-typeoperator: Invalues:- ssdpreferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: cpu-numoperator: Invalues:- "16"podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- my-apptopologyKey: kubernetes.io/hostnamepodAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: envoperator: Invalues:- productiontopologyKey: kubernetes.io/hostname
七、总结
通过亲和性配置,可以灵活地控制 Pod 的调度行为,从而优化资源分配和提高系统的可靠性。以下是关键点:
- 节点亲和性:控制 Pod 调度到哪些节点。
- Pod 亲和性:控制 Pod 与哪些已存在的 Pod 共存。
- Pod 反亲和性:控制 Pod 与哪些已存在的 Pod 分离。
- 拓扑域:定义调度的范围(如节点、可用区或区域)。
根据实际需求,合理配置亲和性规则,能够显著提升 Kubernetes 集群的性能和稳定性。
相关文献
【Kubernets】Kubernets资源类型Deployment详细介绍