K8S-资源对象标签管理
控制器标签管理
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-configmap name: nginx-configmap namespace: app spec: replicas: 1 selector: matchLabels: # 匹配pod app: nginx-configmap template: metadata: labels: app: nginx-configmap annotations: configmap-version: "v1"
spec.selector.matchLabels
和 spec.template.metadata.labels
在 Kubernetes 的 Deployment 中有直接关联,主要用于定义 Deployment 和其管理的 Pod 之间的匹配关系。
两者的关系
1. 严格匹配:
Deployment 通过 spec.selector.matchLabels 匹配 spec.template.metadata.labels 的值来确定哪些 Pod 是它管理的。
如果两者不一致,Deployment 会报错,无法创建 Pod。
2. deployment与service只需要匹配pod的任意一个标签即可。
[root@master-1 hostpath]# kubectl get pod,deploy,svc -n app --show-labels NAME READY STATUS RESTARTS AGE LABELS pod/nginx-configmap-7b75d6f7c5-vwmpt 1/1 Running 0 66s app=nginx-configmap,pod-template-hash=7b75d6f7c5,version=v1 pod/nginx-secret 1/1 Running 7 6d1h <none> NAME READY UP-TO-DATE AVAILABLE AGE LABELS deployment.apps/nginx-configmap 1/1 1 1 66s app=nginx-configmap1 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS service/nginx-configmap NodePort 10.0.102.5 <none> 80:30779/TCP,443:35178/TCP 66s app=nginx-configmap
集群node标签管理命令
]# kubectl cordon node1 //标记node1 不被调度,pod将不会被调度到该node节点上面 ]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 48d v1.17.11 node1 Ready,SchedulingDisabled <none> 48d v1.17.11 //可以看到调度被关闭 node2 Ready <none> 48d v1.17.11
]# kubectl uncordon node1 //取消node1标记,node1恢复调度 集群node下线,pod驱逐 ]# kubectl drain node1 //node1节点pod驱逐,用于node下线等场景(可下线无状态服务)
pod标签管理
标签查看
master ~]# kubectl get pods -l app //只显示标签为app的pod NAME READY STATUS RESTARTS AGE pod-demo 1/2 CrashLoopBackOff 4 4m12s master ~]# kubectl get pods -L app //显示所有标签中带有app的pod,并显示标签值 NAME READY STATUS RESTARTS AGE APP nginx-9ffc7d87b-4gjtn 1/1 Running 3 4d nginx-9ffc7d87b-5llww 1/1 Running 3 4d nginx-9ffc7d87b-jrq2h 1/1 Running 3 4d nginx-deploy-98c9d6c66-n25dd 1/1 Running 4 6d16h pod-demo 2/2 Running 5 4m32s myapp master ~]# kubectl get pods -l app --show-labels //更详细的 NAME READY STATUS RESTARTS AGE LABELS pod-demo 1/2 CrashLoopBackOff 5 6m51s app=myapp,tier=frontend master ~]# kubectl get pods -L app,run //显示多个pod的标签值 NAME READY STATUS RESTARTS AGE APP RUN nginx-9ffc7d87b-4gjtn 1/1 Running 3 4d nginx nginx-9ffc7d87b-5llww 1/1 Running 3 4d nginx nginx-9ffc7d87b-jrq2h 1/1 Running 3 4d nginx nginx-deploy-98c9d6c66-n25dd 1/1 Running 4 6d16h nginx-deploy pod-demo 1/2 Running 6 8m8s myapp
pod增加或修改标签
说明:标签类型为key:vaule类型
master ~]# kubectl get pods pod-demo --show-labels //查看标签 NAME READY STATUS RESTARTS AGE LABELS pod-demo 2/2 Running 7 13m app=myapp,tier=frontend master ~]# kubectl label pods pod-demo release=stable //增加标签 master ~]# kubectl get pods pod-demo --show-labels //再次查看标签 NAME READY STATUS RESTARTS AGE LABELS pod-demo 1/2 CrashLoopBackOff 7 15m app=myapp,release=stable,tier=frontend master ~]# kubectl label pods pod-demo release=release --overwrite //当该标签已存在值需要加上--overwrite选项 master ~]# kubectl get pods pod-demo --show-labels //再次查看 NAME READY STATUS RESTARTS AGE LABELS pod-demo 1/2 CrashLoopBackOff 8 20m app=myapp,release=release,tier=frontend
删除标签
删除一个Label时,只需在命令行最后指定Label的key名并与一个减号相连即可
kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS busybox 1/1 Running 52 4d11h release=beat,run=busybox]# kubectl label pod busybox release- pod/busybox labeled
]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS busybox 1/1 Running 52 4d11h run=busybox
标签选择器:
等值关系:=,==,!=
集合关系:key in (value1,value2…) 或者 key not in (value1,value2…)
等值关系演示
master ~]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx-9ffc7d87b-4gjtn 1/1 Running 3 4d1h pod-template-hash=9ffc7d87b,run=nginx nginx-9ffc7d87b-5llww 1/1 Running 3 4d1h pod-template-hash=9ffc7d87b,run=nginx nginx-9ffc7d87b-jrq2h 1/1 Running 3 4d1h pod-template-hash=9ffc7d87b,run=nginx nginx-deploy-98c9d6c66-n25dd 1/1 Running 4 6d16h pod-template-hash=98c9d6c66,run=nginx-deploy pod-demo 1/2 CrashLoopBackOff 9 28m app=myapp,release=stable,tier=frontend master ~]# kubectl label pods nginx-deploy-98c9d6c66-n25dd release=canary //增加标签 master ~]# kubectl get pod -l release!=stable,release!=canary --show-labels //查看标签值不等于xxx且xxx不等于xxpod
集合关系演示
集合关系:key in (value1,value2...) 或者 key not in (value1,value2...)说明:value必须为非空字段 exists ,noexists (values字段必须为空列表) master ~]# kubectl get pods -l "release in (stable,canary,aaa)" //或的关系,有一个也行,没有就算了 NAME READY STATUS RESTARTS AGE nginx-deploy-98c9d6c66-n25dd 1/1 Running 4 6d21h pod-demo 1/2 CrashLoopBackOff 65 5h31m -master ~]# kubectl get pods -l "release notin (stable,canary,aaa)" //取反 NAME READY STATUS RESTARTS AGE nginx-9ffc7d87b-4gjtn 1/1 Running 3 4d6h nginx-9ffc7d87b-5llww 1/1 Running 3 4d6h nginx-9ffc7d87b-jrq2h 1/1 Running 3 4d6h
越学越感到自己的无知
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现