kubernets中的label(标签)

1.Label的作用

 Label不是kubernets中的一种资源对象,它是用于附加到各种资源对象上的标签,这些资源对象可以是:Node,Pod,Service,RC等。可以通过给指定的资源对象捆绑一个或多个不同的Label来实现多维度的资源分组管理功能,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作

2. Label的定义

 一个Label是一个key=value的键值对,key与value由用户自己指定。一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上。Label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。

3. 如何使用Label

 给某个资源对象定义一个Label,就相当于给它打了一个标签,随后可以通过**Label Selector(标签选择器)**查询和筛选拥有某些Label的资源对象。

3.1 LabelSelector在kubernets中的使用场景

  • kube-controller进程通过在资源对象RC上定义的Label Selector来筛选要监控的Pod副本数量,使Pod副本数量始终符合预期设定的全自动控制流程
  • kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立每个Service到对应Pod的请求转发路由表,从而实现Service的智能负载均衡机制。
  • 通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector这种标签调度策略,kube-scheduler进程可以实现Pod定向调度的特性

3.2 LabelSelector表达式

 Label Selector可以被类比为SQL语句中的where查询条件,例如,name=nginx,这个Label Selector作用于Pod时,可以被类比为select * from pod where pod’s name =‘nginx’这样的语句。当前有两种Label Selector表达式:基于等式的(Equality-based)和基于集合的(Set-based)。

  1. 采用等式类表达式匹配标签,下面是一些具体的例子:
  • name=redis-slave:匹配所有具有标签name=redis-slave的资源对象。
  • env!=production:匹配所有不具有标签env=production的资源对象,比如env=test就是满足此条件的标签之一
  1. 使用集合操作类表达式匹配标签,下面是一些具体的例子:
  • name in(redis-master, redis-slave):匹配所有具有标签name=redis-master或者name=redis-slave的资源对象
  • name not in(php-frontend):匹配所有不具有标签name=php-frontend的资源对象。
    可以通过多个Label Selector表达式的组合实现复杂的条件选择,多个表达式之间用“,”进行分隔即可,几个条件之间是“AND”的关系,即同时满足多个条件。

4. Label使用实例

  1. 对于Pod对象,Label被定义在其metadata中:
apiVersion: v1
kind: Pod
metadata: 
  name: myweb
  labels:
    app: myweb
  1. 其他管理对象如Deployment、StatefulSet、DaemonSet和Job则可以在Selector中定义标签,在template中关联pod:
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql 
spec:
  replicas: 1
  serviceName: mysql
  selector:
    matchLabels:
      app: mysql #符合目标的Pod拥有此标签
  template: #此模板创建pod的副本
    metadata:
      labels:
        app: mysql #pod副本拥有的标签,对应selector
  1. 管理Deployment、StatefulSet、DaemonSet和Service则通过Selector字段设置需要关联Pod的Label:
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
    ports:
    ......  
  1. matchLabels用于定义一组Label,与直接写在Selector中的作用相同;matchExpressions用于定义一组基于集合的筛选条件,可用的条件运算符包括In、NotIn、Exists和DoesNotExist。如果同时设置了matchLabels和matchExpressions,则两组条件为AND关系,即需要同时满足所有条件才能完成Selector的筛选。
selector:
  matchLabels:
    app: myweb
  matchExpressions:
    - {
    
    key: tier,operation: In,values:{
    
    frontend}}
    - {
    
    key: environment,operation: NotIn,values:{
    
    dev}}

猜你喜欢

转载自blog.csdn.net/Ethin_l/article/details/131732695
今日推荐