一、标签与标签选择器

1、标签是k8s极具特色的功能之一,它能够附加于k8s的任何资源对象之上。简单来说,标签就是键值类型的数据,它们可于资源创建时直接指定,也可随时按需添加于活动对象中,而后即可由标签选择器进行匹配度检查从而完成资源挑选。一个对象可拥有不止一个标签,同一个标签也可被添加至多个资源之上。实践中,可为资源附加多个不同维度的标签以实现灵活的资源分组管理功能,例如:

版本标签:release:stable、release:canary、release、beta

环境标签:environment:dev、environment:qa、environment:production

应用标签:app:ui、app:as、app:sc

架构层级标签:tier:frontend、tier:backend、tier:cache

分区标签:partition:customerA、partition:customerB

品控级别标签:track:daily、track:weekly

标签中的键名通常由键前缀和键名组成,其中键前缀可选,键名之多能使用63各字符,可使用字母、数字、连接号、下划线、点号等字符,并且只能以字母或数字开头。键前缀必须为DNS子域名格式,且不能超过253个字符。省略前缀时,键将被视为用户的私有数据,不过由k8s系统组件或第三方组件自动为用户资源添加的键必须使用键前缀,而kubenetes.io/前缀则预留给kubernetes的核心组件使用。

标签中的键值必须不能多余63个字符,要么为空,要么是以字母或数字开头及结尾,且中间仅使用了字母、数字、连接号、下划线或点号等字符数据。

2、管理资源标签

创建资源时,可直接在其metadata中嵌套使用label字段以定义要附加的标签项。可使用命令“kubectl get pods --show-labels”命令进行额外显示对象的标签信息,标签较多时,在“kubectl get pods -L key1,key2”命令指定显示有着特定键的标签信息。使用kubectl label命令可以直接管理活动对象的标签,以按需进行添加或修改等操作,如“kubectl label pods/pod-example env=qa”。不过,对于已经附带了指定键名的标签,使用label命令为其设定新的键值时需要为命令同时使用--overwrite选项以强制覆盖原有的键值。

3、标签选择器

标签选择器用于表达标签的查询条件或选择标准,k8s api目前支持两个选择器:基于等值关系(equality-based)以及基于集合关系(set-based)。例如,env=production和env!=qa是基于等值关系的选择器,而tier in (frontend,backend)则是基于集合关系的选择器。另外,使用标签选择器时还将遵循以下逻辑:

同时指定的多个选择器之间的逻辑关系为“and”操作

使用空值的标签选择器意味着每个资源对象都被选中

空的标签选择器将无法选出任何资源

基于等值关系的标签选择器的可用操作符有“==”、“=”和“!=”三种,其中前两种表示等值关系,最后一个表示不等关系。使用"kubectl get"命令的“-l”选项能够指定使用标签选择器,例如:“kubectl get pods -l ‘env!=qa,tier=frontend’ -L env,tier”。

基于集合关系的标签选择器支持in、notin和exists三种操作符,他们的使用格式及意义如下:

KEY in (value1,value2,...):指定的键名的值存在于给定的列表中即满足条件

KEY notin (VALUE1,VALUE2,...):指定的键名的值不存在于给定的列表中即满足条件

KEY:所有存在此键名标签的资源

!KEY:所有不存在此键名标签的资源

例如,显示标签键名env的值为qa或dev的所有pod对象:kubectl get pods -l "env in (qa,dev)" -L env

再如,列出键名env的值为dev或qa,且不存在键名为tier的标签的所有pod对象:kubectl get pods -l 'env in (qa,dev), !tier' -L env,tier

此外,k8s的诸多资源对象必须以标签选择器的方式关联到pod资源对象,它们在spec字段中嵌套使用嵌套的selector字段,通过matchLabels来指定标签选择器,有的甚至还支持使用matchExpressions构造复杂的标签选择机制。

matchLabels:通过直接给定键值对来指定标签选择器

matchExpresstions:基于表达式指定的标签选择器列表。

4、pod节点选择器nodeSelector

pod节点选择器是标签选择器的一种应用,它能够让pod对象基于集群中工作节点的标签来挑选倾向运行的目标节点。

kubernetes的kube-scheduler守护进程负责在各工作节点中基于系统资源的可用性等标签挑选一个来运行待创建的pod对象,默认的调度器是default-scheduler。k8s可将所有工作节点上的各系统资源抽象成资源池统一分配使用,因此用户无须关系pod对象的具体运行位置也能良好工作。pod对象的spec.nodeSelector可用于定义节点标签选择器,用户事先为特定部分的node资源对象设定好标签,而后配置pod对象通过节点标签选择器进行匹配检测,从而完成节点亲和性调度。

二、资源注解

注解也是键值类型的数据,不过它不能用于标签及挑选k8s对象,仅可用于为资源提供元数据信息,另外,注解中的元数据不受字符数量的限制,它可大可小,可以为结构化或非结构化形式,也支持使用在标签中禁止使用的其他字符。

