Label Selector(标签选择器)
标签选择器是最常用的选择器类型,通过标签(key: value
)筛选资源,广泛用于 Service、Deployment、ReplicaSet (RS)等资源。
核心语法
- 精确匹配(子集):
selector: matchLabels: app: frontend #key:value env: prod
- 复杂表达式(
matchExpressions
):selector: matchExpressions: - key: ... operator: ... # 支持 In、NotIn、Exists、DoesNotExist values: ...
操作符(Operator)
操作符 | 说明 |
---|---|
In | 值在列表中 |
NotIn | 值不在列表中 |
Exists | 标签存在即可(无需指定值) |
DoesNotExist | 标签不存在 |
例子
selector:
matchExpressions:
- key: app
operator: In
values: [v1,v2,...] #value在values列表中时匹配
selector:
matchExpressions:
- key: app
operator: NotIn
values: [v1] #value不在列表中时匹配
selector:
matchExpressions:
- key: app
operator: Exists #存在标签(key)时就与之匹配
selector:
matchExpressions:
- key: app
operator: DoesNotExists #不存在标签(key)时就与之匹配
简单实践
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
type: NodePort
selector:
app: myapp # 必须与 Pod 的 labels 匹配
ports:
- name: http
port: 80
targetPort: 80
nodePort: 31212
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mydeploy
spec:
replicas: 3
selector:
matchLabels:
app: myapp # 必须与 Pod 模板中的 labels 一致
template:
metadata:
labels:
app: myapp # 关键标签
spec:
containers:
- name: mynginx
image: nginx:1.16