K8s 标签

一、核心:标签的本质是「键值对」

标签(Labels)是附加在 Pod、Node、Service 等 K8s 资源上的键值对(key: value),冒号是「分隔符」,作用是把「键」和「值」分开:

  • 冒号前 = 键(Key):标签的「名字 / 类别 / 字段名」,用来定义这个标签是「什么维度」
  • 冒号后 = 值(Value):标签的「具体内容 / 属性值」,用来定义这个维度下的「具体是什么」

举个最直观的例子

复制代码
labels:
  env: prd          # 键:env(环境维度),值:prd(生产环境)
  app: nginx        # 键:app(应用维度),值:nginx(应用名)
  version: v1.14.2  # 键:version(版本维度),值:v1.14.2(版本号)

你可以把它理解成「给资源打分类标签」:

  • 键是「分类的标题」(比如「环境」「应用」「版本」)
  • 值是「分类的具体选项」(比如「生产」「Nginx」「v1.14.2」)

二、详细拆解:键(冒号前)的规则和结构

标签的键(冒号前)有严格的格式要求,分为 **「可选前缀 + 必须的名称」** 两部分,用斜杠/分隔:

1. 结构说明

  • 名称段(必须) :冒号前「斜杠之后」的部分(如果没有前缀,就是冒号前的全部内容)
    • 规则:最多 63 个字符,开头 / 结尾必须是字母 / 数字(a-z、A-Z、0-9),中间可以用-_.和字母数字
    • 例子:appversionname
  • 前缀(可选) :斜杠之前的部分,用来避免命名冲突
    • 规则:必须是 DNS 子域格式(用.分隔,比如app.kubernetes.io),总长度≤253 个字符,结尾必须跟/
    • 特殊限制:kubernetes.io/k8s.io/是 K8s 核心组件保留前缀,用户不能自定义使用
    • 例子:app.kubernetes.io/name → 前缀是app.kubernetes.io,名称是name

2. 两种常见的键

类型 格式 例子 用途
私有键(无前缀) 直接写名称 env: devapp: nginx 用户自定义的私有标签,不会和官方冲突
共享键(带前缀) 前缀 + 名称 app.kubernetes.io/name: mysql 官方推荐的标准化标签,用于统一规范,避免不同团队命名冲突

三、详细拆解:值(冒号后)的规则

标签的值(冒号后)规则更宽松,核心要求:

  • 最多 63 个字符,可以为空
  • 如果不为空:开头 / 结尾必须是字母 / 数字,中间可以用-_.和字母数字
  • 例子:prdv1.1.0stablemysql-abcxyz 都是合法值

四、标签到底有什么用?(3 大核心作用)

标签不会影响资源的功能,核心作用是「给资源打标记,方便管理和筛选」:

1. 选择器:用标签筛选一组资源

这是最核心的用途:Service 用标签选择器,找到匹配的 Pod,把流量路由过去。

  • 比如 Service 的标签选择器是app: nginx,就会把流量转发给所有带app: nginx标签的 Pod

2. 组织和分类:给资源分层分类

用标签区分不同环境、不同业务的资源,方便管理。

  • 比如env: dev(开发环境)、env: prd(生产环境),一眼就能区分资源归属

3. 批量操作:简化运维

用标签批量操作资源,不用一个个指定。

  • 比如删除所有version: v1.1.0的 Pod,或者给所有app: mysql的 Pod 扩容

五、常用标签示例

1. 常用私有标签(用户自定义)

完整标签 键(冒号前) 值(冒号后) 用途
version: v1.1.0 version v1.1.0 标记应用版本
release: stable release stable 标记版本状态(正式版 / 测试版)
env: dev env dev 标记运行环境(开发 / 生产)
app: nginx app nginx 标记应用名称

2. 官方推荐的共享标签(带app.kubernetes.io/前缀)

完整标签 键(冒号前) 值(冒号后) 用途
app.kubernetes.io/name: mysql app.kubernetes.io/name mysql 标记应用名称
app.kubernetes.io/instance: mysql-abcxyz app.kubernetes.io/instance mysql-abcxyz 标记应用实例的唯一名称
app.kubernetes.io/version: 5.7.21 app.kubernetes.io/version 5.7.21 标记应用版本
app.kubernetes.io/component: database app.kubernetes.io/component database 标记架构中的组件(数据库 / 前端 / 后端)