资源注解可由用户手动添加,也可由工具程序自动附加并使用他们。在k8s的新版本(alpha或beta阶段)中为某资源引入新字段时,常以注解的方式提供,以避免其增删等变动对用户带来困扰,一旦确定支持使用它们,这些新增字段就将再引入到资源中并淘汰相关注解。另外,为资源添加注解也可让其他用户快速了解资源相关信息。

1、查看资源注解

使用"kubectl get -o yaml"和“kubectl describe”命令均能显示资源的注解信息。

2、管理资源注解

annotation可在资源创建时使用metadata.annotations字段指定,也可随时按需在活动的资源上使用“kubectl annotate”命令进行附加,如:“kubectl annotate pods pod-example ilinux.io/created-by='cluster admin'"

k8s管理pod资源对象(下)的更多相关文章

  1. k8s管理pod资源对象(上)

    一.容器于pod资源对象 现代的容器技术被设计用来运行单个进程时,该进程在容器中pid名称空间中的进程号为1,可直接接收并处理信号,于是,在此进程终止时,容器即终止退出.若要在一个容器中运行多个进程, ...

  2. k8s管理存储资源

    1. Kubernetes 如何管理存储资源 理解volume 首先我们学习 Volume,以及 Kubernetes 如何通过 Volume 为集群中的容器提供存储:然后我们会实践几种常用的 Vol ...

  3. k8s 管理存储资源(10)

    一.Kubernetes 如何管理存储资源 理解Volume 我们经常会说:容器和 Pod 是短暂的. 其含义是它们的生命周期可能很短,会被频繁地销毁和创建.容器销毁时,保存在容器内部文件系统中的数据 ...

  4. K8s QoS Pod资源服务质量控制

    Kubernetes 中如果一个 Node 节点上的 Pod 占用资源过多并且不断飙升导致 Node 节点资源不足,可能会导致为了保证节点可用,将容器被杀掉.在遇见这种情况时候,我们希望先杀掉那些不太 ...

  5. kubernetes之常用核心资源对象

    部门产品线本身是做DEVOPS平台,最近部署架构也在往K8S上靠了,不得不学一下K8S.自己搭建了K8S集群与harbor仓库来学习. 1.kubernetes之常用核心资源对象 1.1.K8s服务部 ...

  6. k8s 中 Pod 的控制器

    k8s 中 Pod 的控制器 前言 Replication Controller ReplicaSet Deployment 更新 Deployment 回滚 deployment StatefulS ...

  7. k8s的Pod状态和生命周期管理

    Pod状态和生命周期管理   一.什么是Pod? 二.Pod中如何管理多个容器? 三.使用Pod 四.Pod的持久性和终止 五.Pause容器 六.init容器 七.Pod的生命周期 (1)Pod p ...

  8. 容器编排系统k8s之Service资源

    前文我们了解了k8s上的DemonSet.Job和CronJob控制器的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14157306.html:今 ...

  9. kubernetes 基本概念和资源对象汇总

    kubernetes 基本概念和知识点脑图 基本概念 kubernetes 中的绝大部分概念都抽象成kubernets管理的资源对象,主要有以下类别: Master : Master节点是kubern ...

随机推荐

  1. TensorFlow实战第四课(tensorboard数据可视化)

    tensorboard可视化工具 tensorboard是tensorflow的可视化工具,通过这个工具我们可以很清楚的看到整个神经网络的结构及框架. 通过之前展示的代码,我们进行修改从而展示其神经网 ...

  2. postman Tests断言

    摘要:关于postman的断言方法很多,在网上随便搜寻下,能搜出一大推,什么牛鬼蛇神都有,让人眼花缭乱..甚至在应用时出现错误.Test断言都是根据js规则来写的,对于我这种不懂js语言的来说确实不友 ...

  3. 前端 api 请求缓存方案

    参考链接:https://blog.csdn.net/zhuoganliwanjin/article/details/89598753#commentBox

  4. [转帖]浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元

    浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元 https://t.cj.sina.com.cn/articles/view/3172142827/bd130eeb01 ...

  5. 关于8086中的jmp near ptr原理

    在8086汇编语言中.jmp 0x7c41 自己跳转到自己的位置,是一个死循环代码.对应的机器指令是e9fdffe9是跳转  fdff其实应该是fffd 也就是-3的补码. 执行到e9fdff相当于把 ...

  6. servlet_cdi自动注入

    @WebServlet("/cdiservlet")//url映射,即@WebServlet告诉容器,如果请求的URL是"/cdiservlet",则由NewS ...

  7. 使用Visual Studio 2019--调试汇编32位代码的详细步骤

    声明:本文使用32位masm,代码与16位,64位不同 ------------------------------------------------------------------------ ...

  8. 谷歌官方颜色库 MaterialDesignColor

    谷歌官方颜色库 MaterialDesignColor

  9. docker-文件系统出错处理

    Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2 2018年03月17日 22: ...

  10. Object 对象(对象的分类、属性(属性名和属性值)、基本数据类型与引用数据类型区别)

    Object——引用数据类型 基本数据类型的不足之处:基本数据类型是单一的值,不能表现出值与值之间的所属关系 object分为内建对象.宿主对象和自定义对象 a 内建对象:ES标准中定义的对象,在任何 ...