在Kubernetes中,通過將Pod調度到特定的節(jié)點上,可以更好地利用集群資源、提高應用程序的性能和可靠性。本篇教程將介紹如何在Kubernetes中將Pod指派給集群中的特定節(jié)點。
一、準備
必須擁有一個 Kubernetes 的集群,同時必須配置 kubectl 命令行工具與集群通信。 建議在至少有兩個不作為控制平面主機的節(jié)點的集群上運行本教程。 如果還沒有集群,可以通過 Minikube 構建一個自己的集群,或者可以使用下面的 Kubernetes 練習環(huán)境之一:
- Killercoda
- 玩轉 Kubernetes
要獲知版本信息,請輸入 kubectl version.
二、給節(jié)點添加標簽
列出集群中的節(jié)點, 包括這些節(jié)點上的標簽:
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
從節(jié)點中選擇一個,為它添加標簽:
kubectl label nodes <your-node-name> disktype=ssd
<your-node-name> 是選擇的節(jié)點的名稱。
驗證選擇的節(jié)點確實帶有 disktype=ssd 標簽:
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é)點有 disktype=ssd 標簽。
三、創(chuàng)建Pod
1、現在創(chuàng)建一個將被調度到你選擇的節(jié)點的 Pod
此 Pod 配置文件描述了一個擁有節(jié)點選擇器 disktype: ssd 的 Pod。這表明該 Pod 將被調度到有 disktype=ssd 標簽的節(jié)點。
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent nodeSelector: disktype: ssd
使用該配置文件創(chuàng)建一個 Pod,該 Pod 將被調度到選擇的節(jié)點上:
kubectl create -f https://k8s.io/examples/pods/pod-nginx.yaml
驗證 Pod 確實運行在選擇的節(jié)點上:
kubectl get pods --output=wide
輸出類似如下:
NAME?????READY?????STATUS????RESTARTS???AGE????IP???????????NODE nginx????1/1???????Running???0??????????13s????10.200.0.4???worker0
2、創(chuàng)建一個會被調度到特定節(jié)點上的 Pod
也可以通過設置 nodeName 將某個 Pod 調度到特定的節(jié)點。
apiVersion: v1 kind: Pod metadata: name: nginx spec: nodeName: foo-node # 調度 Pod 到特定的節(jié)點 containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent
使用此配置文件來創(chuàng)建一個 Pod,該 Pod 將只能被調度到 foo-node 節(jié)點。