kubernetes五大资源之Label

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

猜你喜欢

转载自blog.csdn.net/m0_72264240/article/details/130860004