您的位置:首页 > 运维架构 > Docker

用 label 控制 Pod 的位置 - 每天5分钟玩转 Docker 容器技术(128)

2018-02-12 05:39 686 查看
默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node。不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上。

Kubernetes 是通过 label 来实现这个功能的。

label 是 key-value 对,各种资源都可以设置 label,灵活添加各种自定义属性。比如执行如下命令标注 k8s-node1 是配置了 SSD 的节点。
kubectl label node k8s-node1 disktype=ssd


然后通过 
kubectl
get node --show-labels
 查看节点的 label。



disktype=ssd
 已经成功添加到
k8s-node1,除了 
disktype
,Node
还有几个 Kubernetes 自己维护的 label。

有了 
disktype
 这个自定义
label,接下来就可以指定将 Pod 部署到 k8s-node1。编辑 nginx.yml:



在 Pod 模板的 
spec
 里通过 
nodeSelector
 指定将此
Pod 部署到具有 label 
disktype=ssd
 的
Node 上。

部署 Deployment 并查看 Pod 的运行节点:



全部 6 个副本都运行在 k8s-node1 上,符合我们的预期。

要删除 label 
disktype
,执行如下命令:
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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