nodeSelector用于将Pod调度到匹配Label的Node上,所以要先给node打上标签,然后在Pod配置清单中选择指定Node的标签。
先给规划node用途,然后打标签,例如将两台node划分给不同团队使用:
为Node添加标签
k8s-node02给开发团队用,k8s-node03给大数据团队用
1.添加标签
kubectl label nodes k8s-node02 team=development
kubectl label nodes k8s-node03 team=bigdata
2.查看标签
kubectl get nodes -o wide --show-labels
创建资源配置清单
1 2 3 4 5 6 7 8 9 10 11 12 |
cat nodeSelector-pod.yaml apiVersion: v1 kind: Pod metadata: name: nodeselector-pod spec: nodeSelector: #指定标签选择器 team: development #label指定开发团队的label containers: - image: busybox:latest name: nodeselector-containers command: [ "/bin/sh", "-c", "tail -f /etc/passwd" ] |
创建Pod对象
kubectl apply -f nodeSelector-pod.yaml
查看pod被分配的Node
1 2 |
kubectl get pods -o wide | grep nodeselect nodeselector-pod 1/1 Running 0 49s 10.244.2.47 k8s-node02 <none> <none> |
删除标签
1 2 |
kubectl label nodes k8s-node02 team- kubectl label nodes k8s-node03 team- |
删除标签后pod还在正常运行
1 2 |
kubectl get pods -o wide | grep nodeselect nodeselector-pod 1/1 Running 0 11m 10.244.2.47 k8s-node02 <none> <none> |
把Pod删除然后再次创建Pod
1 2 |
kubectl delete pods/nodeselector-pod kubectl apply -f nodeSelector-pod.yaml |
会发现该pod一直在等待中,找不到清单中配置标签的Node
1 2 |
kubectl get pods -o wide | grep nodeselect nodeselector-pod 0/1 Pending 0 55s <none> <none> <none> <none> |
事件:6个节点都不匹配 node selector
1 2 3 4 5 6 |
kubectl describe pods/nodeselector-pod | grep -A 10 Events Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling <unknown> default-scheduler 0/6 nodes are available: 6 node(s) didn't match node selector. Warning FailedScheduling <unknown> default-scheduler 0/6 nodes are available: 6 node(s) didn't match node selector. |