仅在部分节点上运行 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)