跳到主要内容

affinity

2024年11月13日
柏拉文
越努力,越幸运

一、affinity


1.1 认识

Kubernetes 中,亲和性调度(Affinity Scheduling 是一种强大且灵活的机制,用于控制 Pod 如何被调度到特定的节点或与其他 Pod 之间的关系。通过使用亲和性,您可以优化资源利用、提高应用的可靠性和性能。

亲和性调度 允许您定义 Pod 与节点或其他 Pod 之间的调度规则。这些规则可以基于标签、拓扑域(如区域、可用区、主机名)等,以确保 Pod 被调度到最合适的位置。Kubernetes 提供了以下几种亲和性类型:

  1. 节点亲和性(Node Affinity:控制 Pod 调度到哪些节点。

  2. Pod 亲和性(Pod Affinity:控制 Pod 被调度到与特定标签的其他 Pod 相同的节点或拓扑域。

  3. 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 相同的节点或拓扑域。