简单的Label居然有这么大的作用

简介: 简单的Label居然有这么大的作用
  • Label:对k8s中各种资源进行分类、分组,添加一个具有特别属性的标签
  • Selector:通过一个过滤的语法进行查找到对应标签的资源

Label是k8s中一个比较重要的概念。一个Label的一个key=value的键值对,可以附加到各种资源上。

现总结后讲解:

Label的匹配规则:

  • name=nginx:这类是直接匹配
  • name!=nginx:匹配标签中没有name=nginx的资源
  • name in (A,B):匹配所有具有name=A和name=B标签的资源
  • name not in (A):匹配所有不具有标签A的资源


27c50b28fe304918b398580b2eb7562f.png

通过上图可以看到:frontend通过service服务匹配到backend服务器,当service的标签是app=nginx时那么会匹配到backend的两组服务器,但是当service中筛选加上Role=backend-app时,Selector只会筛选到backend服务器组中包含这两种标签的服务器然后进行匹配。

通过下面这条命令可以看到Pod的标签:通过–show-labels参数

最后一列LABELS是Pod的标签

[root@k8s-master01 ~]# kubectl get pod --show-labels 
NAME                        READY   STATUS    RESTARTS       AGE   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    <none>
hpa-nginx-bd88bdd8f-h8vx7   1/1     Running   0              18h   app=hpa-nginx,pod-template-hash=bd88bdd8f

那么我们就可以尝试着用kubectl给Pod添加标签:从上列代码中我们是可以看到busybox是没有标签,通过下面这条命令在查看发现已经有标签app=busybox了。

[root@k8s-master01 ~]# kubectl label pod busybox app=busybox
pod/busybox labeled
[root@k8s-master01 ~]# kubectl get pod --show-labels 
NAME                        READY   STATUS    RESTARTS       AGE   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    app=busybox
hpa-nginx-bd88bdd8f-h8vx7   1/1     Running   0              18h   app=hpa-nginx,pod-template-hash=bd88bdd8f

如果一个集群中Pod非常多的时候,我们就可以通过用标签筛选的方式找到想要的Pod;-A参数是查看所有的Pod,但是加上-l app=busybox后只会找到符合这个条件的Pod。

[root@k8s-master01 ~]# kubectl get pod -A -l app=busybox
NAMESPACE   NAME      READY   STATUS    RESTARTS       AGE
default     busybox   1/1     Running   28 (16h ago)   9d

那么问题来了,要是我们不想要这个标签了或者说需要修改这个标签了怎么办?

  • 删除标签:
[root@k8s-master01 ~]# kubectl label pod busybox app-
pod/busybox unlabeled
[root@k8s-master01 ~]# kubectl get pod --show-labels 
NAME                        READY   STATUS    RESTARTS       AGE   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    <none>
hpa-nginx-bd88bdd8f-h8vx7   1/1     Running   0              18h   app=hpa-nginx,pod-template-hash=bd88bdd8f
  • 修改标签:可以看出标签已经是修改后的了。
[root@k8s-master01 ~]# kubectl get pod --show-labels 
NAME                        READY   STATUS    RESTARTS       AGE   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    app=busybox
hpa-nginx-bd88bdd8f-h8vx7   1/1     Running   0              18h   app=hpa-nginx,pod-template-hash=bd88bdd8f
[root@k8s-master01 ~]# kubectl label pod busybox app=busybox22222 --overwrite 
pod/busybox labeled
[root@k8s-master01 ~]# kubectl get pod --show-labels 
NAME                        READY   STATUS    RESTARTS       AGE   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    app=busybox22222
hpa-nginx-bd88bdd8f-h8vx7   1/1     Running   0              18h   app=hpa-nginx,pod-template-hash=bd88bdd8f

Labels是很简单的一个东西,接下来我们看看Selector是怎么用的

我想过滤出多个条件的pod又该怎么做呢?

[root@k8s-master01 ~]# kubectl get pod -A --show-labels 
NAMESPACE              NAME                                         READY   STATUS    RESTARTS         AGE   LABELS
default                busybox                                      1/1     Running   29 (3m19s ago)   9d    app=busybox22222
default                hpa-nginx-bd88bdd8f-h8vx7                    1/1     Running   0                18h   app=hpa-nginx,pod-template-hash=bd88bdd8f
kube-system            calico-kube-controllers-5dffd5886b-4blh6     1/1     Running   2 (2d1h ago)     9d    k8s-app=calico-kube-controllers,pod-template-hash=5dffd5886b
kube-system            calico-node-fvbdq                            1/1     Running   2 (2d1h ago)     9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-node-g8nqd                            1/1     Running   0                9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-node-mdps8                            1/1     Running   0                9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-node-nf4nt                            1/1     Running   1 (4d1h ago)     9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-node-sq2ml                            1/1     Running   1 (2d1h ago)     9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-typha-8445487f56-mg6p8                1/1     Running   0                9d    k8s-app=calico-typha,pod-template-hash=8445487f56
kube-system            calico-typha-8445487f56-pxbpj                1/1     Running   1 (2d1h ago)     9d    k8s-app=calico-typha,pod-template-hash=8445487f56
kube-system            calico-typha-8445487f56-tnssl                1/1     Running   0                9d    k8s-app=calico-typha,pod-template-hash=8445487f56
kube-system            coredns-5db5696c7-67h79                      1/1     Running   1 (2d1h ago)     9d    k8s-app=kube-dns,pod-template-hash=5db5696c7
kube-system            metrics-server-6bf7dcd649-5fhrw              1/1     Running   2 (4d1h ago)     9d    k8s-app=metrics-server,pod-template-hash=6bf7dcd649
kubernetes-dashboard   dashboard-metrics-scraper-7fcdff5f4c-9kk86   1/1     Running   1 (2d1h ago)     9d    k8s-app=dashboard-metrics-scraper,pod-template-hash=7fcdff5f4c
kubernetes-dashboard   kubernetes-dashboard-85f59f8ff7-js9j2        1/1     Running   12 (2d1h ago)    9d    k8s-app=kubernetes-dashboard,pod-template-hash=85f59f8ff7

