1、简介
Lablel
附加到Kubernetes集群中的各种资源对象上,目的就是对这些资源对象进行分组管理,而分组管理的核心就是:Lablel Selector
。
我们可以通过Label Selector(标签选择器)查询和筛选某些特定Label的资源对象,进而可以对他们进行相应的操作管理,类似于sql语句中where的条件:
select * from where ...
2、表达式
2.1、基于等式的
name = nginx 匹配所有具有标签 name = nginx 的资源对象
name != nginx 匹配所有不具有标签 name = nginx 的资源对象
2.2、基于集合的
env in (dev, test) 匹配所有具有标签 env = dev 或者 env = test 的资源对象
name not in (frontend) 匹配所有不具有标签 name = frontend 的资源对象
3、过滤查询
3.1、等值过滤
kubectl get pods -A -l ns=dev3
#过滤出带有ns=dev3标签的Pod
3.2、非等值过滤
kubectl get pods -A -l app!=flannel
#过滤出不带标签app=flannel的Pod
3.3、多条件过滤
kubectl get pods -A -l "ns in (dev3,dev4)" --show-labels
#过滤出包含ns=dev3或ns=dev4的Pod
3.4、多条件取反过滤
kubectl get pods -A -l "app notin (flannel,nginx-test,nginx-labels)" --show-labels
#过滤出标签中不包含app=(flannel,nginx-test,nginx-labels)的Pod
4、service资源对象关联对应标签的Pod
4.1、创建三个Pod
kubectl run nginx-1 --image=nginx:latest --labels='app=nginx'
kubectl run nginx-2 --image=nginx:latest --labels='app=nginx'
kubectl run nginx-3 --image=nginx:latest --labels='app=nginx'
4.2、创建service对象关联对应标签的Pod
4.2.1、创建service资源清单
apiVersion: v1
kind: Service
metadata:
name: service-test
spec:
selector:
app: nginx
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
4.2.2、应用清单
kubectl apply -f service-test.yaml
4.2.3、验证
kubectl describe service service-test
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,IP:.status.podIP