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