[toc]

一、概述

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

Label的特点:

  1. 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等。
  2. 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。
  3. Label通常在资源对象定义时确定,当然也可以在对象创建后动态的添加或删除。
  4. 可以通过Label实现资源的多纬度分组,以便灵活、方便地进行资源分配、调度、配置和部署等管理工作。

一些常用的Label标签示例如下:

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

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

  1. Label用于给某个资源对象定义标识。
  2. Label Selector用于查询和筛选拥有某些标签的资源对象。
  3. 联合匹配

当前有两种Label Selector和多条件匹配:

  1. 基于等式的Label Selector。
    1.1 name=slave:选择所有包含Label中的key=“name”并且value=“slave”的对象。
    1.2 env!=production:选择所有包含Label中的key=“name”并且value!=“production”的对象。

  2. 基于集合的Label Selector。
    2.1 name in (master,slave):选择所有包含Label中的key=“name”并且value=“master”或value=“slave”的对象。
    2.2 name not in (master,slave):选择所有包含Label中的key=“name”并且value!=“master”和value!=“slave”的对象。

  3. 标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号(,)进行分隔即可。
    3.1. name=salve,env!=production。
    3.2. name not in (master,slave),env!=production。

二、语法及应用示例

1. 创建标签

语法:为资源打标签

kubectl label pod xxx key=value [-n 命名空间]

示例:为Nginx的Pod打上标签

kubectl label pod nginx  -n dev la=3.3

image20210704143124863.png

2. 更新标签

语法:更新资源的标签

kubectl label pod xxx key=value [-n 命名空间] --overwrite

示例:为Nginx的Pod更新标签

kubectl label pod nginx -n dev la=3.5 --overwrite

image20210704143230939.png

3. 查看标签

语法:查看标签

kubectl get pod xxx [-n 命名空间] --show-labels

示例:显示Nginx的Pod的标签

kubectl get pod nginx -n dev --show-labels

image20210704143312309.png

4. 删除标签

语法:删除标签

kubectl label pod xxx key- [-n 命名空间]

示例:删除名称为dev的namespace下的Nginx的Pod上的标签

kubectl label pod nginx -n dev la-

image20210704143514986.png

5. 声明式创建和删除label

示例:命令式对象配置

  1. 新建pod-nginx.yaml:
apiVersion: v1
kind: Pod
metadata:
  name: nginx1
  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
  1. 执行创建和删除命令:
kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml

image20210704144054019.png

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。