Kubernetes 用節(jié)點(diǎn)親和性把Pods分配到節(jié)點(diǎn)

2022-06-10 13:49 更新

用節(jié)點(diǎn)親和性把 Pods 分配到節(jié)點(diǎn)

本頁(yè)展示在 Kubernetes 集群中,如何使用節(jié)點(diǎn)親和性把 Kubernetes Pod 分配到特定節(jié)點(diǎn)。

在開始之前

你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過(guò) Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:

您的 Kubernetes 服務(wù)器必須是 v1.10 或更高版本。 要檢查版本,請(qǐng)輸入 ?kubectl version?。

給節(jié)點(diǎn)添加標(biāo)簽

  1. 列出集群中的節(jié)點(diǎn)及其標(biāo)簽:
  2. kubectl get nodes --show-labels
    

    輸出類似于此:

    NAME      STATUS    ROLES    AGE     VERSION        LABELS
    worker0   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker0
    worker1   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker1
    worker2   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker2
  3. 選擇一個(gè)節(jié)點(diǎn),給它添加一個(gè)標(biāo)簽:
  4. kubectl label nodes <your-node-name> disktype=ssd
    

    其中 ?<your-node-name>? 是你所選節(jié)點(diǎn)的名稱。

  5. 驗(yàn)證你所選節(jié)點(diǎn)具有 ?disktype=ssd? 標(biāo)簽:
  6. kubectl get nodes --show-labels
    

    輸出類似于此:

    NAME      STATUS    ROLES    AGE     VERSION        LABELS
    worker0   Ready     <none>   1d      v1.13.0        ...,disktype=ssd,kubernetes.io/hostname=worker0
    worker1   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker1
    worker2   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker2

    在前面的輸出中,可以看到 ?worker0 ?節(jié)點(diǎn)有一個(gè) ?disktype=ssd? 標(biāo)簽。

依據(jù)強(qiáng)制的節(jié)點(diǎn)親和性調(diào)度 Pod 

下面清單描述了一個(gè) Pod,它有一個(gè)節(jié)點(diǎn)親和性配置 ?requiredDuringSchedulingIgnoredDuringExecution?,?disktype=ssd?。 這意味著 pod 只會(huì)被調(diào)度到具有 ?disktype=ssd? 標(biāo)簽的節(jié)點(diǎn)上。

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. 執(zhí)行(Apply)此清單來(lái)創(chuàng)建一個(gè)調(diào)度到所選節(jié)點(diǎn)上的 Pod:
  2. kubectl apply -f https://k8s.io/examples/pods/pod-nginx-required-affinity.yaml
    
  3. 驗(yàn)證 pod 已經(jīng)在所選節(jié)點(diǎn)上運(yùn)行:
  4. kubectl get pods --output=wide
    

    輸出類似于此:

    NAME     READY     STATUS    RESTARTS   AGE    IP           NODE
    nginx    1/1       Running   0          13s    10.200.0.4   worker0

使用首選的節(jié)點(diǎn)親和性調(diào)度 Pod

本清單描述了一個(gè)Pod,它有一個(gè)節(jié)點(diǎn)親和性設(shè)置 ?preferredDuringSchedulingIgnoredDuringExecution?,?disktype: ssd?。 這意味著 pod 將首選具有 ?disktype=ssd? 標(biāo)簽的節(jié)點(diǎn)。

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. 執(zhí)行此清單創(chuàng)建一個(gè)會(huì)調(diào)度到所選節(jié)點(diǎn)上的 Pod:
  2. kubectl apply -f https://k8s.io/examples/pods/pod-nginx-preferred-affinity.yaml
    
  3. 驗(yàn)證 pod 是否在所選節(jié)點(diǎn)上運(yùn)行:
  4. kubectl get pods --output=wide
    

    輸出類似于此:

    NAME     READY     STATUS    RESTARTS   AGE    IP           NODE
    nginx    1/1       Running   0          13s    10.200.0.4   worker0


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)