Kubernetes Labels 和 Selectors 总结
Labels (标签)
基本概念
- 作用:Labels 是附加到 Kubernetes 对象(如 Pods、Services、Deployments 等)上的键值对(key/value),用于标识对象的特征
- 目的:帮助用户组织和选择对象的子集,不提供唯一性保证(多个对象可以有相同 label)
特点
- 每个对象可以有多个 labels
- Key 最长 63 字符,Value 最长 63 字符
- Key 必须以字母数字开头和结尾,可以包含
-
,_
,.
- 前缀可选,如
example.com/my-label
(DNS 子域名格式)
常见用途
- 标识环境:
environment: dev/prod/test
- 标识版本:
version: v1.2.3
- 标识组件:
app: frontend/backend
- 标识层级:
tier: frontend/backend/cache
Selectors (选择器)
基本概念
- 作用:通过 label 条件来筛选/匹配 Kubernetes 对象
- 使用场景:Service 选择 Pods、Deployment 选择 ReplicaSets、各种控制器选择管理对象等
选择器类型
1. 等式选择器 (Equality-based)
=
或==
:等于(两者功能相同)!=
:不等于
示例:
selector:
matchLabels:
environment: production
tier: frontend
2. 集合选择器 (Set-based)
in
:在集合中notin
:不在集合中exists
:键存在(仅指定 key)doesnotexist
:键不存在
示例:
selector:
matchExpressions:
- {key: environment, operator: In, values: [dev, test]}
- {key: tier, operator: NotIn, values: [backend]}
- {key: partition, operator: Exists}
使用场景示例
Service 选择 Pods
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
tier: frontend
ports:
- protocol: TCP
port: 80
targetPort: 9376
Deployment 管理 Pods
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
常用命令
查看资源标签:
kubectl get pods --show-labels
按标签筛选:
kubectl get pods -l environment=production,tier=frontend
添加/修改标签:
kubectl label pods my-pod environment=prod
删除标签:
kubectl label pods my-pod environment-
评论需开启科学上网!