默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node。不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上。
Kubernetes是通过label来实现这个功能的,同之前的docker swarm集群的label是一样的,通过对节点进行label的设置,将Pod运行的指定的label节点上。
label是key-value对,各种资源都可以设置label,灵活添加各种自定义属性。
贴签示例
将node2节点的label设置为disktype=ssd
添加标签
1 2
| [root@pool1 yaml] node/pool2 labeled
|
1 2 3 4 5
| [root@pool1 yaml] NAME STATUS ROLES AGE VERSION LABELS node Ready control-plane,master 21d v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers= pool2 Ready <none> 21d v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,'disktype=ssd',kubernetes.io/arch=amd64,kubernetes.io/hostname=pool2,kubernetes.io/os=linux pool3 Ready <none> 21d v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=pool3,kubernetes.io/os=linux
|
运行Pod到指定标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| [root@node1 ~] apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 3 template: metadata: label: app: nginx spec: containers: - name: nginx image: nginx:1.8 ports: - containerPort: 80 nodeSelector: disktype: ssd [root@node1 ~]
root@pool1 yaml] NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mysql-deploy-69c6869d65-sbzhl 1/1 Running 0 53m 240.185.2.77 pool2 nginx-deploy-849865cbbb-fkqmn 1/1 Running 0 47h 240.185.1.58 pool2 nginx-deploy-849865cbbb-pvnh7 1/1 Running 0 47h 240.185.1.59 pool2
|
删除标签