affinity
一、affinity
1.1 认识
在 Kubernetes
中,亲和性调度(Affinity Scheduling
) 是一种强大且灵活的机制,用于控制 Pod
如何被调度到特定的节点或与其他 Pod
之间的关系。通过使用亲和性,您可以优化资源利用、提高应用的可靠性和性能。
亲和性调度 允许您定义 Pod
与节点或其他 Pod
之间的调度规则。这些规则可以基于标签、拓扑域(如区域、可用区、主机名)等,以确保 Pod
被调度到最合适的位置。Kubernetes
提供了以下几种亲和性类型:
-
节点亲和性(
Node Affinity
):控制Pod
调度到哪些节点。 -
Pod
亲和性(Pod Affinity
):控制Pod
被调度到与特定标签的其他Pod
相同的节点或拓扑域。 -
Pod
反亲和性(Pod Anti-Affinity
):控制Pod
被调度到与特定标签的其他Pod
不同的节点或拓扑域。
1.2 语法
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- disk1
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:1.27.1-perl-linux-arm64
imagePullPolicy: IfNotPresent
二、nodeAffinity
2.1 认识
节点亲和性(Node Affinity
) 允许您指定 Pod
应该被调度到哪些节点,或者哪些节点更适合运行该 Pod
。节点亲和性分为 必需(required
) 和 偏好(preferred
) 两种类型:
2.2 语法
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- disk1
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:1.27.1-perl-linux-arm64
imagePullPolicy: IfNotPresent
2.3 场景
场景一、必须亲和性: 必需的节点亲和性 (Required Node Affinity)
这是一个硬性约束,Pod
只能被调度到满足条件的节点上。如果没有符合条件的节点,Pod
将无法调度成功。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:1.27.1-perl-linux-arm64
imagePullPolicy: IfNotPresent
场景二、偏好亲和性: 偏好的节点亲和性(Preferred Node Affinity
) 这是一个软性约束,表示调度器会优先选择满足条件的节点,但如果没有符合条件的节点,Pod 仍然可以被调度到其他节点上。
apiVersion: v1
kind: Pod
metadata:
name: preferred-node-affinity-pod
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: region
operator: In
values:
- us-west
containers:
- name: app-container
image: nginx
三、podAffinity
节点亲和性(Node Affinity
) 允许您指定 Pod
应该被调度到哪些节点,或者哪些节点更适合运行该 Pod
。节点亲和性分为 必需(required
) 和 偏好(preferred
) 两种类型:
四、podAntiAffinity
Pod
亲和性(Pod Affinity
) 允许 Pod
被调度到与具有特定标签的其他 Pod
相同的节点或拓扑域,而 Pod
反亲和性则相反,防止 Pod
被调度到与具有特定标签的其他 Pod
相同的节点或拓扑域。