六、标签选择符:怎么用标签筛选资源?

标签选择符是 K8s 的核心分组功能,用来「根据标签筛选一组资源」,支持两种类型,逗号分隔的多个条件是逻辑与(&&),必须同时满足。

1. 基于等值的选择符(最常用)

根据「键是否等于某个值」筛选,核心格式:键=值键!=值

  • 例子 1:env=prd → 筛选所有env键的值为prd的资源(生产环境的所有 Pod)
  • 例子 2:app=nginx,env=prd → 筛选同时满足app=nginxenv=prd的资源(生产环境的 Nginx Pod)
  • 实际场景:Pod 的nodeSelector,让 Pod 只能运行在带accelerator: nvidia-tesla-p100标签的节点上,实现 GPU 调度

2. 基于集合的选择符

用「一组值」筛选,支持 3 个操作符:innotinexists

操作符 格式 含义 例子
in 键 in (值1, 值2) 键的值等于其中任意一个,就匹配 environment in (production, qa) → 筛选环境是生产或测试的资源
notin 键 notin (值1, 值2) 键的值不等于这两个,就匹配 tier notin (frontend, backend) → 筛选不是前端 / 后端的资源
exists 只要有这个键,不管值是什么,就匹配 partition → 筛选所有带partition标签的资源
!exists !键 没有这个键,就匹配 !partition → 筛选所有不带partition标签的资源

3. 混合使用

两种选择符可以组合,逗号分隔是逻辑与,必须同时满足:

  • 例子:partition in (customerA, customerB), environment != qa→ 筛选同时满足:partition是 A/B,且environment不是qa的资源

七、总结

  1. 标签是key: value的键值对,冒号前是「分类的维度(键)」,冒号后是「分类的具体值(值)」
  2. 键分「可选前缀 + 必须名称」,值规则宽松,核心作用是给资源打标记、方便筛选和批量管理;
  3. 标签选择符是筛选资源的工具,支持等值和集合两种方式,逗号分隔是逻辑与,必须同时满足。

八、补充:实际 YAML 示例

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    # 冒号前是键,冒号后是值
    environment: production  # 键:environment,值:production
    app: nginx               # 键:app,值:nginx
    version: v1.14.2         # 键:version,值:v1.14.2
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

这个 Pod 带了 3 个标签,你可以用app=nginx筛选出它,用environment=production筛选出所有生产环境的 Pod。

相关推荐
阿里云云原生4 小时前
不改代码也能监控 AI Agent?揭秘 OBI 如何在内核层精准解析 GenAI 语义流量
云原生·agent
众人皆醒我独醉4 小时前
Pod 一直 Terminating,死活删不掉?三个凶手,每一个你都意想不到
面试·kubernetes
飞翔沫沫情5 小时前
K8s Alloy 采集 Pod 控制台日志
云原生·容器·kubernetes
潮起鲸落入海11 小时前
Kubernetes Metric Server, Quota and Limits
容器·kubernetes
梦想的颜色11 小时前
Docker 容器化本地部署 Claude Code 完整硬核教程|隔离沙盒 + 国产模型直连 + 持久化 Skill
运维·容器·ai 工程化·沙盒隔离·docker 本地部署·claude code硬核实战·国内国产模型接入
摇滚侠12 小时前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 19-25
java·云原生·kubernetes
渣渣盟12 小时前
Docker 运维常用命令手册(含扩容与实战)
运维·docker·容器
我叫张小白。13 小时前
一个微服务电商+社区项目(瓷韵app)的技术深度复盘
docker·微服务·云原生·架构
咕噜咕噜的猪大侠13 小时前
《K8s 核心知识梳理:Deployment 滚动更新、JobCronJob、DaemonSet 和 Service》
云原生·容器·kubernetes
虚心的百褶裙13 小时前
远程调用服务架构设计及zookeeper技术详解(下篇)
分布式·zookeeper·云原生