学无止尽,不忘初心

学无止尽,不忘初心

一:什么是Label

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

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

示例如下: 

  • 版本标签:"release" : "stable" , "release" : "canary"...
  • 环境标签:"environment" : "dev" , "environment" : "production"
  • 架构标签:"tier" : "frontend" , "tier" : "backend" , "tier" : "middleware"
  • 分区标签:"partition" : "customerA" , "partition" : "customerB"...
  • 质量管控标签:"track" : "daily" , "track" : "weekly"
二:什么是Label selector(标签选择器)


Label selector是Kubernetes核心的分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象。

三:Label selector的查询条件

基于值相等的查询条件: 类似于SQL语句中的=或!=;  例如:select * from pod where name=(或!=)'redis-slave';

基于子集的查询条件: 类似于SQL语句中的in或 not in; 例如:select * from pod where name in(或not in) ('redis-slave','redis-master');

两种查询条件也可以组合在一起使用。

新出现的管理对象如Deploment、ReplicaSet、DaemonSet和Job则可以在Selector中使用基于集合的筛选条件定义,例如:

selector:
  matchLabels:
    app: myweb
  matchExpressions:
    - {key: tier, operator: In, values: [frontend]}
    - {key: environment, operator: NorIn, values: [dev]}

matchLabels用于定义一组Label,与直接写在Selector中作用相同:matchExpression用于定义一组基于集合的筛选条件,可用的条件运算符包括:In、NotIn、Exists和DoesNotExist。

如果同时设置了matchLabels和matchExpression,则两组条件为“AND”关系,即所有条件需要满足才能完成Selector的筛选。


四:Label selector的使用场景

1.kube-controller进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本的数量,从而实现Pod副本的数量始终符合预期设定的全自动控制流程

2.kupe-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立器每个Service到对应Pod的请求转发路由表,从而实现Service的智能负载均衡机制

3.通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector这种标签调度策略,Kube-scheduler进程可以实现Pod定向调度的特性

在前面的留言板例子中,我们只使用了一个name=XXXLabel Selector。让我们看一个更复杂的例子。假设为Pod定义了Label: release、env和role,不同的Pod定义了不同的Label值,如图1.7所示,如果我们设置了“role=frontend”的Label Selector,则会选取到Node 1和Node 2上到Pod。

kubernetes进阶之四:Label和Label Selector-LMLPHP

而设置“release=beta”的Label Selector,则会选取到Node 2和Node 3上的Pod,如图所示。

总结:使用Label可以給对象创建多组标签,Label和Label Selector共同构成了Kubernetes系统中最核心的应用模型,使得被管理对象能够被精细地分组管理,同时实现了整个集群的高可用性。

kubernetes进阶之四:Label和Label Selector-LMLPHP



总结:使用Label可以给对象创建多组标签,Label 和 Label Selector共同构成了Kubernetes系统中最核心的应用模型,
使得被管理对象能够被精细地分组管理,同时实现了整个集群的高可用性.

 
02-20 17:01