- 标签
标签是附体在k8s 资源对象的一组键值对,其存在的意义是按照用户的意图来组织资源,同时不对资源的核心逻辑产生影响。
yaml
metadata:
labels:
key1: value1
key2: value2
标签名:
○ 标签名部分是必须的。
○ 不能多余 63 个字符。
○ 必须由字母、数字开始和结尾。
○ 可以包含字母、数字、减号(-)、下划线(_)、小数点(.)。
标签的 value :
○ 不能多于 63 个字符。
○ 可以为空字符串。
○ 如果不为空,则必须由字母、数字开始和结尾。
○ 如果不为空,可以包含字母、数字、减号(-)、下划线(_)、小数点(.)。
yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels: # 标签
app: nginx
environment: prod
spec:
containers:
- name: nginx
image: nginx
pod 中标签的操作
- 添加标签
kubectl label pod nginx-pod hello=world
- 更新标签
kubectl label pod nginx-pod hello=java --overwrite
- 删除标签
kubectl label pod nginx-pod hello-
node 中标签的操作
- 添加标签
kubectl label node k8s-node1 node-role=ingress
- 更新标签
kubectl label node k8s-node1 node-role=ingress2 --overwrite
- 删除标签
kubectl label node k8s-node1 node-role-
- 标签选择器
● 通常来讲,会有多个 Kubernetes 对象包含相同的标签。通过使用标签选择器(label selector),用户/客户端可以选择一组对象。标签选择器是 Kubernetes 中最主要的分类和筛选手段。
● Kubernetes 的 api-server 支持两种形式的标签选择器,equality-based 基于等式的 和 set-based 基于集合的 。标签选择器可以包含多个条件,并使用逗号进行分隔,此时只要满足所有条件的 Kubernetes对象才会被选中。
● 基于等式的标签选择器,可以使用三种操作符 = 、== 、!=。前两个操作符含义是一样的,都代表相等;后一个操作符代表不相等。
# 选择了标签名为 `environment` 且 标签值为 `production` 的Kubernetes对象
kubectl get pods -l environment=production,tier=frontend
# 选择了标签名为 `tier` 且标签值不等于 `frontend` 的对象,以及不包含标签 `tier` 的对象
kubectl get pods -l tier != frontend
# 选择所有包含 `partition` 标签的对象
kubectl get pods -l partition
# 选择所有不包含 `partition` 标签的对象
kubectl get pods -l !partition
基于集合标签选择器,可以根据标签名的一组值进行筛选。支持的操作符有三种:in、notin、exists。
# 选择所有的包含 `environment` 标签且值为 `production` 或 `qa` 的对象
kubectl get pods -l environment in (production, qa)
# 选择所有的 `tier` 标签不为 `frontend` 和 `backend`的对象,或不含 `tier` 标签的对象
kubectl get pods -l tier notin (frontend, backend)
# 选择包含 `partition` 标签(不检查标签值)且 `environment` 不是 `qa` 的对象
kubectl get pods -l partition,environment notin (qa)