一 介绍 

1 label 

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

Label的特点:

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

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

一些常用的标签如下:
版本标签:
"version":"release","version":"stable".........
环境标签:
"environment":"dev","environment":"test","environment":"pro"......
架构标签:
"tier":"fronted","tier":"backend"

 2 Label Selector

        标签定义完毕之后,还要考虑标签的选择,这就要使用到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 (fronted):选择所有包含Label中key=”name“且key不等于”fronted“的对象

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

name=slave,env!=production
name not in (fronted),env!=production

二 操作

1 命令方式

# 为pod资源打标签
[root@master ~]#kubectl label pod nginx-pod version=1.0 -n dev
pod/nginx-pod labeled

# 为pod资源更新标签
[root@master ~]#kubectl label pod nginx-pod version=2.0 -n dev --overwrite
pod/nginx-pod labeled

# 查看标签
[root@master ~]#kubectl get pod nginx-pod -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
nginx-pod   1/1     Running   0          10m   version=2.0

# 筛选标签
[root@master ~]#kubectl get pod -n dev -l version=2.0 --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
nginx-pod   1/1     Running   0          17m   version=2.0
[root@master ~]#kubectl get pod -n dev -l version!=2.0 --show-labels
No resources found in dev namespace.

# 删除标签
[root@master ~]#kubectl label pod nginx-pod version- -n dev
pod/nginx-pod labeled

2 配置方式

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

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