介绍
一个Label是一个key=value的键值对,其中key与value可由用户指定。Label可以被附加到各种资源对象上,例如Node、Pod、Service等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上。
通过给指定的资源对象捆绑一个或多个不同的Label来实现多维度的资源分组管理,以便灵活地进行资源分配、调度、配置、部署等管理工作。例如,部署不同版本的应用到不同的环境中;监控和分析应用(日志记录、监控、告警)等。
常用示例:
◎ 版本标签:”release”:”stable”、”release”:”canary”。
◎ 环境标签:”environment”:”dev”、”environment”:”qa”、”environment”:”production”。
◎ 架构标签:”tier”:”frontend”、”tier”:”backend”、”tier”:”middleware”。
◎ 分区标签:”partition”:”customerA”、”partition”:”customerB”。
◎ 质量管控标签:”track”:”daily”、”track”:”weekly”。
给某个资源对象定义一个Label,随后可通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象。
等式类(Equality-based)表达式匹配标签
name=redis-slave:匹配所有具有标签name=redis-slave的资源对象。
env!=production:匹配所有不具有标签env=production的资源对象。
集合操作类(Set-based)表达式匹配标签
name in(redis-master, redis-slave):匹配所有具有标签name=redis-master或者name=redis-slave的资源对象。
name not in(php-frontend):匹配所有不具有标签name=php-frontend的资源对象。
Label Selector在Kubernetes中的重要使用场景
- kube-controller进程通过在资源对象deployment上定义的Label Selector来筛选要监控的Pod副本数量,使Pod副本数量始终符合预期设定的全自动控制流程。
- kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立每个Service到对应Pod的请求转发路由表,实现SVC的负载均衡机制。
- 通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector标签调度策略,kube-scheduler进程可以实现Pod定向调度的特性。
操作
#对pod标签的操作
kubectl get pod -L env,tier #显示pod指定标签的值
kubectl get pod -l env,tier #显示符合键值的pod
kubectl label pod label-pod abc=123 #给名为label-pod的pod添加标签
kubectl label pod label-pod abc=456 —overwrite #修改名为label-pod的标签
kubectl label pod label-pod abc- #删除名为label-pod的标签
kubectl get pod —show-labels #查看pod且显示标签内容
#对node节点的标签操作
kubectl label nodes node01 disk=ssd #给节点node01添加disk标签
kubectl label nodes node01 disk=sss –overwrite #修改节点node01的标签
kubectl label nodes node01 disk- #删除节点node01的disk标签
