跳转至

node节点亲和性

node节点亲和性调度: nodeAffinity 的两种类型

  • requiredDuringSchedulingIgnoredDuringExecution:

    • 这是一个必需的规则,它要求Pod在调度时满足亲和性或反亲和性规则。如果无法满足规则,Pod将不会被调度。在运行时,这个规则将被忽略,即使在后续的调度过程中,不满足规则的条件也会被忽略。
  • preferredDuringSchedulingIgnoredDuringExecution:

    • 这是一个首选的规则,它希望Pod满足亲和性或反亲和性规则,但如果无法满足,Pod仍然可以被调度。调度器会尽量遵循这个规则,但在某些情况下,可能会违反它。

给节点添加标签

  1. 列出你的集群中的节点, 包括这些节点上的标签:

    kubectl get nodes --show-labels

  2. 从你的节点中选择一个,为它添加标签:

    kubectl label nodes <your-node-name> disktype=ssd

    注意

    '<your-node-name>' 是你选择的节点的名称。

  3. 验证你选择的节点确实带有 disktype=ssd 标签:

    kubectl get nodes --show-labels | grep disktype=ssd

    image-20240110182508041

    注意

    在前面的输出中,你可以看到 linuxnbg-1 节点有 disktype=ssd 标签。

依据强制的节点亲和性调度 Pod

下面清单描述了一个 Pod,它有一个节点亲和性配置 requiredDuringSchedulingIgnoredDuringExecution,disktype=ssd。 这意味着 pod 只会被调度到具有 disktype=ssd 标签的节点上。

pod-nginx-required-affinity.yaml
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
  1. 执行(Apply)此清单来创建一个调度到所选节点上的 Pod:

    kubectl apply -f pod-nginx-required-affinity.yaml

  2. 验证 Pod 确实运行在你选择的节点上:

    kubectl get pod nginx --output=wide

    image-20240110185357725

使用首选的节点亲和性调度 Pod

下面清单描述了一个 Pod,它有一个节点亲和性设置 preferredDuringSchedulingIgnoredDuringExecution,disktype: ssd。 这意味着 Pod 将首选具有 disktype=ssd 标签的节点。

pod-nginx-preferred-affinity.yaml
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
  1. 执行(Apply)此清单来创建一个调度到所选节点上的 Pod:

    kubectl apply -f pod-nginx-preferred-affinity.yaml

  2. 验证 Pod 确实运行在你选择的节点上:

    kubectl get pod nginx --output=wide

    image-20240110185357725