仅在部分节点上运行 Pod
本页介绍如何将 Pod 作为 DaemonSet 的一部分,仅运行在部分 节点上。
准备工作
你需要有一个 Kubernetes 集群,并且 kubectl 命令行工具已经配置为与你的集群通信。推荐在至少有两个不是控制平面主机的节点的集群上运行本教程。如果你还没有集群,你可以使用 minikube 创建一个,或者你可以使用这些 Kubernetes 演练场之一
在部分节点上运行 Pods
假设你想运行一个 DaemonSet,但你只需要在具有本地固态硬盘 (SSD) 存储的节点上运行这些守护进程 Pod。例如,该 Pod 可能会为节点提供缓存服务,而缓存只有在低延迟本地存储可用时才有用。
第一步:给你的节点添加标签
给具有 SSDs 的节点添加标签 ssd=true
。
kubectl label nodes example-node-1 example-node-2 ssd=true
第二步:创建清单
让我们创建一个 DaemonSet,它只会在标有 SSD 标签的 节点上部署守护进程 Pods。
接下来,使用 nodeSelector
来确保 DaemonSet 只在带有 ssd
标签且值为 "true"
的节点上运行 Pods。
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
第三步:创建 DaemonSet
使用 kubectl create
或 kubectl 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 (太平洋标准时间): Use code_sample shortcode instead of code shortcode (e8b136c3b3)