k8s--label

简介: k8s--label

label 介绍


Label 是kubernetes 系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。

Label 的特点:

  • 一个 Label 会以 key/value 键值对的形式附加到各种对象上,如 Node、Pod、Service 等等
  • 一个资源对象可以定义任意数量的 Label ,同一个 Label 也可以被添加到任意数量的资源对象上去
  • Label 通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除

可以通过 Label 实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。

一些常用的 Label 示例如下:

  • 版本标签:"version":"release", "version":"stable"......
  • 环境标签:"environment":"dev","environment":"test","environment":"pro"
  • 架构标签:"tier":"frontend","tier":"backend"

标签定义完毕之后,还要考虑到标签的选择,这就要使用到 Label Selector,即:

  • Label 用于给某个资源对象定义标识
  • Label Selector 用于查询和筛选拥有某些标签的资源对象

当前有两种 Label Selector:

  • 基于等式的 Label Selector
    name = slave:选择所有包含 Label 中 key="name" 且 value="slave"的对象
    env != production:选择所有包括 Label 中的 key="env" 且 value 不等于 "production" 的对象
  • 基于集合的 Label Selector
    name in (master, slave):选择所有包含 Label 中的 key="name" 且 value="master" 或 "slave" 的对象
    name not in (frontend):选择所有包含 Label 中的 key="name" 且 value不等于 "frontend" 的对象


创建 pod


创建一个 pod-nginx.yaml 文件,内容如下

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: zouzou  # 前提是 zouzou 的命名空间要存在
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

创建 pod

kubectl apply -f pod-nginx.yaml -n zouzou

这样我们的 pod 就创建好了


查看标签


我们使用 kubectl get pod 的时候是没有显示标签的

[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0

如果要显示标签加上 --show-labels

# 加上 --show-labels 就可以查看标签了
kubectl get pod -n zouzou --show-labels


给 pod 打标签

# 格式如下
kubectl label pod pod名称 标签名=标签值 -n 命名空间名称
# 例子,给 nginx 的 pod 打了个标签 version=1.0,在命名空间 zouzou 下
kubectl label pod nginx version=1.0 -n zouzou


更新标签

# 格式如下
kubectl label pod pod名称 标签名=标签值 -n 命名空间名称 --overwrite
# 例子,给 nginx 的 pod 更新标签,更新为 version=2.0,在命名空间 zouzou 下,更新的话必须加 --overwrite
kubectl label pod nginx version=2.0 -n zouzou --overwrite

那如果更新的时候标签不存在怎么处理呢?答案是会创建一个标签


删除标签


上面我们更新标签的时候,写错了,多创建了一个 ve=2.0 的标签,我们就要删掉

# 格式如下,注意,标签名后面加个 - 就代表要删除该标签
kubectl label pod pod名称 标签名- -n 命名空间名称
# 例子,删除命名空间 zouzou 下 的 nginx pod 的 ve 标签
kubectl label pod nginx ve- -n zouzou


筛选标签


当我们有很多个 pod 的时候,每个 pod 又都有很多的标签,这时候我们想通过标签来进行筛选,更改 pod-nginx.yaml 文件,将 name 改为 nginx1

apiVersion: v1
kind: Pod
metadata:
  name: nginx1 # 更改这里,name 不能重复
  namespace: zouzou  # 前提是 zouzou 的命名空间要存在
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

在创建 pod

给 nginx1 打上三个标签

# 先查看标签
[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou --show-labels
NAME     READY   STATUS    RESTARTS   AGE    LABELS
nginx    1/1     Running   0          22m    version=2.0
nginx1   1/1     Running   0          2m5s   <none>
# 给 nginx1 打上 version=1.0 的标签
[root@dce-10-6-215-215 ~]# kubectl label pod nginx1 version=1.0 -n zouzou
pod/nginx1 labeled
# 可以一次打多个标签,中间通过空格隔开
[root@dce-10-6-215-215 ~]# kubectl label pod nginx1 app=v1 name=ng -n zouzou
pod/nginx1 labeled
# 查看标签
[root@dce-10-6-215-215 ~]# kubectl get pod -n zouzou --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx    1/1     Running   0          24m     version=2.0
nginx1   1/1     Running   0          3m59s   app=v1,name=ng,version=1.0

准备工作做好之后,我们就可以筛选了

# 格式如下,注意,-l 后面加筛选条件
kubectl get pod --show-labels -l 标签名=值 -n 命名空间名称
# 例子,筛选命名空间 zouzou 下 的 version=2.0 的标签
kubectl get pod --show-labels -l version=2.0 -n zouzou


通过配置的方式创建标签


上面我们通过 yaml 文件的方式创建的 pod,但没有在 yaml 里面写上标签,只是使用命令创建标签,我们可以在 yaml 里直接写上标签,pod-nginx.yaml 如下

apiVersion: v1
kind: Pod
metadata:
  name: nginx2 # name 不能重复
  namespace: zouzou  # namespace 要存在
  labels:  # 下面有两个标签
    version: "3.0"
    env: "test"
spec:
  containers:
  - image: nginx:1.13
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

创建

kubectl apply -f pod-nginx.yaml

这样我们就可以在创建 yaml 文件的时候配置好标签


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
数据采集 存储 人工智能
TripoSR开源!从单个图像快速生成 3D 对象!(附魔搭社区推理实战教程)
近期,VAST团队和Stability AI团队合作发布了TripoSR,可在一秒内从单个图像生成高质量3D对象。
|
10月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
存储 前端开发 API
DDD领域驱动设计实战-分层架构
DDD分层架构通过明确各层职责及交互规则,有效降低了层间依赖。其基本原则是每层仅与下方层耦合,分为严格和松散两种形式。架构演进包括传统四层架构与改良版四层架构,后者采用依赖反转设计原则优化基础设施层位置。各层职责分明:用户接口层处理显示与请求;应用层负责服务编排与组合;领域层实现业务逻辑;基础层提供技术基础服务。通过合理设计聚合与依赖关系,DDD支持微服务架构灵活演进,提升系统适应性和可维护性。
|
存储 监控 安全
OSS如何保证数据安全?
【7月更文挑战第19天】OSS如何保证数据安全?
749 7
|
机器学习/深度学习 算法 机器人
机器人控制中常见的算法总结
机器人控制中常见的算法总结
770 0
|
运维 测试技术 持续交付
大型互联网团队的FT化
大型互联网团队的FT化
170 0
|
编译器 C++ 计算机视觉
error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“
error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“
1063 0
|
Kubernetes 网络协议 应用服务中间件
k8s--Ingress 介绍、ingress-nginx(二)
k8s--Ingress 介绍、ingress-nginx
|
Kubernetes 负载均衡 前端开发
【K8S系列】第十二讲:Service进阶
【K8S系列】第十二讲:Service进阶
176 0