kubernetes:Labels and Selectors

什么是Lable

标签是附加到对象(如pod)的键/值对。标签用于指定对象的标识属性,这些属性对用户有意义且相关,但不直接向核心系统暗示语义。标签可用于组织和选择对象的子集。标签可以在创建时附加到对象,然后可以随时添加和修改。每个对象都可以定义一组键/值标签。对于给定的对象,每个键必须是唯一的

"metadata": {
  "labels": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

Kubernetes最终将对labels最终索引和反向索引用来优化查询和watch,在UI和命令行中会对它们排序。不要在label中使用大型、非标识的结构化数据,记录这样的数据应该用annotation

Lable出现的原因
Label能够将组织架构映射到系统架构上(就像是康威定律),这样能够更便于微服务的管理,可以给object打上如下类型的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”

语法和字符集

abel是键/值对。有效的标签键有两个段:可选的前缀和名称,用斜线(/)分隔。名称段是必需的,必须不超过63个字符,以字母数字字符([A-Z0-9A-Z])开头和结尾,中间有破折号(-)、下划线(u)、点(.)和字母数字。前缀是可选的。如果指定,前缀必须是DNS子域:由点(.)分隔的一系列DNS标签,总共不超过253个字符,后跟斜杠(/)。

如果省略前缀,则标签密钥被假定为用户专用。向最终用户对象添加标签的自动化系统组件(例如kube调度器、kube控制器管理器、kube apiserver、kubectl或其他第三方自动化)必须指定前缀。

kubernetes.io/和k8s.io/前缀是为kubernetes核心组件保留的。

有效的标签值必须不超过63个字符,并且必须为空,或者以字母数字字符([A-Z0-9A-Z])开头和结尾,中间带有破折号(-)、下划线(u)、点(.)和字母数字。
举例

apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    environment: production
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
    

Label selector
Label不是唯一的,很多object可能有相同的label。
通过label selector,客户端/用户可以指定一个object集合,通过label selector对object的集合进行操作。
Label selector有两种类型:

equality-based :可以使用=、==、!=操作符,可以使用逗号分隔多个表达式
set-based :可以使用in、notin、!操作符,另外还可以没有操作符,直接写出某个label的key,表示过滤有某个key的object而不管该key的value是何值,!表示没有该label的object

使用

kubectl get pods -l environment=production,tier=frontend
kubectl get pods -l 'environment in (production, qa)'

API使用 label selector

1.在service、replicationcontroller等object中有对pod的label selector,使用方法只能使用等于操作,例如:

selector:
    component: redis
  1. Job, Deployment, Replica Set, Daemon Set 类型支持set-based 操作
selector:
  matchLabels:
    component: redis
  matchExpressions:
    - {key: tier, operator: In, values: [cache]}
    - {key: environment, operator: NotIn, values: [dev]}

matchlabels是{key,value}对的映射。matchlabels映射中的单个{key,value}等价于matchexpressions的元素,其键字段为“key”,运算符为“in”,值数组仅包含“value”。matchexpressions是pod选择器需求的列表。有效的运算符包括in、notin、exists和doesnotexist。对于in和notin,设置的值必须为非空。matchlabels和matchexpressions中的所有要求都被放在一起-必须满足所有这些要求才能匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值