node节点亲和性 ¶
node节点亲和性调度: nodeAffinity 的两种类型
-
requiredDuringSchedulingIgnoredDuringExecution:
- 这是一个必需的规则,它要求Pod在调度时满足亲和性或反亲和性规则。如果无法满足规则,Pod将不会被调度。在运行时,这个规则将被忽略,即使在后续的调度过程中,不满足规则的条件也会被忽略。
-
preferredDuringSchedulingIgnoredDuringExecution:
- 这是一个首选的规则,它希望Pod满足亲和性或反亲和性规则,但如果无法满足,Pod仍然可以被调度。调度器会尽量遵循这个规则,但在某些情况下,可能会违反它。
给节点添加标签 ¶
-
列出你的集群中的节点, 包括这些节点上的标签:
kubectl get nodes --show-labels
-
从你的节点中选择一个,为它添加标签:
kubectl label nodes <your-node-name> disktype=ssd
注意
'<your-node-name>' 是你选择的节点的名称。
-
验证你选择的节点确实带有
disktype=ssd
标签:kubectl get nodes --show-labels | grep disktype=ssd
注意
在前面的输出中,你可以看到 linuxnbg-1 节点有 disktype=ssd 标签。
依据强制的节点亲和性调度 Pod
下面清单描述了一个 Pod,它有一个节点亲和性配置 requiredDuringSchedulingIgnoredDuringExecution,disktype=ssd。 这意味着 pod 只会被调度到具有 disktype=ssd 标签的节点上。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
-
执行(Apply)此清单来创建一个调度到所选节点上的 Pod:
kubectl apply -f pod-nginx-required-affinity.yaml
-
验证 Pod 确实运行在你选择的节点上:
kubectl get pod nginx --output=wide
使用首选的节点亲和性调度 Pod
下面清单描述了一个 Pod,它有一个节点亲和性设置 preferredDuringSchedulingIgnoredDuringExecution,disktype: ssd。 这意味着 Pod 将首选具有 disktype=ssd 标签的节点。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
-
执行(Apply)此清单来创建一个调度到所选节点上的 Pod:
kubectl apply -f pod-nginx-preferred-affinity.yaml
-
验证 Pod 确实运行在你选择的节点上:
kubectl get pod nginx --output=wide