nodeSelector
是最简单也是最推荐的节点约束方式。nodeSelector是PodSpec的一个字段。通过key-value
的方式映射。要想让pod在指定节点上运行,该节点必须将加上对应的标签(还可以包含其他标签,最常见的用法是一个key-value对)。
让我们通过一个例子来看如何使用nodeSelector
。
第一步: 将标签附加到节点上
运行kubectl get nodes
来获取节点的名称。然后选择要添加标签的那个节点,然后运行kubectl label nodes <node-name> <label-key>=<label-value>
来向你选择的节点添加标签。
例如,在节点名称是 'kube-node3' 上打上标签为disktype = ssd
,那么我可以运行kubectl label nodes kube-node3 disktype=ssd
,如下:
# kubectl get nodes
kube-node1 Ready <none> 425d v1.13.2
kube-node2 Ready <none> 405d v1.13.2
kube-node3 Ready <none> 405d v1.13.2
# 添加标签
kubectl label nodes kube-node3 disktype=ssd
你可以运行--show-lables
命令来验证你的标签是否生效了。同样你也可以使用describe node nodename
来查该节点的完整标签列表,如下:
kubectl get nodes --show-labels
或者
kubectl describe node kube-node3
第二步,添加nodeSelector到你的pod配置文件中
例如,如果这是我的pod配置:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
然后像这样添加一个nodeSelector
:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
运行它:
kubectl apply -f https://www.kubebiz.com/raw/orchome/demo/pods/pod-nginx.yaml
正常情况下,该Pod将会被调度到加过标签的节点上。可以通过运行以下命令查看Pod分配给的“NODE”来验证它是否有效。
kubectl get pods -o wide
imagePullPolicy: IfNotPresent
想问问大佬添加labels里这一行是什么意思呢?
参考这里有详细说明:Kubernetes imagePullPolicy拉取策略