Kubernetes-标签和注解(五)

1 标签

1.1 为什么要有标签?

  在微服务架构中,部署的微服务数量很容器达到几十个,这些组件可能是副本(部署同一组件的多个副本)和多个不同的发布版本(stable、beta、canary等)同时运行。导致K8S系统中会出现多个pod,如果没有机制去组织这些组件,极容易产生混乱。需要一c V h @种能够基于任意标准将上述pod组织成更小群体的方式,这个时候就产生了标签,标签可以组织pod和其他K8S对象。

1.2 标签介绍

  标签是一种简单却功能强大的K8S特性,可以附加到K8S资源的任意键值对,可以通过标签选择器筛选出需要寻找的确切标签的资源。在资源内标签的key需唯一,一个资源可拥有多个标签。
  K8S中的任意API对象都是通过Label进行标识、实A R p O N =质是一系列key/value键值对,6 } e Q # ) o ? h其中key与value由用户自己指定。

金丝雀发布:在部署新版本时,先只让一小部分用户体验新版本以观察新版本的表现,x & V z t ~ 0然后再向所有用` ( ^ R ] 0 N A 0户进行推广,这样可防止暴露有问题的版本给过多的用户。

1.3 标签命令

列出p( ( T ! .ods的标签
$ kubectl get po --show-labels
查看具体标签
$ kubectl get po -L labee b T - 1 v Xl_key1, label_key2
添加标签
$ kubectl label po po_name label_kM Q Qey=label_value
其中,po_name表示pod名,label_key表示标签的名称,label_value表示标签的值。
修改标签
$ kubectl label po po_name label_key=label_new_value --overwrite
其中,po_name表示pod名,0 7 T 2label_k] V W ] q w gey表示- 3 `标签的名称,lat 2 Dbel_new_value表示标签的新值。

2 标签选择器

2.1 标签选择器介绍

  标签选择器允许选择标记有特定标签的pod子集,并且对这些podB L { - s进行操作,它是一种能够根据是否包含某个特定值的特定标签过滤资源。

2.2 标签选择器过滤条件

1)包含或不包含使用特定键的标签;
2)包含具有特定键和值的标签;
3)包含具有特定键的标签,但其值与指定的不同;

2.3 标签选择器的1 , M Y [ I使用

使用标签选择器查看某键值的标签的pod
$ kubectl get po -l label_T g 4 U =key=label_value
列出所有包含某标签的pod
$ kubectl get po -l label_key
列出所有没有某标签的pod
$ kubectl get po -l '!label_key'

2.4 标签选择器约束pod调度

  大部分创建的pod都是随机调度到工作节点上,在某些特殊情9 [ F ; M U c况下,如果需要将pod调度到指定类型的节点上,如硬件基础设施不是同b L 8质,某些工作节点需要使用机械硬盘,某些节点使用固态硬盘,此时需要通过节点标签和节点标签选择器完成。
  如需要将pod调度到GPU计算的节点上。
给节点添加标签
$ kubectl label node nodv _ k p 5 _e_name gpu=true
将pod调度到特定节点
spec.nodeSelector.gpu=true,届( l t = P { | C @时创建podu ; ) ^ v 0 S h ^后,Km e 68S会通过标签和标签选择器从只包含gpu=true的节点上选择 N 7 ; L 8 T并调度。

3 注解

3.1 注* f 1 K 7 4解简介

  注解是键值对,类似于标签,主要作用是保存标识信息,不可以用于对对象分组。与标签相比而言,注解包含数据更多一些,总共不超过256KB。

3.2 注解命令

添加注解
$ kubectl annotate pod pod_name annotate_key="annotate_value"
其中,pod_* 1 Z t Hn { Dame为pod名称,annotate_keya ) + ] *注解键,annotate_value为注解值;
查看注解
$ kubectl describe pod pod_namem E j , 5 D 3
查看Annotations字段值