k8s通过label来控制pod的位置

Posted benjamin77

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s通过label来控制pod的位置相关的知识,希望对你有一定的参考价值。

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

kubernetes通过label来实现这个功能

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

首先我们给k8s-node1节点打上一个ssd的标签

kubectl label node k8s-node1 disktype=ssd

通过 kubectl get node --show-labels

技术分享图片

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

 

有了自定义的disktype=ssd 这个标签,只需要在配置文件中定义 nodeselector 为这个自定义标签,就可以指定pod在k8s-node1中运行

技术分享图片

 

 

部署deployment验证

 技术分享图片

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

 

 

要删除 label disktype,执行如下命令:

kubectl label node k8s-node1 disktype-

 node/k8s-node1 labeled

不过删除标签 并不会重新部署,所以pod依旧是在k8s-node1上。

技术分享图片

要想让k8s-node2也参与到工作负载,则必须删掉当前的deployment,并删除或注释掉配置文件中的 nodeSelector配置。

技术分享图片

技术分享图片

 

 我们看到之前的pod会被全部删除掉,并重新调度到不同的k8s节点上。

 

以上是关于k8s通过label来控制pod的位置的主要内容,如果未能解决你的问题,请参考以下文章

深入玩转K8S之利用Label控制Pod位置

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

k8s的pod

linux12k8s --> 04命令行优化Pod介绍label标签控制器

控制pod在节点位置与其他类型的pod

k8d创建资源(负载均衡原理,回滚指定版本,label控制pod的位置)