命令定位
kubectl label 给资源增、改、删标签(key=value)。适用平台是 Kubernetes。标签不是装饰,而是选择器语法的基础:Service、Deployment、NetworkPolicy、PDB、拓扑分布约束都靠它关联对象。改错一个标签,最常见的结果是 Service 后端瞬间清空、Pod 被 ReplicaSet 遗弃。因此这条命令在运维里的定位是「一步改动、影响面很大」。
基本信息
| 适用平台 | Kubernetes,作用于所有带 metadata.labels 的资源 |
|---|---|
| 语法 | kubectl label <资源> <名称> <key>=<value> [--overwrite];删除用 <key>- |
| 覆盖保护 | 键已存在时默认报错,必须显式加 --overwrite |
| 权限要求 | 目标资源的 patch 权限 |
典型使用场景
- 给节点补调度标签:为专用机型打 disktype=ssd、gpu=true 供 nodeSelector 使用
- 区分环境:给 Pod 或命名空间打 env=prod 便于批量查询与策略匹配
- 接入监控与选型:为工作负载补 app、team、tier 标签,让 Prometheus 与拓扑约束能识别
- 维护窗口标记:临时打 maintenance=true,配合选择器批量统计待处理对象
- 清理废弃标签:删除旧版约定留下的键,避免选择器误命中
常用示例
常用示例
kubectl label pod web-x env=prod # 新增标签
kubectl label node node-1 disktype=ssd gpu=true # 一次打多个键
kubectl label pod web-x env=staging --overwrite # 覆盖已有键,必须显式声明
kubectl label pod web-x env- # 删除标签(键名后加短横)
kubectl label deploy web app.kubernetes.io/part-of=shop # 使用推荐前缀
kubectl get pods -l env=prod --show-labels # 验证命中范围影响面速查
| 改的对象 | 受影响机制 | 后果 |
|---|---|---|
| Service 目标 Pod | Service 的 selector 匹配 | 标签不匹配则端点清空,服务 503 |
| Pod 的 app 标签 | Deployment/ReplicaSet 的 selector | Pod 脱离管理或控制器匹配不到副本 |
| Node 标签 | nodeSelector、nodeAffinity、拓扑约束 | 现有 Pod 不迁移,但新 Pod 调度结果改变 |
| 命名空间标签 | NetworkPolicy 与准入策略 | 网络策略命中范围变化 |
标签键若已存在,不加 --overwrite 会报错而不是静默覆盖,这是防误改的保护;批量脚本里应显式决定覆盖还是跳过。
标签键前缀(如 app.kubernetes.io/name)是社区推荐写法,前缀域名段必须是合法 DNS 子域且 ≤253 字符,键名部分 ≤63 字符,写错会被 API 直接拒绝。