一、标签与标签选择器

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. random、json、pickle、hashlib、hmac、shutil、shevle模块

    今日内容: 1. random 模块 2. json模块 3. pickle 模块 4.hashlib 模块 5. hmac 模块 6. shutil 模块 7. shelve 模块 1. rando ...

  2. OpenStack组件——Neutron网络服务(1)

    1.neutron 介绍: 1)Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要 ...

  3. 【Linux开发】linux设备驱动归纳总结(六):1.中断的实现

    linux设备驱动归纳总结(六):1.中断的实现 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  4. 从零开始,SpreadJS新人学习笔记【第5周】

    复制粘贴.单元格格式和单元格类型 本周,让我们一起来学习SpreadJS 的复制粘贴.单元格格式和单元格类型,希望我的学习笔记能够帮助你们,从零开始学习 SpreadJS,并逐步精通. 在此前的学习笔 ...

  5. Linux在线安装MongoDB

    Mongo官网安装地址: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 以MongoDB3.4为例 1.创建 ...

  6. Type类的使用

    Type类的使用(类反射)通过类获得Type: Type t = typeof(Person)通过实例对象获得类的Type: Type t = p.GetType()获取Type的方法:MethodI ...

  7. centos终端显示字母重叠

    在使用VMware虚拟机安装linux之后,之后调整了中文显示,但是后来不知道怎么回事在终端显示的字母很多都是重叠的. 在百度上也找到很多的解决办法 eg: 终端键入:vi /etc/fonts/co ...

  8. python_0基础开始_day08

    第八节 1,文件操作 文件操作目的: 持久化,永久存储 (数据库之前 -- 文件操作就是代替数据库) 读 1,找到文件位 2,双击打开 3,进行一些操作 4,关闭文件 open() 打开,通过pyth ...

  9. HTML(上)

    目录 HTML(上) 浏览器 HTML 什么是HTML HTML的作用 编写HTML的规范 HTML结构 HTML常用标签 HTML标签速记 HTML(上) 浏览器 浏览器也是一个客户端 #这是一个服 ...

  10. 剑指offer-数字在排序数组中出现的次数-数组-python

    题目描述 统计一个数字在排序数组中出现的次数.   python 内置函数 count()一行就能搞定   解题思路 二分查找到给定的数字及其坐标.以该坐标为中点,向前向后找到这个数字的 始 – 终 ...