僅在部分節點上執行 Pod

本頁面演示瞭如何作為 Pod 的一部分,僅在部分 節點 上執行 DaemonSet

準備工作

你需要擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議你在至少有兩個不作為控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,你可以使用 minikube 建立一個,或者你可以使用這些 Kubernetes 操場之一。

僅在部分節點上執行 Pod

假設你想執行一個 DaemonSet,但你只需要在具有本地固態硬碟(SSD)儲存的節點上執行這些守護程式 Pod。例如,Pod 可能會為節點提供快取服務,並且只有在低延遲本地儲存可用時,快取才有用。

步驟 1:為你的節點新增標籤

為具有 SSD 的節點新增標籤 ssd=true

kubectl label nodes example-node-1 example-node-2 ssd=true

步驟 2:建立清單

讓我們建立一個 DaemonSet,它將僅在標有 SSD 的 節點 上提供守護程式 Pod。

接下來,使用 nodeSelector 確保 DaemonSet 僅在 ssd 標籤設定為 "true" 的節點上執行 Pod。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ssd-driver
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: ssd-driver-pod
  template:
    metadata:
      labels:
        app: ssd-driver-pod
    spec:
      nodeSelector:
        ssd: "true"
      containers:
        - name: example-container
          image: example-image

步驟 3:建立 DaemonSet

使用 kubectl createkubectl apply 從清單建立 DaemonSet

讓我們將另一個節點標記為 ssd=true

kubectl label nodes example-node-3 ssd=true

標記節點會自動觸發控制平面(特別是 DaemonSet 控制器)在該節點上執行新的守護程式 Pod。

kubectl get pods -o wide

輸出類似於:

NAME                              READY     STATUS    RESTARTS   AGE    IP      NODE
<daemonset-name><some-hash-01>    1/1       Running   0          13s    .....   example-node-1
<daemonset-name><some-hash-02>    1/1       Running   0          13s    .....   example-node-2
<daemonset-name><some-hash-03>    1/1       Running   0          5s     .....   example-node-3
最後修改於 2023 年 8 月 24 日下午 6:38 PST:使用 code_sample 簡碼代替 code 簡碼 (e8b136c3b3)