热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:深入玩转K8S之利用Label控制Pod位置

篇首语:本文由编程笔记#小编为大家整理,主要介绍了深入玩转K8S之利用Label控制Pod位置相关的知识,希望对你有一定的参考价值。首先介绍下什么是Label?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了深入玩转K8S之利用Label控制Pod位置相关的知识,希望对你有一定的参考价值。


首先介绍下什么是Label?

Label是Kubernetes系列中一个核心概念。是一组绑定到K8s资源对象上的key/value对。同一个对象的labels属性的key必须唯一。label可以附加到各种资源对象上,如Node,Pod,Service,RC等。

通过给指定的资源对象捆绑一个或多个不用的label来实现多维度的资源分组管理功能,以便于灵活,方便地进行资源分配,调度,配置,部署等管理工作。

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

下面我们来实际的操作下,比如执行如下命令标注 k8s-node1 是配置了 SSD的节点。

 

kubectl label node k8s-node1 disktype=ssd


 

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


技术图片

可以看到disktype=ssd 已经成功添加到 k8snode1,除了 disktype,Node 还有几个 Kubernetes 自己维护的 label。有了 disktype 这个自定义 label,接下来就可以指定将 Pod 部署到 k8snod1。比如我编辑nginx.yml,增加nodeSelector标签,指定将此Pod部署到具有ssd属性的Node上去。

技术图片

最后通过kubectl get pod -o wide。

 

如果要删除 label disktype,就执行如下命令删除即可:

     

kubectl label node k8s-node1 disktype-

 

但是要注意已经部署的 Pod 并不会重新部署,依然在 k8snode1 上运行。可能会有人说了,那怎么让Pod变回原样呢也就是分配到多个node上,那就需要一个笨方法了(至少在目前我学习的方法里面只会这样操作),就是在刚才编辑的那个nginx.yml文件里面删除nodeSelector标签,然后在利用kubectl apply重新部署,Kubernetes 会删除之前的 Pod 并调度和运行新的 Pod。

技术图片

 

好了本次的Label标签的实践讨论到此结束,本文参考了Kubernetes 官网和Cloud Man博文。

 

实例操作:


给其中一个节点添加label
[root@test-master03 ~]# kubectl label node cn-hangzhou.192.168.7.201 disktype=ssd
node/cn-hangzhou.192.168.7.201 labeled
显示 其中一个pod 运行的节点
[root@test-master03 ~]# kubectl get pod -n xitu-qa02 -o wide|grep nginx-test02
h5-xitu-nginx-test02-8489f56656-z82tq 1/1 Running 0 103s 172.20.3.81 cn-hangzhou.192.168.7.222
显示label情况
[root@test-master03 ~]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
cn-hangzhou.192.168.7.179 Ready master 124d v1.12.6-aliyun.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecs.c5.xlarge,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=cn-hangzhou,failure-domain.beta.kubernetes.io/zOne=cn-hangzhou-h,kubernetes.io/hostname=cn-hangzhou.192.168.7.179,node-role.kubernetes.io/master=
cn-hangzhou.192.168.7.180 Ready master 124d v1.12.6-aliyun.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecs.c5.xlarge,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=cn-hangzhou,failure-domain.beta.kubernetes.io/zOne=cn-hangzhou-h,kubernetes.io/hostname=cn-hangzhou.192.168.7.180,node-role.kubernetes.io/master=
cn-hangzhou.192.168.7.181 Ready master 124d v1.12.6-aliyun.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecs.c5.xlarge,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=cn-hangzhou,failure-domain.beta.kubernetes.io/zOne=cn-hangzhou-h,kubernetes.io/hostname=cn-hangzhou.192.168.7.181,node-role.kubernetes.io/master=
cn-hangzhou.192.168.7.182 Ready 124d v1.12.6-aliyun.1 app=nginx-dev,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecs.g5.xlarge,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=cn-hangzhou,failure-domain.beta.kubernetes.io/zOne=cn-hangzhou-h,kubernetes.io/hostname=cn-hangzhou.192.168.7.182
cn-hangzhou.192.168.7.190 Ready 108d v1.12.6-aliyun.1 app=nginx-test,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecs.g5.2xlarge,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=cn-hangzhou,failure-domain.beta.kubernetes.io/zOne=cn-hangzhou-h,kubernetes.io/hostname=cn-hangzhou.192.168.7.190
cn-hangzhou.192.168.7.201 Ready 73d v1.12.6-aliyun.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecs.g5.3xlarge,beta.kubernetes.io/os=linux,disktype=ssd,failure-domain.beta.kubernetes.io/region=cn-hangzhou,failure-domain.beta.kubernetes.io/zOne=cn-hangzhou-h,kubernetes.io/hostname=cn-hangzhou.192.168.7.201
cn-hangzhou.192.168.7.222 Ready 19d v1.12.6-aliyun.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecs.c6.4xlarge,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=cn-hangzhou,failure-domain.beta.kubernetes.io/zOne=cn-hangzhou-h,kubernetes.io/hostname=cn-hangzhou.192.168.7.222
修改应用的yaml文件增加 nodeselector 配置
spec:
containers:
- image: ‘nginx:1.15.10-alpine‘
imagePullPolicy: Always
name: h5-xitu-nginx-test02
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: regsecret
nodeSelector:
disktype: ssd
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
重新启动应用后查看pod 运行的节点情况
kubectl get pod -n xitu-qa02 -o wide|grep nginx-test02
h5-xitu-nginx-test02-687f7c4768-txhfr 1/1 Running 0 26s 172.20.2.160 cn-hangzhou.192.168.7.201

  


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • PatchODAX8: ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • CISCO ASA防火墙Failover+multiple context详细部署By 年糕泰迪[操作系统入门]
    一.文章概述本文主要就CISCOASA防火墙的高可用和扩张性进行阐述和部署。再cisco防火墙系列中主要有3种技术来实现高可用和扩张性。分别是Failover,multiplese ... [详细]
  • LVS-DR直接路由实现负载均衡示例
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 【云计算】Dockerfile、镜像、容器快速入门 ... [详细]
  • k8snamespace配置cpu最大和最小限额
    世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。问:如何为namespace配置最大和最小限额&#x ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • zookeeper集群查看状态时报错Error contacting service. It is
    最近在搭建mq集群时候需要用到,zookeeper,可是启动的时候显示成功了,查看状态的时候却报错了:碰到这个问题也是研究好好半天才解决,这里就总结出 ... [详细]
  • Java程序员必会的40个Linux命令!
    你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起 ... [详细]
author-avatar
天佑忍者忍着
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有