k8s之label

Label介绍

Label是k8s系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行分区和选择。

Label的特点:

  • 一个label会以KEY/VALUE键值对的形式附加到各种形象上,如Node、Pod、Service等
  • 一个资源对象可以定义任意数量的label,同一个label也可以被添加到任意数量的资源对象上去
  • label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除

可以通过label实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作

一些常用的label示例如下:

  • 版本标签:"version":"release","version":"stable"
  • 环境标签:"environment":"dev","environment":"test","environment":"pro"
  • 架构标签:"tier":"frontend","tier":"backend"

标签定义完毕之后,还要考虑到标签的选择,这就要使用到label selector,即:

  • label用于给某个资源对象定义标识
  • label selector用于查询和筛选拥有某些标签的资源对象

当前有两种label selector:

  • 基于等式的label selector:

name = slave:选择所有包含label中key="name"且value="slave"的对象

env != production:选择所有包括label中的key="env"且value不等于"production"的对象

  • 基于集合的label selector

name in (master, slave):选择所有包含label中key="name"且value="master"或"slave"的对象

name not in (frontend):选择所有包含label中的key="name"且value不等于"frontend"的对象

标签的选择条件可以使用多个,此时将多个label selector进行组合,使用逗号","进行分隔即可。例如

 name = slave,env != production

 name not in (frontend),env != production

命令方式

为pod资源打标签

[root@master ~]# kubectl create -f pod-nginx.yaml 
pod/nginx created
[root@master ~]# kubectl get pod -n dev
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          10s
#查看标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          42s   <none>
#添加标签
[root@master ~]# kubectl label pod nginx -n dev version=1.0
pod/nginx labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          2m23s   version=1.0

标签更新

更新version标签为2.0

[root@master ~]# kubectl label pod nginx -n dev version=2.0 --overwrite
pod/nginx labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          4m52s   version=2.0

筛选标签

修改pod-nginx.yaml中的name为nginx1并创建pod,修改version标签为1.0

[root@master ~]# vim pod-nginx.yaml 
[root@master ~]# kubectl create -f pod-nginx.yaml 
pod/nginx1 created
[root@master ~]# kubectl label pod nginx1 -n dev version=1.0
pod/nginx1 labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx    1/1     Running   0          7m58s   version=2.0
nginx1   1/1     Running   0          64s     version=1.0

使用标签选择器

[root@master ~]# kubectl get pod -l "version=2.0" -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          9m36s   version=2.0
[root@master ~]# kubectl get pod -l "version!=2.0" -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx1   1/1     Running   0          3m16s   version=1.0

删除标签

#格式:kubectl label pod nginx -n dev 标签名-
[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          13m     <none>
nginx1   1/1     Running   0          6m46s   version=1.0

通过配置方式进行更新

修改nginx-pod.yaml内容

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
  labels:
    version: "3.0"
    env: "test"
spec: 
  containers:
  - image: nginx:1.17.1
    imagePullPolicy: IfNotPresent
    name: pod
    ports: 
    - name: nginx-port
      containerPort: 80
      protocol: TCP

执行命令

[root@master ~]# vim pod-nginx.yaml 
[root@master ~]# kubectl apply -f pod-nginx.yaml 
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
pod/nginx configured
[root@master ~]# kubectl get pod -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE   LABELS
nginx    1/1     Running   0          21m   env=test,version=3.0
nginx1   1/1     Running   0          14m   version=1.0
posted @ 2021-07-02 17:51  路过的柚子厨  阅读(929)  评论(0编辑  收藏  举报