Label

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

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 Seletor用于查询和筛选拥有某些标签的资源对象

当前有两种Label Seletor:

  • 基于等式的Label Seletor

    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 Seletor进行组合,使用逗号","进行分隔即可。例如;

name=slave,env!=prodution
name not in(frontend),envv!=prodution

 

命令方式创建

#为pod资源打上标签
kubectl label pod nginx-pod version=1.0 -n dev

#为pod资源更新标签
kubectl label pod nginx-pod version=2.0 -n dev --overwrite

#查看标签
kubectl get pod nginx-pod -n dev --show-labels

#筛选标签
kubectl get pod -l version=2.0 -n dev --show-labels
kubectl get pod -l version!=2.0 -n dev --show-labels

#删除标签
kubectl label pod nginx -n dev version-

 

配置方式创建

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
  labels:
    version: "1.0"
    env: pro
spec:
  containers:
  - image: nginx:1.17.1
    name: pod
    ports:
    - name: nginx-prot
      containerPort: 80
      protocol: TCP

kubectl apply -f nginx-label.yml

 

posted @ 2021-11-04 18:32  第七爻  阅读(320)  评论(0编辑  收藏  举报