以上就是我们的所有Pod了,我想要找到标签中包含kubernetes-dashboard和kube-dns的容器:

[root@k8s-master01 ~]# kubectl get pod -A -l 'k8s-app in (kubernetes-dashboard,kube-dns)'
NAMESPACE              NAME                                    READY   STATUS    RESTARTS        AGE
kube-system            coredns-5db5696c7-67h79                 1/1     Running   1 (2d1h ago)    9d
kubernetes-dashboard   kubernetes-dashboard-85f59f8ff7-js9j2   1/1     Running   12 (2d1h ago)   9d

找到了这两个Pod,说明这两个Pod中包含这两个标签,可以在上面的所有容器列表里看看这两个Pod是否含有这两个标签。

还有一种情况是比如我有一批Pod的标签是这样:

b9718331c94c47aaa68ab46825b38747.png

我想查看其中不包含ABB=X的所有Pod,可以这样写:

kubectl get po -l ABB!=X,APC=A


这样的话只会找到Pod02和Pod03。

总结:这个功能不难但是比较重要,也比较常用,一定要知道。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes 容器
使用Kubeadm部署K8s集群获取kube-scheduler和kube-controller-manager组件状态异常问题
使用Kubeadm部署K8s集群获取kube-scheduler和kube-controller-manager组件状态异常问题
283 0
|
存储 安全 算法
对象存储服务-Minio
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
1436 1
|
存储 负载均衡 算法
什么是Minio?如何搭建Minio集群?
MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议。
2969 0
什么是Minio?如何搭建Minio集群?
|
5月前
|
人工智能 运维 Kubernetes
倒计时 3 天!邀您共赴维多利亚港精彩纷呈的 AI 基础设施技术盛宴!
6 月 9 日「KubeCon China 2025 分论坛|阿里云 AI 基础设施技术沙龙」火热报名中!席位有限,先到先得。热切期待您的莅临!
|
4月前
|
数据采集 人工智能 自然语言处理
通义灵码支持 Qwen3-Coder,带你玩转 Agentic Coding,免费不限量
欢迎大家在通义灵码里免费体验最新 Qwen3-Coder 模型,一起 AI Coding。
|
6月前
|
传感器 人工智能 API
通义灵码2.5深度评测:编程智能体与MCP工具的革新体验
通义灵码2.5通过“智能体+MCP”组合,重新定义了AI编码助手的边界。其价值不仅在于代码生成效率,更在于通过工具链整合和环境感知,推动开发流程向“声明式编程”演进。对于开发者而言,它既是提升效率的利器,也是探索AI辅助开发边界的实验场。
490 8
|
8月前
|
移动开发 前端开发 JavaScript
React音频播放列表组件:常见问题、易错点与解决方案
本文介绍了在React中实现音频播放列表时常见的挑战及解决方案。通过基础实现、常见问题分析和最佳实践,帮助开发者避免状态管理、生命周期控制和事件处理中的陷阱。关键点包括使用`useRef`操作音频元素、`useState`同步播放状态、全局状态管理防止多音频同时播放、以及通过`useEffect`清理资源。还提供了代码示例和跨浏览器兼容性处理方法,确保高效实现功能并减少调试时间。
275 30
|
监控 Go 数据处理
iLogtail 进化论:重塑可观测采集的技术边界
iLogtail 作为一款开创性的轻量级日志采集器,历经 13 载风雨,始终致力于高效地从多元化的数据源中萃取、处理可观测信息,并无缝传输至阿里云日志服务或各类日志分析平台。今年,适逢 iLogtail 开源两周年的里程碑时刻,我们将回顾 iLogtail 的技术演进之路,领略其不断突破边界、引领可观测采集未来的创新力量。
682 124
|
人工智能 Prometheus Cloud Native
新场景、新能力,AI-native 时代的可观测革新
借助 AI-native 可观测解决方案,阿里云为用户提供开箱即用的覆盖大模型应用、大模型到基础设施的全链路实时观测、告警与诊断能力,帮助企业在复杂的数字化转型过程中更有效地确保资源的高效利用与业务的持续成功。
886 120