前面的文章中介绍过Kubernetes下标签的基本概念和使用方法,标签不但可以配置在YAML文件中在初始的状态生成,还可以动态的进行管理,这篇文章继续介绍如何使用kubectl label命令对标签进行管理。
使用标签
在Kubernetes中,可以对所有的资源进行标签的设定,同一个资源可以设定不同的标签,不同的资源也可以设定为相同标签,由于标签是键值对的数据形式,键是不能重复的。
环境准备
本文使用Kubernetes 1.17.2,可参看下文进行快速环境搭建:
[root@host131 ansible]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
192.168.163.131 Ready <none> 71s v1.17.2 192.168.163.131 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://19.3.5
[root@host131 ansible]#
示例准备
- YAML文件示例
[root@host131 Pod]# cat single-pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: single-pod
spec:
containers:
- name: blue-busybox-container
image: busybox:1.31.1
command: ["sleep"]
args: ["1000"]
...
[root@host131 Pod]#
- 创建Pod
[root@host131 Pod]# kubectl create -f single-pod.yaml
pod/single-pod created
[root@host131 Pod]#
[root@host131 Pod]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
single-pod 1/1 Running 0 6s 10.254.176.3 192.168.163.131 <none> <none>
[root@host131 Pod]#
- 查看标签
[root@host131 Pod]# kubectl describe pods single-pod |grep '^Labels'
Labels: <none>
[root@host131 Pod]#
标签操作:添加标签
上述刚刚创建的Pod是没有Label设定的,给上述Pod添加app=testbox的标签
[root@host131 Pod]# kubectl label pod single-pod app=testbox
pod/single-pod labeled
[root@host131 Pod]#
标签操作:查询标签
可以使用describe结合grep确认标签
[root@host131 Pod]# kubectl describe pods single-pod |grep '^Labels'
Labels: app=testbox
[root@host131 Pod]#
也可以直接在get pod命令后添加show-labels选项
[root@host131 Pod]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
single-pod 1/1 Running 0 65s app=testbox
[root@host131 Pod]#
标签操作:修改标签
label命令缺省有个overwrite选项,设定值为false,当指定其值为true时就可以进行修改标签,否则则会提示如下错误信息
[root@host131 Pod]# kubectl describe pods single-pod |grep '^Labels'
Labels: app=testbox
[root@host131 Pod]#
[root@host131 Pod]# kubectl label pod single-pod app=single-pod
error: 'app' already has a value (testbox), and --overwrite is false
[root@host131 Pod]#
设定overwrite为true,即可进行修改
[root@host131 Pod]# kubectl label pod single-pod app=single-pod --overwrite
pod/single-pod labeled
[root@host131 Pod]#
确认修改信息
[root@host131 Pod]# kubectl describe pods single-pod |grep '^Labels'
Labels: app=single-pod
[root@host131 Pod]#
[root@host131 Pod]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
single-pod 1/1 Running 0 114s app=single-pod
[root@host131 Pod]#
标签操作:添加多个标签
可以在上述标签基础之上,给此Pod再添加一个标签,同一资源可以有多个标签
[root@host131 Pod]# kubectl label pod single-pod environment=dev
pod/single-pod labeled
[root@host131 Pod]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
single-pod 1/1 Running 0 2m15s app=single-pod,environment=dev
[root@host131 Pod]#
标签操作:删除标签
[root@host131 Pod]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
single-pod 1/1 Running 0 2m15s app=single-pod,environment=dev
[root@host131 Pod]#
在标签后添加-,即可删除此标签,可参看如下执行示例
[root@host131 Pod]# kubectl label pod single-pod app-
pod/single-pod labeled
[root@host131 Pod]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
single-pod 1/1 Running 0 2m27s environment=dev
[root@host131 Pod]# kubectl label pod single-pod environment-
pod/single-pod labeled
[root@host131 Pod]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
single-pod 1/1 Running 0 2m37s <none>
[root@host131 Pod]# kubectl describe pods single-pod |grep '^Labels'
Labels: <none>
[root@host131 Pod]#