k8s Label 2

在 k8s 中,我们会轻轻松松的部署几十上百个微服务,这些微服务的版本,副本数的不同进而会带出更多的 pod

这么多的 pod ,如何才能高效的将他们组织起来的,如果组织不好便会让管理微服务变得混乱不堪,杂乱无章

因此,就有了标签 Label

标签 Label

标签是一种简单的却功能强大的 K8S 的其中一个特性,可以组织 K8S 中的资源,包括 pod 资源

标签是可以被附加到资源的任意键值对的,用来选择具有该确切标签的资源

也就是说,咱们的标签的 key 在资源内部是任意的,可以自己定义,只要是资源内唯一就可以

举个例子

我们可以将上述混乱的多个 pod,定义 2 个标签来进行组织

  • app

标识这个 pod 是属于什么应用

  • rel

标识这个 pod 中运行的应用版本,例如可以设置如下版本

    • stable
    • beta
    • canary

可以这样来组织

通过上述标签的方式来组织微服务,我们可以很轻易的就可以通过 pod 标签来查看我们期望看到的 pod 状态

写个 demo

就用之前的 xmt-kubia,yaml 文件改改,命名为 xmt-kubia-labels.yaml

加上 2 个自定义的标签:

  • xmt_create: auto
  • rel: stable
apiVersion: v1
kind: Pod
metadata:name: xmt-kubia-labelslabels:xmt_create: autorel: stable
spec:containers:- image: xiaomotong888/xmtkubianame: xmtkubia-labelsports:- containerPort: 8080protocol: TCP

通过 kubectl create -f xmt-kubia-labels.yaml 将 pod 运行起来

查看实际的标签情况

查看标签

kubectl get pod --show-labels

查看指定的标签

kubectl get po -L rel,xmt_create

修改 pod 的标签

kubectl label pod xmt-kubia-labels key=value

修改已有标签

kubectl label pod xmt-kubia-labels rel=dev --overwrite

标签选择器

就通过上面的案例,发现标签好像用处也不大,其实标签是要和标签选择器结合起来用的

标签选择器可以让我们根据特定的标签查出对应的 pod 集合,并且可以对这些 pod 集合做操作

标签选择器就是一种准则,用于过滤包含具有特定值的特定标签的资源,筛选条件如下:

  • 包含或者不包含使用特定键的标签
  • 包含具有特定键值的标签
  • 包含具有特定键值的标签,但是对应的值和我们指定的不同

使用标签选择器

列出 pod

kubectl get po -l key=value

kubectl get po -l rel=dev

列出包含某个标签的 pod

kubectl get po -l rel

列出不包含某个标签的 pod,需要使用单引号将条件包起来

kubectl get po -l '!rel'

使用感叹号,这个条件可以写成 !rel 表示不包含这个 rel 标签,因为 bash shell 会解析感叹号,所以我们使用 ! ,可以使用单引号 ‘’ 来进行包含和处理

也可以是 在 -l 后面添加 key=value

或者 key != value,

使用 inkubectl get po -l 'rel in (dev,prod)'

使用 notinkubectl get po -l 'rel notin (dev,prod)'

标签选择器中使用多个条件

kubectl get pod -l 条件1,条件2...

标签选择器可以帮助我们列出筛选后的 pod,我们还可以对于一个子集中的所有 pod 都执行某一类操作,例如删除某个子集内的所有 pod ,就可以是这样写kubectl delete pod -l xx=xx

标签可以用于工作节点的分类

当我们创建 pod 的时候,会有这样的需求,创建的某些 pod 对于 CPU 的计算性能要求比较高,那么我就需要将这类 pod 部署到 性能好的节点上面去,这样的话其实是将 程序和基础架构强耦合了

但是对于 K8S 的思想就不对等了,K8S 中的思想是应用程序隐藏实际的基础架构,在 K8S 中,创建出来的 pod 都是随机分配到不同的 节点上的,

那么,我们需要实现如上的需求,我们可以通过 标签来完成

给 node 加上标签

前面我们说过标签不仅仅是可以加在 pod 上面,实际上可以加上 K8S 中的所有资源上

例如,我们可以给我们的 node 加上一个标签,如: gpu=true,就指定这个 node 的 gpu 比较好,暂时使用 minikube 来演示

