本文主要是介绍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-demolabels:environment: productionapp: nginx
spec:containers:- name: nginximage: nginx:1.7.9ports:- 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
- Job, Deployment, Replica Set, Daemon Set 类型支持set-based 操作
selector:matchLabels:component: redismatchExpressions:- {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中的所有要求都被放在一起-必须满足所有这些要求才能匹配
这篇关于kubernetes:Labels and Selectors的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!