Label是kubernetes中在资源上添加标识,用来对他们进行区分和选择
一个Label会以key/value键值对的形式附加到各种对象资源上
如Node、Pod、Service等等
一个资源对象可以定义任意数量的Label。
同一个Label也可以被添加到任意数量的资源对象上(service负载到后面的pod资源的区分)
Label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除
通过Label实现资源的多维度分组
以便灵活方便的进行资源分配、调度、配置、部署等管理工作
常用的Label示例如下:
> 版本标签:"version":"1.0"
> 环境标签:"environment":"dev","environment":"test","environment":"port"
> 架构标签:"tier":"frontend","tier":"backend"
标签定义完毕以后还要考虑标签的选择,这就要用到Label Selector
Label用于给某个资源对象定义标识
Label Selector用于查询和筛选拥有某些标签的资源对象
定义标签的方式
- 基于等式的定义方式
version=1.0 #等于
version!=1.0 #不等于
- 基于集合的定义方式
version in (1.0,2.0) #在这里
version noin (1.0,2.0) #不在这里
Label常用命令
#创建Pod并为Pod资源打标签
[root@master ~]# kubectl create -f pod_nginx.yml
pod/nginx created
#查看pod
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 12s
#查看pod标签:--show-labels(没有标签)
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 95s <none>
#为nginx的pod打version标签
[root@master ~]# kubectl label pod nginx -n dev version=1.0
pod/nginx labeled
#查看pod标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 6m2s version=1.0
#为nginx的pod打标签(一个资源对象可以定义任意数量的Label)
[root@master ~]# kubectl label pod nginx -n dev tier=frontend(架构标签,表示前端服务)
pod/nginx labeled
#查看pod标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 20m tier=frontend,version=1.0
#更新version标签:--overwrite(覆盖写)
[root@master ~]# kubectl get pod -n dev --show-labels
pod/nginx labeled
#查看pod标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 26m tier=frontend,version=2.0 #以更新标签
#基于等式的标签筛选(再创建一个nginx的pod并为其打标签进行筛选)
[root@master ~]# vim pod_nginx.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx2 #修改pod名称
namespace: dev
spec:
containers:
- image: nginx:1.17.1
name: pod
ports:
- name: nginx-port
containerPort: 8080 #修改端口
protocol: TCP
#创建pod
[root@master ~]# kubectl create -f pod_nginx.yml
pod/nginx2 created
#查看pod
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 45m
nginx2 1/1 Running 0 7m27s
#查看pod标签(nginx2默认没有标签)
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 45m tier=frontend,version=2.0
nginx2 1/1 Running 0 8m1s <none>
#为nginx2的pod打标签
[root@master ~]# kubectl label pod nginx2 -n dev version=1.0
pod/nginx2 labeled
#查看pod标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 48m tier=frontend,version=2.0
nginx2 1/1 Running 0 11m version=1.0
标签筛选
#根据标签选择器进行标签筛选:-l "标签"
[root@master ~]# kubectl get pod -l "version=1.0" -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx2 1/1 Running 0 12m version=1.0
#筛选不等于"version=1.0"的标签:"version!=1.0"
[root@master ~]# kubectl get pod -l "version!=1.0" -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 53m tier=frontend,version=2.0
#基于集合的标签筛选:in(筛选)
[root@master ~]# kubectl get pods -l "version in (1.0)" -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx2 1/1 Running 0 22m version=1.0
#基于集合的标签筛选:notin(不筛选)
[root@master ~]# kubectl get pods -l "version notin (1.0)" -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 60m tier=frontend,version=2.0
删除标签
#删除标签:标签名-
[root@master ~]# kubectl label pod nginx -n dev tier-
pod/nginx labeled
[root@master ~]# kubectl label pod nginx -n dev version-
pod/nginx labeled
#查看标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 64m <none>
nginx2 1/1 Running 0 26m version=1.0
配置文件形式更新标签
[root@master ~]# vim pod_nginx.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx1
namespace: dev
labels:
version: "3.0" #更新标签为3.0
env: "test" #添加新标签
spec:
containers:
- image: nginx:1.17.1
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
#执行文件(apply通过配置文件对资源进行配置)
[root@master ~]# kubectl apply -f pod_nginx.yml
#查看标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 110m <none>
nginx2 1/1 Running 0 72m env=test,version=3.0