使用節點親和性將 Pod 分配給節點
本頁面展示瞭如何在 Kubernetes 叢集中使用節點親和性(Node Affinity)將 Kubernetes Pod 分配到特定節點。
準備工作
你需要擁有一個 Kubernetes 叢集,並且 `kubectl` 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不是控制平面主機的節點叢集上執行本教程。如果你還沒有叢集,你可以透過使用 minikube 來建立一個,或者你可以使用這些 Kubernetes 操場中的一個。
你的 Kubernetes 伺服器版本必須是 v1.10 或更高版本。要檢查版本,請輸入 kubectl version
。
給節點新增標籤
列出叢集中的節點及其標籤
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
選擇一個節點併為其新增標籤
kubectl label nodes <your-node-name> disktype=ssd
其中
<your-node-name>
是你選擇的節點的名稱。驗證你選擇的節點是否具有
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
節點具有disktype=ssd
標籤。
使用 required node affinity 排程 Pod
此清單描述了一個具有 requiredDuringSchedulingIgnoredDuringExecution
節點親和性 disktype: ssd
的 Pod。這意味著該 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
應用清單以建立一個排程到所選節點的 Pod
kubectl apply -f https://k8s.io/examples/pods/pod-nginx-required-affinity.yaml
驗證 Pod 是否在你選擇的節點上執行。
kubectl get pods --output=wide
輸出類似於:
NAME READY STATUS RESTARTS AGE IP NODE nginx 1/1 Running 0 13s 10.200.0.4 worker0
使用 preferred node affinity 排程 Pod
這個清單描述了一個具有 preferredDuringSchedulingIgnoredDuringExecution
節點親和性 disktype: ssd
的 Pod。這意味著該 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
應用清單以建立一個排程到所選節點的 Pod
kubectl apply -f https://k8s.io/examples/pods/pod-nginx-preferred-affinity.yaml
驗證 Pod 是否在你選擇的節點上執行。
kubectl get pods --output=wide
輸出類似於:
NAME READY STATUS RESTARTS AGE IP NODE nginx 1/1 Running 0 13s 10.200.0.4 worker0
下一步
瞭解更多關於節點親和性的資訊。
最後修改於 2023 年 8 月 24 日下午 6:38 PST:使用 code_sample 簡碼代替 code 簡碼 (e8b136c3b3)