node 节点选择器 ¶
Note
-
我们在创建 pod 资源的时候,pod 会根据 schduler 进行调度,那么默认会调度到随机的一个工作节点,如果我们想要 pod 调度到指定节点或者调度到一些具有相同特点的 node 节点,怎么办呢?
-
可以使用 pod 中的 nodeName 或者 nodeSelector 字段指定要调度到的 node 节点
给节点添加标签 ¶
-
列出你的集群中的节点, 包括这些节点上的标签:
kubectl get nodes --show-labels
-
从你的节点中选择一个,为它添加标签:
kubectl label nodes <your-node-name> disktype=ssd
注意
'<your-node-name>' 是你选择的节点的名称。
-
验证你选择的节点确实带有
disktype=ssd
标签:kubectl get nodes --show-labels | grep disktype=ssd
注意
在前面的输出中,你可以看到 linuxnbg-1 节点有 disktype=ssd 标签。
创建一个将被调度到你选择的节点的 nodeSelector
此 Pod 配置文件描述了一个拥有节点选择器 disktype: ssd 的 Pod。这表明该 Pod 将被调度到有 disktype=ssd 标签的节点。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
-
使用该配置文件创建一个 Pod,该 Pod 将被调度到你选择的节点上:
kubectl apply -f nodeSelector.yaml
-
验证 Pod 确实运行在你选择的节点上:
kubectl get pod nginx --output=wide
创建一个会被调度到特定节点上的 nodeName
-
可以通过设置 nodeName 将某个 Pod 调度到特定的节点。
-
nodeName 是比亲和性或者 nodeSelector 更为直接的形式。nodeName 是 Pod 规约中的一个字段。如果 nodeName 字段不为空,调度器会忽略该 Pod, 而指定节点上的 kubelet 会尝试将 Pod 放到该节点上。 使用 nodeName 规则的优先级会高于使用 nodeSelector 或亲和性与非亲和性的规则。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
nodeName: linuxnbg-1 # 调度 Pod 到特定的节点
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
-
使用此配置文件来创建一个 Pod,该 Pod 将只能被调度到定义的 linuxnbg-1 节点
kubectl apply -f nodeName.yaml
-
验证 Pod 确实运行在你选择的节点上:
kubectl get pod nginx --output=wide