1 标签
1.1 为什么要有标签?
在微服务架构中,部署的微服务数量很容器达到几十个,这些组件可能是副本(部署同一组件的多个副本)和多个不同的发布版本(stable、beta、canary等)同时运行。导致K8S系统中会出现多个pod,如果没有机制去组织这些组件,极容易产生混乱。需要一种能够基于任意标准将上述pod组织成更小群体的方式,这个时候就产生了标签,标签可以组织pod和其他K8S对象。
1.2 标签介绍
标签是一种简单却功能强大的K8S特性,可以附加到K8S资源的任意键值对,可以通过标签选择器筛选出需要寻找的确切标签的资源。在资源内标签的key需唯一,一个资源可拥有多个标签。
K8S中的任意API对象都是通过Label进行标识、实质是一系列key/value键值对,其中key与value由用户自己指定。
金丝雀发布:在部署新版本时,先只让一小部分用户体验新版本以观察新版本的表现,然后再向所有用户进行推广,这样可防止暴露有问题的版本给过多的用户。
1.3 标签命令
列出pods的标签$ kubectl get po --show-labels
查看具体标签$ kubectl get po -L label_key1, label_key2
添加标签$ kubectl label po po_name label_key=label_value
其中,po_name表示pod名,label_key表示标签的名称,label_value表示标签的值。
修改标签$ kubectl label po po_name label_key=label_new_value --overwrite
其中,po_name表示pod名,label_key表示标签的名称,label_new_value表示标签的新值。
2 标签选择器
2.1 标签选择器介绍
标签选择器允许选择标记有特定标签的pod子集,并且对这些pod进行操作,它是一种能够根据是否包含某个特定值的特定标签过滤资源。
2.2 标签选择器过滤条件
1)包含或不包含使用特定键的标签;
2)包含具有特定键和值的标签;
3)包含具有特定键的标签,但其值与指定的不同;
2.3 标签选择器的使用
使用标签选择器查看某键值的标签的pod$ kubectl get po -l label_key=label_value
列出所有包含某标签的pod$ kubectl get po -l label_key
列出所有没有某标签的pod$ kubectl get po -l '!label_key'
2.4 标签选择器约束pod调度
大部分创建的pod都是随机调度到工作节点上,在某些特殊情况下,如果需要将pod调度到指定类型的节点上,如硬件基础设施不是同质,某些工作节点需要使用机械硬盘,某些节点使用固态硬盘,此时需要通过节点标签和节点标签选择器完成。
如需要将pod调度到GPU计算的节点上。
给节点添加标签$ kubectl label node node_name gpu=true
将pod调度到特定节点
spec.nodeSelector.gpu=true,届时创建pod后,K8S会通过标签和标签选择器从只包含gpu=true的节点上选择并调度。
3 注解
3.1 注解简介
注解是键值对,类似于标签,主要作用是保存标识信息,不可以用于对对象分组。与标签相比而言,注解包含数据更多一些,总共不超过256KB。
3.2 注解命令
添加注解$ kubectl annotate pod pod_name annotate_key="annotate_value"
其中,pod_name为pod名称,annotate_key为注解键,annotate_value为注解值;
查看注解$ kubectl describe pod pod_name
查看Annotations字段值
来源:https://www.cnblogs.com/Andya/p/12508601.html