标签与选择器 (Labels & Selectors)
标签 (Labels) 是附加到 Kubernetes 对象(如 Pod、Service)上的键值对,用于标识和组织资源。选择器 (Selectors) 是根据标签来查询和筛选资源的机制。
标签与选择器工作原理
graph LR
subgraph "集群资源"
P1[Pod 1
app=frontend
version=v1.0]
P2[Pod 2
app=frontend
version=v1.0]
P3[Pod 3
app=backend
version=v2.0]
P4[Pod 4
app=backend
version=v2.0]
P5[Pod 5
app=database
version=v1.0]
end
S[Service
选择器: app=frontend]
DS[Deployment
选择器: app=backend
version=v2.0]
S --> P1
S --> P2
DS --> P3
DS --> P4
标签最佳实践
推荐标签
app.kubernetes.io/name- 应用名称app.kubernetes.io/version- 应用版本app.kubernetes.io/component- 组件名称app.kubernetes.io/part-of- 所属应用app.kubernetes.io/managed-by- 管理工具
自定义标签
env- 环境 (dev/staging/prod)team- 负责团队tier- 层级 (frontend/backend)release- 发布渠道track- 发布轨道
选择器类型
| 选择器类型 | 语法 | 示例 | 说明 |
|---|---|---|---|
| 等值匹配 | =, == | environment = production | 精确匹配指定值 |
| 不等值匹配 | != | version != v1.0 | 匹配不等于指定值的资源 |
| 集合匹配 | in, notin | tier in (frontend, backend) | 匹配值在/不在指定集合中 |
| 存在匹配 | exists | environment | 匹配存在指定键的资源 |
| 不存在匹配 | !key | !deprecated | 匹配不存在指定键的资源 |
标签和选择器应用示例
# 为资源添加标签
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
labels:
app: frontend
version: v1.0
environment: production
spec:
replicas: 3
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
version: v1.0
spec:
containers:
- name: frontend
image: nginx:1.21
常用标签操作命令
# 通过标签查找资源
kubectl get pods -l environment=production
# 多个标签条件查找
kubectl get pods -l environment=production,tier=frontend
# 添加标签到现有资源
kubectl label pods my-pod version=v2.0
# 更新标签
kubectl label pods my-pod version=v3.0 --overwrite
# 删除标签
kubectl label pods my-pod version-
# 查看标签
kubectl get pods --show-labels