将 pod 调度到指定的 node 上面

继续上面的 demo,新建 xmt-kubia-gpu.yaml 文件,在 Spec 下面添加一个 node 选择器, nodeSlector指定选择 gpu: ”true” 的 node

使用kubectl create -f xmt-kubia-gpu.yaml 即可将创建的 pod 放到 标签为gpu: ”true” 的 node 上进行调度

我们应该通过标签选择器考虑符合特定标准的逻辑节点组 来调度 pod

顺带说一下:

我们若是真想指定 pod 被调度到一个指定的节点上也是可以做的,我们可以通过 kubectl get node --show-labels 查看 node 的标签

image-20211212172416354

能够看到有一个键为 kubernetes.io/hostname 的标签,对应的值是该节点的主机名,因此我们可以利用这个标签来将我们的 pod 调度到指定的节点上面

这种做法会有一个风险,若我们指定的这个节点处于离线状态,那么我们创建的 pod 是不可调度的,这种方式技术上可行,但是不建议这么玩

注解

注解 annotations

注解和标签类似,但是和标签不同,注解不能像标签一个用于对对象的分组

注解能够容纳更多的信息,帮助我们对于资源的作用理解的更加顺畅,注解也是一个键值对的形式

添加和修改注解

kubectl annotate pod podName 具体的键值对

命名空间

命名空间 namespace

不同命名空间内可以有相同的资源名

查看命名空间

kubectl get ns

查看指定命名空间的 pod

kubectl get pod --namespace xxx

创建一个命名空间

  • 使用命令的方式

kubectl create namespace xxx

  • 使用 yaml 的方式

编写 yaml 文件,使用 kubectl create 创建即可

apiVersion: v1
kind: Namespace
metadata:name: test_ns

删除命名空间

kubectl delete ns xxx

删除命名空间的 pod,但是保留 命名空间

kubectl delete pod --all

如果 命名空间中有 RC,那么删除的 pod,还会被重新创建出来,RC 会去检测 pod 的副本数量,如果小于设定的副本数量,那么就会动态的创建

删除命名空间中的所有资源

kubectl delete all --all

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】

VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】 介绍修改注册表添加右键打开文件属性修改注册表添加右键打开文件夹属性修改注册表添加右键空白区域属性 介绍 鼠标右击文件或者文件夹,可直接用VSCode打开,非常方便。但如果我们在安装VSCo…

工厂方法模式详解

文章目录 前言一、工厂方法模式的定义二、举个例子三、工厂方法模式的缺点总结 前言 工厂方法模式是应用比较广泛的一种设计模式,它相对于简单工厂模式进行了一些优化,如果再增加一个具体产品不用修改代码,也不会违反开闭原则。 一、工厂方法…

暴雪娱乐遭DDoS攻击,《暗黑破坏神》等多款游戏受影响

6月25日上午11点,有游戏玩家反应Blizzard Battle.net无法登入、连线缓慢及网站问题,暴雪也证实其电玩平台遭到DDoS攻击。 暴雪娱乐的 Battle.net在线服务遭到分布式拒绝服务(DDoS)攻击,导致玩家无法正常登录游戏或游戏…

VSCode下载安装(保姆级--一步到胃)

前言 Visual Studio Code(简称“VSCode” )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器,可在桌面上运行,并且…

SAP CAP篇十:理解Fiori UI的Annoation定义

本文目录 本系列此前的文章官方文档和基础概念SAP CAP对Fiori UI的支持package.json的新增内容Annotation定义List Page 生成的Edmx文件 对应代码及branch 本系列此前的文章 SAP CAP篇一: 快速创建一个Service,基于Java的实现 SAP CAP篇二:为Service加上…

TypeScript 学习笔记(七):条件类型

条件类型 TS中的条件类型就是在类型中添加条件分支,以支持更加灵活的泛型,满足更多的使用场景。内置条件类型是TS内部封装好的一些类型处理,使用起来更加便利。 一、基本用法 当T类型可以赋值给U类型时,则返回X类型&#xff0c…

小程序首页轮播图设计

效果图 微信小程序的数据详解 indicator-dots:是否显示面板指示点【默认false 】 indicator-color:指示点颜色【默认rgba(0, 0, 0, .3)】 indicator-active-color:当前选中的指示点颜色【默认#000000】 autoplay:是否自动切换…

