一、标签与标签选择器

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. 协程,纤程(Fiber),或者绿色线程(GreenThread)

    纤程(Fiber),或者绿色线程(GreenThread) 面试官:你知道协程吗? 你:订机票的那个吗,我常用. 面试官:行,你先回去吧,到时候电话联系 ........ 很尴尬,但是事实是,很大一部 ...

  2. (转)批量 kill mysql 中运行时间长的sql

    mysql> show full processlist; +--------+------+---------------------+------+---------+------+---- ...

  3. HDU 1260 Tickets (动态规划)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  4. JCC指令

    0.JMP1.JE, JZ 结果为零则跳转(相等时跳转) ZF=12.JNE, JNZ 结果不为零则跳转(不相等时跳转) ZF=03.JS   结果为负则跳转   SF=14.JNS   结果为非负则 ...

  5. [转帖]linux中systemctl详细理解及常用命令

    linux中systemctl详细理解及常用命令 2019年06月28日 16:16:52 思维的深度 阅读数 30 https://blog.csdn.net/skh2015java/article ...

  6. Redis缓存击穿

    缓存击穿 缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞. 比如在做 ...

  7. [Codeforces 266E]More Queries to Array...(线段树+二项式定理)

    [Codeforces 266E]More Queries to Array...(线段树+二项式定理) 题面 维护一个长度为\(n\)的序列\(a\),\(m\)个操作 区间赋值为\(x\) 查询\ ...

  8. Python 入门 之 双下方法

    Python 入门 之 双下方法 1.双下方法 ​ 定义:双下方法是特殊方法,它是解释器提供的 由双下划线加方法名加双下划线 方法名的具有特殊意义的方法,双下方法主要是python源码程序员使用的,我 ...

  9. O009、KVM 网络虚拟化基础

    参考https://www.cnblogs.com/CloudMan6/p/5289590.html   网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大.   但因为网络是虚拟化中非常重要的资源, ...

  10. Vue报错:Property or method "XXX" is not defined on the instance but referenced during render. Make sure that this property is reactive...

    在Vue中定义方法或者属性时,因为粗心疏忽可以能会报该错误 [Vue warn]: Property or method "search" is not defined on th ...