默认配置下,Scheduler 会将 Pod 调度到全部可用的 Node。不过有些状况咱们但愿将 Pod 部署到指定的 Node,好比将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 须要 GPU,须要运行在配置了 GPU 的节点上。html
Kubernetes 是经过 label 来实现这个功能的。node
label 是 key-value 对,各类资源均可以设置 label,灵活添加各类自定义属性。好比执行以下命令标注 k8s-node1 是配置了 SSD 的节点。nginx
kubectl label node k8s-node1 disktype=ssd
而后经过 kubectl get node --show-labels
查看节点的 label。app
disktype=ssd
已经成功添加到 k8s-node1,除了 disktype
,Node 还有几个 Kubernetes 本身维护的 label。学习
有了 disktype
这个自定义 label,接下来就能够指定将 Pod 部署到 k8s-node1。编辑 nginx.yml:code
在 Pod 模板的 spec
里经过 nodeSelector
指定将此 Pod 部署到具备 label disktype=ssd
的 Node 上。htm
部署 Deployment 并查看 Pod 的运行节点:资源
所有 6 个副本都运行在 k8s-node1 上,符合咱们的预期。部署
要删除 label disktype
,执行以下命令:get
kubectl label node k8s-node1 disktype-
- 即删除。
不过此时 Pod 并不会从新部署,依然在 k8s-node1 上运行。
除非在 nginx.yml 中删除 nodeSelector
设置,而后经过 kubectl apply
从新部署。
Kubernetes 会删除以前的 Pod 并调度和运行新的 Pod。
Deployment 相关操做就讨论到这里,下一节咱们学习 DaemonSet。
书籍:
1.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
2.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html