Redis的过期策略以及内存淘汰机制

目录 一、过期策略1.1、定时删除1.1.1、过期1.1.2、过期的 key 集合1.1.3、定时扫描策略1.1.4、 Redis 中所有的 key 在同一时间过期了,会出现怎样的结果1.1.5、从库的过期策略 1.2、惰性删除1.3、定时删除和惰性删除的总结 二、缓存淘汰算法2.1、缓存淘汰算法概述2…

ngsoc使用指南

和威胁告警差不多。 ngsoc是以资产为核心,以安全事件为管理的关键流程,建立一套威胁检测,相应,预测,和持续监控分析,一体化的监控与相应平台。 和天眼的区别:会把天眼的告警,其他安…

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 其他增强功能

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了,此版本包含了Ribbon(功能区)自定义…

Ansible自动化运维工具的认识

目录 一、Ansible概述 二、Ansible特点 三、Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 四、Ansible的搭建 1、实验环境 2、环境准备 Ansible: 3、创建ssh免密交互登录 client端环境准备 五、Ansible配置 六、Ansible命令 1、ansible 实…

【软件测试】web测试bug定位思路总结,“我“不再背锅...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 需要掌握的知识 …

ASUS华硕ROG幻14 2021款GA401QM原厂Win10系统工厂模式带ASUS Recovery恢复功能

自带恢复分区、所有驱动、出厂主题壁纸LOGO、Office办公软件、奥创控制中心等预装程序 所需要工具:16G或以上的U盘(非必需) 文件格式:HDI,SWP,OFS,EDN,KIT,TLK多个底包 文件大小:11.34GB 注:恢复时会清空电脑上所有盘的数据&…

系列七、VMware中的CentOS服务不息屏

一、场景 VMware中安装好CentOS7等虚拟机后,过一段时间会自动息屏,这个时候如果想执行操作,需要重新输入 用户名/密码,体验感不好。 二、解决方法 应用程序》系统工具》设置》Privacy》锁屏》自动锁屏(关闭&#xff0…

SpringBoot 统一功能的处理

SpringBoot 统一功能的处理 文章目录 SpringBoot 统一功能的处理1. 用户登录权限校验1.1 最初用户登录验证1.2 Spring AOP 统一用户登录验证的问题1.3 SpringAOP 拦截器1.3.1 实现自定义拦截器1.3.2 将自定义拦截器加入到系统配置 1.4 拦截器实现原理1.4.1 实现流程图1.4.2 实现…

Java 串口通讯 Demo

为什么写这篇文章 之前职业生涯中遇到的都是通过tcp协议与其他设备进行通讯,而这个是通过串口与其他设备进行通讯,意识到这里是承重板的连接,但实际上比如拉力、压力等模拟信号转换成数字信号的设备应该是有相当一大部分是通过这种方式通讯的…

Redis数据结构 — List

目录 链表结构设计 ​编辑链表节点结构设计 链表的优势与缺陷 Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的,所以 Redis 自己设计了一个链表数据结构。 链表结构设计 typedef struct list {//链表头节点listNode *head;//链表…

软件测试人员的基本功包括哪些?

什么是基本功?百度到的结果是:从事某种工作所必需的基本的知识和技能。 推理1:“基本”二字,意味着基本功必定是来源测试工作的基本流程。 推理2:“必须”二字,就意味者无论你是高级的测试开发,…

spring.profiles的使用详解

本文来说下spring.profiles.active和spring.profiles.include的使用与区别 文章目录 业务场景spring.profiles.active属性启动时指定 spring.profiles.include属性配置方法配置位置配置区别 用示例来使用和区分测试一测试二测试三 编写程序查看激活的yml文件本文小结 业务场景 …

TypeScript 学习笔记 环境安装-类型注解-语法细节-类-接口-泛型

文章目录 TypeScript 学习笔记概述TypeScript 开发环境搭建 类型注解类型推断 数据类型JS的7个原始类型Array数组object、Object 和 {}可选属性 ? 和 可选链运算符?. function函数TS类型: any类型 | unknow类型TS类型: void类型TS类型:never类型 (几乎…