Label
label介绍
Label (标签)
Label是Kubernetes系统中另外一个核心概念。一个Label是一个key=value
的键值对,其中key与value由用户自己指定。Label可以附加到各种资源上,例如Node
Pod
Service
RC
等。 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去,Label通常在资源对象定义时确认,也可以在对象创建后动态添加或者删除
我们可以通过给指定的资源对象捆绑一个
或多个
不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等管理工作。
举例
当你在RC的yaml文件中定义了该RC的selector中的label为app:my-web
,那么这个RC就会去关注Pod-->metadata-->labeks
中label为app:my-web
的Pod。修改了对应Pod的Label,就会使Pod脱离RC的控制。同样,在RC运行正常的时候,若试图继续创建同样Label的Pod,是创建不出来的。因为RC认为副本数已经正常了,再多起的话会被RC删掉的。
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
Label 相当于我们熟悉的标签
,给某个资源对象定义一个Label,就相当于给它打了一个标签,随后可以通过Label Selector 标签选择器
查询和筛选有某些Label的资源对象。Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制。
Label Selector 两种表达式
label采用 等式类
一、基于等式的(Equality-based)
name = redis-slave: 匹配所有具有标签name=redis-slave的资源对象
env != production: 匹配所有不具有标签env=production的资源对象,比如env=test就是满足此条件的标签之一
二、基于集合的(Set-based)
name in (redis-master,redis-slave):匹配所有具有name=redis-master或者name=redis-slave的资源对象
name not in (php-fronted):匹配所有不具有标签name=php-fronted的资源对象
可以通过多个Label Selector
表达式的组合实现复杂的条件选择,多个表达式之间用",
"进行分隔即可,几个条件之间是"AND
"的关系,即同时满足多个条
name=redis-slave,env!=production
name notin (php-fronted),env!=production
label value语法
长度不超过63个字符。
可以为空
首位字符必须为字母数字字符
中间必须是横线、_、.、数字、字母。
Label定义yaml
Label常定义在matadate
中
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
>> app: new_nginx <<============
RC通过Label Selector
机制实现对Pod副本的自动控制。
RC和Service在spec中定义Selector与Pod进行关联
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
>> app: new_nginx<<=================
Deployment、Replica Set、DaemonSet和Job可以在Selector中使用基于集合的筛选条件定义
selector:
matchLabels:
app:new_nginx
matchExpressions:
- {key: tier, operator: In, values: [frontend]}
- {key: environment, operator: NotIn, values: [dev]}
mathchLabels
用于定义一组Label,与直接写在Selector中相同;
matchExpressions
用于定义一组基于集合的筛选条件,可以用的运算符包括:In
NotIn
Exists
和DoesNotExIST
提示:如果同时设置了matchLabels和matchExpressions,则两组条件为"AND" 关系,即所有条件需要同时满足时才能完成Selector的筛选
Lbael Selector 使用场景
Label Selector 在Kubernetes中的最重要的使用场景有以下几处
kube-controller进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本的数量,从而实现Pod 副本的数量始终符合设定的全自动控制流程
kube-proxy 进程通过Service的Label Selector 来选择对应的Pod,自动建立起每个Service到对应的Pod的请求转发路由表,从而实现Service的智能均衡特性。
通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector,这种标签调度策略,kube-scheduler进程可以实现Pod“定向调度”的特性