k8s--label

label 介绍

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

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" 的对象

创建 pod

创建一个 pod-nginx.yaml 文件,内容如下

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: zouzou  # 前提是 zouzou 的命名空间要存在
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

创建 pod

kubectl apply -f pod-nginx.yaml -n zouzou

这样我们的 pod 就创建好了

查看标签

我们使用 kubectl get pod 的时候是没有显示标签的

[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0

如果要显示标签加上 --show-labels

# 加上 --show-labels 就可以查看标签了
kubectl get pod -n zouzou --show-labels 

给 pod 打标签

# 格式如下
kubectl label pod pod名称 标签名=标签值 -n 命名空间名称

# 例子,给 nginx 的 pod 打了个标签 version=1.0,在命名空间 zouzou 下
kubectl label pod nginx version=1.0 -n zouzou

更新标签

# 格式如下
kubectl label pod pod名称 标签名=标签值 -n 命名空间名称 --overwrite

# 例子,给 nginx 的 pod 更新标签,更新为 version=2.0,在命名空间 zouzou 下,更新的话必须加 --overwrite
kubectl label pod nginx version=2.0 -n zouzou --overwrite

那如果更新的时候标签不存在怎么处理呢?答案是会创建一个标签

删除标签

上面我们更新标签的时候,写错了,多创建了一个 ve=2.0 的标签,我们就要删掉

# 格式如下,注意,标签名后面加个 - 就代表要删除该标签
kubectl label pod pod名称 标签名- -n 命名空间名称

# 例子,删除命名空间 zouzou 下 的 nginx pod 的 ve 标签
kubectl label pod nginx ve- -n zouzou

筛选标签

当我们有很多个 pod 的时候,每个 pod 又都有很多的标签,这时候我们想通过标签来进行筛选,更改 pod-nginx.yaml 文件,将 name 改为 nginx1

apiVersion: v1
kind: Pod
metadata:
  name: nginx1 # 更改这里,name 不能重复
  namespace: zouzou  # 前提是 zouzou 的命名空间要存在
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

在创建 pod

给 nginx1 打上三个标签

# 先查看标签
[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou --show-labels
NAME     READY   STATUS    RESTARTS   AGE    LABELS
nginx    1/1     Running   0          22m    version=2.0
nginx1   1/1     Running   0          2m5s   <none>

# 给 nginx1 打上 version=1.0 的标签
[root@dce-10-6-215-215 ~]# kubectl label pod nginx1 version=1.0 -n zouzou
pod/nginx1 labeled

# 可以一次打多个标签,中间通过空格隔开
[root@dce-10-6-215-215 ~]# kubectl label pod nginx1 app=v1 name=ng -n zouzou
pod/nginx1 labeled

# 查看标签
[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx    1/1     Running   0          24m     version=2.0
nginx1   1/1     Running   0          3m59s   app=v1,name=ng,version=1.0

准备工作做好之后,我们就可以筛选了

# 格式如下,注意,-l 后面加筛选条件
kubectl get pod --show-labels -l 标签名=值 -n 命名空间名称

# 例子,筛选命名空间 zouzou 下 的 version=2.0 的标签
kubectl get pod --show-labels -l version=2.0 -n zouzou

通过配置的方式创建标签

上面我们通过 yaml 文件的方式创建的 pod,但没有在 yaml 里面写上标签,只是使用命令创建标签,我们可以在 yaml 里直接写上标签,pod-nginx.yaml 如下

apiVersion: v1
kind: Pod
metadata:
  name: nginx2 # name 不能重复
  namespace: zouzou  # namespace 要存在
  labels:  # 下面有两个标签
    version: "3.0"
    env: "test"
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

创建

kubectl apply -f pod-nginx.yaml

这样我们就可以在创建 yaml 文件的时候配置好标签 

 

posted @ 2022-07-20 21:42  邹邹很busy。  阅读(560)  评论(0编辑  收藏  举报