label(标签)
标签其实就一对 key/value,被关联到k8s对象上,比如pod/node等。标签可以用来划分特定组的对象,用户可通过标签来组织pod和所有其他Kubemetes对象。
selector(标签选择器)
通过label选择器,客户端/用户能方便辨识出一组对象,API目前支持两种选择器:基于相等的和基于集合的。一个label选择器一可以由多个必须条件组成,由逗号分隔。在多个必须条件指定的情况下,所有的条件都必须满足,因而逗号起着AND逻辑运算符的作用。
1.基于相等性或者不相等性的条件
environment=production //所有键等于 environment 值为 production 的资源
tier!=frontend //选择所有键为 tier 值不等于 frontend 的资源,和没有键为 tier 的label的资源。
2.基于set的条件
基于集合的label条件允许用一组值来过滤键。支持三种操作符: in , notin ,和 exists(仅针对于key符号) 。例如
environment in (production, qa)//选择所有键等于 environment ,且value等于 production 或者 qa 的资源
tier notin (frontend, backend)//选择所有键等于 tier 且值是除了 frontend 和 backend 之外的资源,和那些没有label的键是 tier 的资源
partition//选择所有所有有一个label的键为partition的资源;值是什么不会被检查
!partitio//选择所有的没有lable的键名为 partition 的资源;值是什么不会被检查
如何通过label组织pod
标签是可以附加到资源的任意键值对,用以选择具有该确切标签的资源(这是通过标签选择器完成的 )。 只要标签的key在资源内是唯一的, 一个资源便可以拥有多个标签。我们定义一些标签来组织pod.
- app,指定pod属于那个应用,组件或者服务。
-
rel, 它显示在pod中运行的应用程序版本。
file_a7822537ed7147b49f1fa96c53c1d197_blob.png
使用标签选择器列出pod
我们可以将pod与以下标签选择器进行匹配:
- creation_rnethod!=rnanual 选择带有creation_rnethod标签, 并且
值不等于manual的pod - env in (prod, devel)选择带有env标签且值为prod或devel的pod
- env notin (prod, devel)选择带有env标签, 但其值不是prod或
devel的pod
1 .在标签选择器中使用单个条件
selector:
app: pc
file_672f86cd9a77406c99fec8baceeeb630_blob.png
2 .在标签选择器中使用 多个条件
selector:
app: pc
rel: 20
file_2f12a216a5b84b23903695c7e2a0d905_blob.png
annotation(注解)
Annotation与Label类似,也使用key/value键值对的形式进行定义。Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(Metadata),并且用于Label Selector。Annotation则是用户任意定义的“附加”信息,可以包括标签不允许使用的字符。以便于外部工具进行查找,相比而言annotaion则可以包含更多的信息。大量使用注解可以为每个pod或其他API对象添加说明,以便每个使用该集群的人都可以快速查找有关每个单独对象的信息
- 以下是在Annotations中记录信息的一些例子:
1.构建、发布的镜像信息,如时间戳,发行ID,git分支,PR编号,镜像hashes和注Registry地址。
2.一些日志记录、监视、分析或audit repositories。
3.一些工具信息:例如,名称、版本和构建信息。
4.用户或工具/系统来源信息,例如来自其他生态系统组件对象的URL。
5.负责人电话/座机,或一些信息目录。
网友评论