
标签和选择算符
标签(Labels)是附加到Kubernetes对象(比如Pods)上的键值对。标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。标签可以用于组织和选择对象的子集。标签可以在创建时附加到对象,随后可以随时添加和修改。每个对象都可以定义一组键/值标签。每个键对于给定对象必须是唯一的。
"metadata": {"labels": {"key1" : "value1","key2" : "value2"}}
标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。应使用注解记录非识别信息。
动机
标签使用户能够以松散耦合的方式将他们自己的组织结构映射到系统对象,而无需客户端存储这些映射。
服务部署和批处理流水线通常是多维实体(例如,多个分区或部署、多个发行序列、多个层,每层多个微服务)。管理通常需要交叉操作,这打破了严格的层次表示的封装,特别是由基础设施而不是用户确定的严格的层次结构。
有一些常用标签的例子;你可以任意制定自己的约定。请记住,标签的Key对于给定对象必须是唯一的。
语法和字符集
标签是键值对。有效的标签键有两个段:可选的前缀和名称,用斜杠()分隔。名称段是必需的,必须小于等于63个字符,以字母数字字符(
[a-z0-9A-Z]
)开头和结尾,带有破折号(),下划线(),点()和之间的字母数字。前缀是可选的。如果指定,前缀必须是DNS子域:由点()分隔的一系列DNS标签,总共不超过253个字符,后跟斜杠()。
如果省略前缀,则假定标签键对用户是私有的。向最终用户对象添加标签的自动系统组件(例如
kube-scheduler
、
kube-Controller-manager
、
kube-apiServer
、或其他第三方自动化工具)必须指定前缀。
kubernetes.io/
和前缀是为Kubernetes核心组件保留的。
有效标签值:
标签选择算符
与名称和UID不同,标签不支持唯一性。通常,我们希望许多对象携带相同的标签。
通过标签选择算符,客户端/用户可以识别一组对象。标签选择算符是Kubernetes中的核心分组原语。
API目前支持两种类型的选择算符:基于等值的和基于集合的。标签选择算符可以由逗号分隔的多个需求组成。在多个需求的情况下,必须满足所有要求,因此逗号分隔符充当逻辑与()运算符。
空标签选择算符或者未指定的选择算符的语义取决于上下文,支持使用选择算符的API类别应该将算符的合法性和含义用文档记录下来。
基于等值的需求
基于等值或基于不等值的需求允许按标签键和值进行过滤。匹配对象必须满足所有指定的标签约束,尽管它们也可能具有其他标签。可接受的运算符有、和三种。前两个表示相等(并且只是同义词),而后者表示不相等。例如:
environment = productiontier != frontend
前者选择所有资源,其键名等于
environment
,值等于
production
。后者选择所有资源,其键名等于,值不同于,所有资源都没有带有键的标签。可以使用逗号运算符来过滤
production
环境中的非层资源:
environment=production,tier!=frontend
。
基于等值的标签要求的一种使用场景是Pod要指定节点选择标准。例如,下面的示例Pod选择带有标签“
accelerator=nvidia-tesla-p100
”。
apiVersion: v1kind: Podmetadata:name: cuda-testspec:containers:- name: cuda-testimage: "k8s.gcr.io/cuda-vector-add:v0.1"resources:limits:nvidia.com/gpu: 1nodeSelector:accelerator: nvidia-tesla-p100
基于集合的需求
基于集合的标签需求允许你通过一组值来过滤键。支持三种操作符:、和(只可以用在键标识符上)。例如:
environment in (production, qa)tier notin (frontend, backend)partition!partition
类似地,逗号分隔符充当与运算符。因此,使用键(无论为何值)和
environment
不同于来过滤资源可以使用
partition,environmentnotin(qa)
来实现。
基于集合的标签选择算符是相等标签选择算符的一般形式,因为
environment=production
等同于
environmentin(production)
;和也是类似的。
基于集合的要求可以与基于相等的要求混合使用。例如:
partitionin(customerA,customerB),environment!=qa
。
LIST和WATCH过滤
LIST和WATCH操作可以使用查询参数指定标签选择算符过滤一组对象。两种需求都是允许的。(这里显示的是它们出现在URL查询字符串中)
两种标签选择算符都可以通过REST客户端用于list或者watch资源。例如,使用定位,可以使用基于等值的标签选择算符可以这么写:
kubectl get pods -l environment=production,tier=frontend
或者使用基于集合的需求:
kubectl get pods -l 'environment in (production),tier in (frontend)'
正如刚才提到的,基于集合的需求更具有表达力。例如,它们可以实现值的或操作:
kubectl get pods -l 'environment in (production, qa)'
或者通过exists运算符限制不匹配:
kubectl get pods -l 'environment,environment notin (frontend)'
在API对象中设置引用
一些Kubernetes对象,例如和
replicationcontrollers
,也使用了标签选择算符去指定了其他资源的集合,例如pods。
Service和ReplicationController
一个指向的一组Pods是由标签选择算符定义的。同样,一个
ReplicationController
应该管理的pods的数量也是由标签选择算符定义的。
两个对象的标签选择算符都是在或者文件中使用映射定义的,并且只支持基于等值需求的选择算符:
"selector": {"component" : "redis",}
或者
selector:component: redis
这个选择算符(分别在或者格式中)等价于
component=redis
或
componentin(redis)
。
支持基于集合需求的资源
比较新的资源,例如、
Deployment
、
ReplicaSet
和,也支持基于集合的需求。
selector:matchLabels:component: redismatchExpressions:- {key: tier, operator: In, values: [cache]}- {key: environment, operator: NotIn, values: [dev]}
matchLabels
是由
{key,value}
对组成的映射。
matchLabels
映射中的单个
{key,value}
等同于
matchExpressions
的元素,其字段为“key”,为“In”,而数组仅包含“value”。
matchExpressions
是Pod选择算符需求的列表。有效的运算符包括、、和
DoesNotExist
。在和的情况下,设置的值必须是非空的。来自
matchLabels
和
matchExpressions
的所有要求都按逻辑与的关系组合到一起—它们必须都满足才能匹配。
选择节点集
通过标签进行选择的一个用例是确定节点集,方便Pod调度。
凡人修仙传韩立所有宝物一览要最全的
凡人修仙传韩立所有宝物为掌天瓶(后因吸收韩立时间本源法则而破碎,瓶灵得已解放)、青竹蜂云剑、风雷翅、破灭法目、元合五极山、玄天斩灵剑(飞升时硬抗天劫破碎,后被玄天葫芦所吞噬)、重水真轮、玄天葫芦、花枝洞天、御峰镇神符、噬魂灯、岁月神灯、钧天日晷。 扩展资料:《凡人修仙传》讲述了一个普通的山村穷小子韩立,偶然之下,跨入到一个江湖小门派,成了一名记名弟子。 他以这样身份,如何在门派中立足,如何以平庸的资质进入到修仙者的行列,从而笑傲三界之中!又如何以平庸的资质,进入到修仙者的行列?修仙世界尔虞我诈、弱肉强食,大道漫漫,仙途凶险,看普通山村少年韩立如何艰难修仙。 虽然资质平庸,但依靠自身努力和合理算计修炼成仙。 修仙的过程极为不易,不仅需要克服自身的种种缺陷,同时还要接受敌人和天地的考验,经过重重“跋涉”才能得道。
出自哪个古文
沧海一声笑的主题曲 黄沾作词作曲 1990 金马奖最佳电影主题曲奖 1991 第十届香港电影金像奖最佳主题曲奖 国语版是任贤齐唱的 ```
发表评论