Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Running Pods on Only Some Nodes
仅在某些节点上运行 Pod
本页演示了你如何能够仅在某些节点上作为 DaemonSet 的一部分运行Pod。
准备开始
你必须拥有一个 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 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