本页面演示了如何作为 DaemonSet 的一部分,仅在部分 节点 上运行 Pod。
你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。
假设你想要运行一个 DaemonSet,但你只需要在拥有本地固态硬盘(SSD)的节点上运行这些守护进程 Pod。例如,该 Pod 可能为节点提供缓存服务,而缓存只有在具备低延迟本地存储时才有用。
将标签 ssd=true 添加到拥有 SSD 的节点上。
kubectl label nodes example-node-1 example-node-2 ssd=true
让我们创建一个 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使用 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