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.matchLabelsspec.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
复制代码
posted @   不会跳舞的胖子  阅读(195)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示