10、k8s-资源-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","tire":"backed"

标签选择器:

 标签定义完后,还需要考虑到标签的选择,这就要使用到Label Selector(标签选择器)、即:

  ·Label用于给某个资源对象定义标识

  ·Label Selector 用于查询和筛选拥有某些标签的资源对象

当前有两种标签选择器Label Selector:

  1、基于等式的Label Selector:

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

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

  2、基于集合的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

 

打标签的命令:

1、创建一个pod、编写yaml文件:vim nginx-pod.yaml
================================
apiVersion: v1
kind: Namespace
metadata:
 name: dev

---
apiVersion: v1
kind: Pod
metadata:
 name: nginx1-pod
 namespace: dev
spec:
 containers:
 - image: nginx:1.17.1
   name: nginx1-pod
   ports:
   - name: nginx-port
     containerPort: 80
     protocol: TCP
=====================================
2、执行yaml文件:kubectl create -nginx-pod.yaml
3、查看pod:kubectl get pods -n dev -o wide
4、查看pod标签:kubectl get pods -n dev --show-labels

 5、给pod打上标签:kubectl label pod nginx1-pod -n dev version=1.0      #version=1.0 为标签名  、nginx1-pod为pod名  注意一个pod可以打多个标签

 

6、标签的更新 --overwrite:kubectl label pod nginx1-pod -n dev version=2.0 --overwrite

 

7、筛选标签:kubectl get pods -l "version=2.0" -n dev --show-labels      # -l 表示挑选  "标签名"

 

8、删掉标签:kubectl label pod nginx1-pod -n dev taget-      #标签名 后面跟减号 - 

 

 

yaml文件配置给pod打上标签:

1、创建yaml文件:vim label-pod.yaml
================================

apiVersion: v1
kind: Pod
metadata:
 name: nginx2-pod
 namespace: dev
 labels:
  version: "3.0"
  env: "test"

spec:
 containers:
 - name: pod
   image: nginx:1.17.1
   ports:
   - name: nginx-port
     containerPort: 80
     protocol: TCP
=====================================
2、执行yaml文件:kubectl create -f label-pod.yaml
3、查看pod是否存在且已打上标签:kubectl get pods -ndev --show-labels

 

 

posted @ 2024-07-01 00:09  little小新  阅读(41)  评论(0编辑  收藏  举报