概述
在k8s中有一个非常核心的概念,就是label(标签),以及对label的使用,label selector
label(标签)
定义:
标签这个概念和现实生活中的标签其实没有什么区别,如,苹果是水果,冰箱是家电,都是一种标签,类似的。在k8s中,一个label就是key/value对如:app:nginx
这个标签可以有使用者自己定义,然后附加到k8s中的资源对象上,比如,pod,node上等等
特性:
label有如下的一些特点:
- label可以被附加到各种资源对象上
- 一个资源对象可以定义任意数量的label
- 同一个label可以被添加到任意数量的资源对象上
label selector(标签选择器):
当我们给一组对象,比如有10个pod,打上不同的标签之后,当我们需要选择期中的部分,或者全部作为使用目标的时候,就可以使用label selector来实现这个操作,标签选择器中指定具体的过滤的条件,然后就能在10个pod中过滤出满足我们要求的这些pod
定义标签:
创建一个pod的定义文件中,指定标签
apiVersion: v1
kind: Namespace
metadata:
name: ns-label
spec: {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-label
labels:
app: nginx-label
namespace: ns-label
spec:
replicas: 2
selector:
matchLabels:
app: nginx
env: label
template:
metadata:
labels:
app: nginx
env: label
spec:
containers:
- name: label-nginx
image: nginx:1.15
ports:
- containerPort: 80
restartPolicy: Always
在模板中,通过以下方式来定义label
metadata:
labels:
app: nginx
env: label
创建pod并查看标签,可以看到不同的标签
[root@k8s-master01 ns-slx-study]# kubectl get pod --show-labels -n ns-label
NAME READY STATUS RESTARTS AGE LABELS
nginx-label-c4758cff4-h8bz5 1/1 Running 0 7m2s app=nginx,env=label,pod-template-hash=c4758cff4
nginx-label-c4758cff4-ltkrq 1/1 Running 0 7m2s app=nginx,env=label,pod-template-hash=c4758cff4
[root@k8s-master01 ns-slx-study]#
label selector:
我们可以通过标签选择来筛选出满足我们的要求的对象。所谓的标签选择就是过滤,有几种方式:
#过滤出ns-lanel namespace下所有包含env=label的pod
[root@k8s-master01 ns-slx-study]# kubectl -n ns-label get pod -l env=label --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-label-c4758cff4-h8bz5 1/1 Running 0 11m app=nginx,env=label,pod-template-hash=c4758cff4
nginx-label-c4758cff4-ltkrq 1/1 Running 0 11m app=nginx,env=label,pod-template-hash=c4758cff4
几个常用命令,我就不演示了:
#在ns(命名空间):ns-label下,过滤出包含env=nginx,env=label的pod
kubectl -n ns-label get pod -l 'env=nginx,env=label' --show-labels
#在ns(命名空间):ns-label下,过滤出包含env=ngin或者env=label或者env=ssd的pod
kubectl -n ns-label get pod -l 'env in (nginx,label,ssd)' --show-labels
#在ns(命名空间):ns-label下,过滤出包含env=ngin或者env=label或者env=ssd,同时app=nginx的pod
kubectl -n ns-label get pod -l 'app=nginx,env in (nginx,label,ssd)' --show-labels
#在ns(命名空间):ns-label下,过滤出不包含env=ngin或者env=label或者env=ssd的pod
kubectl -n ns-label get pod -l 'env notin (nginx,label,ssd)' --show-labels
#在ns(命名空间):ns-label下,过滤出不是env=nginx,env=label的pod
kubectl -n ns-label get pod -l 'env!=nginx,env!=label' --show-labels
基于集合匹配的方式:
selector:
matchLabels:
app: nginx
env: online
matchExpressions:
- {key: release, operator: In, values: [stable] }
- {key: app,operator: NotIn, values: [nginx02,nginx03] }
replicas: 1
template:
metadata:
labels:
app: nginx06
env: online
release: stable
语法:
matchExpressions:
- {key: release, operator: In, values: [stable] }
- {key: app,operator: NotIn, values: [nginx02,nginx03] }
标签:ns,app,label,selector,nginx,env,pod,k8s From: https://www.cnblogs.com/Direction-of-efforts/p/17155719.html