仅在某些节点上运行 Pod

本页演示了你如何能够仅在某些节点上作为 DaemonSet 的一部分运行Pod

准备开始

你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:

仅在某些节点上运行 Pod

设想一下你想要运行 DaemonSet, 但你只需要在配备了本地固态 (SSD) 存储的节点上运行这些守护进程 Pod。 例如,Pod 可以向节点提供缓存服务,而缓存仅在低延迟本地存储可用时才有用。

第 1 步:为节点打标签

在配有 SSD 的节点上打标签 ssd=true

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

第 2 步:创建清单

让我们创建一个 DaemonSet, 它将仅在打了 SSD 标签的节点上制备守护进程 Pod。

接下来,使用 nodeSelector 确保 DaemonSet 仅在 ssd 标签设为 "true" 的节点上运行 Pod。

  1. controllers/daemonset-label-selector.yaml
  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4. name: ssd-driver
  5. labels:
  6. app: nginx
  7. spec:
  8. selector:
  9. matchLabels:
  10. app: ssd-driver-pod
  11. template:
  12. metadata:
  13. labels:
  14. app: ssd-driver-pod
  15. spec:
  16. nodeSelector:
  17. ssd: "true"
  18. containers:
  19. - name: example-container
  20. image: example-image

第 3 步:创建 DaemonSet

使用 kubectl createkubectl apply 从清单创建 DaemonSet。

让我们为另一个节点打上标签 ssd=true

  1. kubectl label nodes example-node-3 ssd=true

节点打上标签后将自动触发控制平面(具体而言是 DaemonSet 控制器)在该节点上运行新的守护进程 Pod。

  1. kubectl get pods -o wide

输出类似于:

  1. NAME READY STATUS RESTARTS AGE IP NODE
  2. <daemonset-name><some-hash-01> 1/1 Running 0 13s ..... example-node-1
  3. <daemonset-name><some-hash-02> 1/1 Running 0 13s ..... example-node-2
  4. <daemonset-name><some-hash-03> 1/1 Running 0 5s ..... example-node-3