Label是一个key/value的键值对,可以附加到各种资源对象上。

一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。

通常是在资源对象定义时确定Label,也支持在对象创建后动态添加或删除。

Label和Lable Selector构成了k8s系统中最核心的一个应用模型,可以对被管理对象进行精细分组,以实现整个集群的高可用。

通过给指定的资源对象捆绑一个或多个不同的Label来实现多维度的资源分组管理。一些示例标签如下:

"release" : "stable", "release" : "canary"

"environment" : "dev","environment" : "qa","environment" : "production"

"tier" : "frontend","tier" : "backend","tier" : "cache"

"partition" : "customerA", "partition" : "customerB"

"track" : "daily", "track" : "weekly"

Label Selector可以查询和筛选拥有某些Label的资源对象。

目前支持两种选择器:equality-based(基于平等)和set-based(基于集合)的。前者采用等式的表达式,后者采用集合操作的表达式匹配标签。

标签选择器可以由逗号分隔的多个requirements 组成。在多重需求的情况下,必须满足所有要求,因此逗号分隔符作为AND逻辑运算符。

(1)equality-based示例:

name = redis-slave

env != production

(2)set-based示例:

name in (redis-master, redis-slave)

name not in (frontend)

(3)Label Selector set-based筛选功能仅在以下新出现的管理对象中得到了支持:

Deployment

ReplicaSet

DaemonSet

Job

Label Selector的几个重要使用场景:

kube-controller进程,通过资源对象RC上定义的Label Selector来筛选要监控和管理的Pod副本的数量。

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

kube-scheduler进程,通过为某些Node定义特定的Label,然后在Pod定义文件中使用NodeSelector进行筛选,进而实现Pod的定向调度功能。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