Label是以key=value的键值对的形式设置,可以附加到各种资源对象。一个资源对象可以定义任意数量的Label,而同一个Label可以添加到任意数量的资源对象。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 Selector
在对资源对象定义标签之后,就可以通过标签选择器Label Selector查询和筛选拥有某些Label的资源对象。
Label Selector可以基于等式匹配标签
name=redis-slave
env!=production
也可以使用集合进行匹配
name in (redis-master,redis-slave)
name notin (php-frontend)
多个Label Selector表达式还可以通过组合实现复杂选择
name=redis-slave,env!=production
name notin (php-frontend),env!=production
kube-controller进程通过资源对象RC定义的Label Selector筛选需要监控的Pod副本的数量,从而实现Pod数量符合预期设定。
kube-proxy进程通过Service的Label Selector选择对应的Pod,自动建立起每个Service对应Pod的请求转发路由表,从而实现Service的负载均衡。
kube-scheduler进程通过在Pod定义文件使用的NodeSelector,实现Pod的定向调度。