3.3 使用标签组织pod
此时我们的集群中只有两个正在运行的pod。但部署实际应用程序时,大多数用户最终将运行更多的pod。随着pod数量的增加,将它们分类到子集的需求也就变得越来越明显了。
例如,对于微服务架构,部署的微服务数量可以轻松超过20个甚至更多。这些组件可能是副本(部署同一组件的多个副本)和多个不同的发布版本(stable、beta、canary等)同时运行。这样一来可能会导致我们在系统中拥有数百个pod,如果没有可以有效组织这些组件的机制,将会导致产生巨大的混乱,
很明显,我们需要一种能够基于任意标准将上述pod组织成更小群体的方式,这样一来处理系统的每个开发人员和系统管理员都可以轻松地看到哪个pod是什么。此外,我们希望通过一次操作对属于某个组的所有pod进行操作,而不必单独为每个pod执行操作。
通过标签来组织pod和所有其他Kubernetes对象。
3.3.1 介绍标签
标签是一种简单却功能强大的Kubernetes特性,不仅可以组织pod,也可以组织所有其他的Kubernetes资源。详细来讲,标签是可以附加到资源的任意键值对,用以选择具有该确切标签的资源(这是通过标签选择器完成的)。只要标签的key在资源内是唯一的,一个资源便可以拥有多个标签。通常在我们创建资源时就会将标签附加到资源上,但之后我们也可以再添加其他标签,或者修改现有标签的值,而无须重新创建资源。
接下来回到图3.6中的微服务示例。通过给这些pod添加标签,可以得到一个更组织化的系统,以便我们理解。此时每个pod都标有两个标签:
- app,它指定pod属于哪个应用、组件或微服务。
- rel,它显示在pod中运行的应用程序版本是stable、beta还是canary。
定义 金丝雀发布是指在部署新版本时,先只让一小部分用户体验新版本以观察新版本的表现,然后再向所有用户进行推广,这样可以防止暴露有问题的版本给过多的用户。
通过添加这两个标签基本上可以将pod组织为两个维度(基于应用的横向维度和基于版本的纵向维度)。
每个可以访问集群的开发或运维人员都可以通过查看pod标签轻松看到系统的结构,以及每个pod的角色。
3.3.2 创建pod时指定标签
现在,可以通过创建一个带有两个标签的新pod来查看标签的实际应用。使用以下代码清单中的内容创建一个名为kubia-with-labels.yaml的新文件。
带标签的pod: kubia-with-labels.yaml
apiVersion: v1
kind: Pod
metadata:
name: kubia-label
labels:
env: prod
creation_method: manual
spec:
containers:
- name: kubia-label
image: luksa/kubia:1.0
ports:
- containerPort: 8080
$ kubectl create -f kubia-with-labels.yaml
kubectl get pods命令默认不会列出任何标签,但我们可以使用--showlabels选项来查看:
$ kubectl get po --show-labels
如果你只对某些标签感兴趣,可以使用-L选项指定它们并将它们分别显示在自己的列中,而不是列出所有标签。接下来我们再次列出所有pod,并将附加到pod kubia-v2上的两个标签的列展示如下:
$ kubectl get po -L creation_method
NAME READY STATUS RESTARTS AGE CREATION_METHOD
kubia 1/1 Running 0 34m
kubia-label 1/1 Running 0 3m4s manual
3.3.3 修改现有pod的标签
标签也可以在现有pod上进行添加和修改。由于pod kubia也是手动创建的,所以为其添加 creation_method=manual
标签:
$ kubectl label po kubia creation_method=manual
现在,将kubia-manual-v2 pod上的env=prod标签更改为env=debug,以演示现有标签也可以被更改。
注意 在更改现有标签时,需要使用 --overwrite
选项。
$ kubectl label po kubia env=debug --overwrite
再次列出pod以查看更新后的标签:
$ kubectl get po -L creation_method
$ kubectl get pods -l creation_method=manual --show-labels
正如我们所看到,目前将标签附加到资源上看起来并没有什么价值,在现有资源上更改标签也是如此。但在下一章中我们将证实,这会是一项令人难以置信的强大功能。而首先我们需要看看这些标签除了在列出pod时用以简单显示外,还可以用来做什么。
网友评论