K8S标签与标签选择器-二、标签选择器

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

image-20240712000207725

3.2、非等值过滤

kubectl get pods -A -l app!=flannel
#过滤出不带标签app=flannel的Pod

image-20240712000805226

3.3、多条件过滤

kubectl get pods -A -l "ns in (dev3,dev4)" --show-labels
#过滤出包含ns=dev3或ns=dev4的Pod

image-20240712001226147

3.4、多条件取反过滤

kubectl get pods -A -l "app notin (flannel,nginx-test,nginx-labels)" --show-labels
#过滤出标签中不包含app=(flannel,nginx-test,nginx-labels)的Pod

image-20240712001721235

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'

image-20240712213432876

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

image-20240712215045936

上一篇:【vue+el-table】实现表尾合计行分两行显示,一行显示勾选项之和,一行显示合计,已实现,具体思路解析


下一篇:vite配置环境变量和使用,配置正确后import.meta.env.VITE_APP_BASE_URL编译报错的解决方法