一、标签与标签选择器

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的Pod状态和生命周期管理

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

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

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

  5. k8s的pod生命周期

    pod的生命周期: 1.init container 2.main contianer (1) post start hook :容器启动后做什么操作(可以命令查看kubectl explain po ...

  6. k8s如何管理Pod(rc、rs、deployment)

    是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod).在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理(关于Pod,大家可以参考第十期的分享“ ...

  7. k8s资源对象及API群组

    REST是representational state transfer的缩写,意为“表征状态转移”,它是一种程序架构风格,基本元素为资源(resource).表征(representation)和行 ...

  8. k8s学习笔记之五:Pod资源清单spec字段常用字段及含义

    第一章.前言 在上一篇博客中,我们大致简述了一般情况下资源清单的格式,以及如何获得清单配置的命令帮助,下面我们再讲解下清单中spec字段中比较常见的字段及其含义 第二章.常用字段讲解 spec.con ...

  9. k8s的pod或者ns资源一直terminating删除办法

    假设你要删掉的ns资源,发现一直删不了处于terminating状态 1.首先试一下先把这个ns的所有pod都删掉kubectl delete pod --all -n <terminating ...

随机推荐

  1. Centos下安装jdk

    下载 由于oracle官网下载jdk需要网站验证,所以不能使用wget直接下载. 一种比较快的方式是在本地下载tar.gz或者rpm,之后上传到Linux. tar.gz格式只需解压,放到指定目录下, ...

  2. 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

    来自:编程随想   >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...

  3. Oracle数据库管理员经常使用的表和视图

    ◆dba_开头 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数据库对象信息 dba_tablespaces 数据 ...

  4. GDB学习之道:GDB调试精粹及使用实例

    一:列文件清单  1. List  (gdb) list line1,line2 二:执行程序  要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出 ...

  5. [HEOI2014]平衡(整数划分数)

    下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”. 这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子 ...

  6. 配置虚拟机 Linux 静态IP

    一.查看IP.子网掩码.网关 虚拟网络编辑器 NAT中获取 取消勾选DHCP 二.查看DNS 虚拟机DNS与Windows设置相同 三.配置linux [root@lhs800 ~]# vi /etc ...

  7. postgresql-int,bigint,numeric效率测试

    在postgresql9.5的时候做过一个测试就是sum()的效率最终的测试结果是sum(int)>sum(numeric)>sum(bigint)当时比较诧异为啥sum(bigint)效 ...

  8. c3p0封装

    配置文件 <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <defaul ...

  9. 让我们来一起学习OC吧

    在本分类中的接下来的将翻译http://rypress.com/tutorials/objective-c/index 通过每一章节的翻译,使得自己的OC基础扎实并分享给大家.

  10. hibernate课程 初探一对多映射1-1 课程简介

    hibernate 常见映射类型 one-to-many many-to-one one-to-one many-to-many