Kubernetes--标签选择器(标签)
标签选择器用于表达标签的查询条件或选择标准,Kubernetes API目前支持两个选择器:基于等值关系(equality-based)以及基于集合关系 (set-based)。例如,env=production和env!=qa是基于等值关系的选择器,而tier in(frontend,backend)则是基于集合关系的选择器。另外,使用标签选择器时还将遵循以下逻辑。
(1)同时指定的多个选择器之间的逻辑关系为 “与” 操作。
(2)使用空值的标签选择器意味着每个资源对象都将被选中。
(3)空的标签选择器将无法选出任何资源。
基于等值关系的标签选择器的可用操作符有 “=” “==” 和 “!=” 三种,其中前两个意义相同,都表示 “等值” 关系,最后一个表示 “不等” 关系。“kubectl get” 命令的 “-l” 选项能够指定使用标签选择器,例如显示键名env的值不为qa的所有Pod对象:
kubectl get pods -l "env!=qa" -L env
NAME READY STATUS RESTARTS AGE ENV
pod-example 1/1 Running 2 4h production
pod-with-labels 1/1 Running 0 40m testing
再例如,显示标签键名env的值不为qa,且标签键名tier的值为frontend的所有Pod对象:
kubectl get pods -l "env!=qa,tier=frontend" -L env,tier
NAME READY STATUS RESTARTS AGE ENV TIER
pod-with-labels 1/1 Running 0 35d testing frontend
基于集合关系的标签选择器支持in、notin和exists 三种操作符,它们的使用格式及意义具体如下。
KEY in (VALUE1,VALUE2,···):指定的键名的值存在于给定的列表中即满足条件。
KEY notin (VALUE1,VALUE2,···):指定的键名的值不存在于给定的列表中即满足条件。
KEY:所有存在此键名标签的资源。
!KEY:所有不存在此键名标签的资源。
例如,显示标签键名env的值为production或dev的所有Pod对象:
kubectl get pods -l "env in (production,dev)" -L env
NAME READY STATUS RESTARTS AGE ENV
pod-example 1/1 Running 2 4h production
再如,列出标签键名env的值为production或dev,且不存在键名为tier的标签的所有Pod对象:
kubectl get pods -l 'env in (production,dev),!tier' -L env,tier
NAME READY STATUS RESTARTS AGE ENV TIER
pod-example 1/1 Running 2 4h production
注意:为了避免shell解释器解析叹号(!),必须要为此类表达式使用单引号。
此外,Kubernetes的诸多资源对象必须以标签选择器的方式关联到Pod资源对象,比如Service、Deployment和ReplicaSet类型的的资源等,它们在sepc字段中嵌套使用嵌套的“selector”字段,通过“matchLabels”来指定标签选择器,有的甚至还支持使用“matchExpressions”构造复杂的标签选择机制。
- matchLabels:通过直接给定键值对来指定标签选择器。
- matchExpressions:基于表达式指定的标签选择器列表,每个选择器都形如“{key:KEY_NAME, operator:OPERATOR,values:[VALUE1, VALUE2,···]}”,选择器列表间为“逻辑与”关系;使用In或NotIn操作符时,其values不强制要求为非空的字符串列表,而使用Exists或DostNotExist,其values必须为空。
下面所示的资源清单片段是一个示例,它同事定义了两类标签选择器:
selector
matchLabels:
component:redis
matchExpressions:
- {key:tier,operator:In,values:[cache]}
- {key:environment,operator:Exists,values:}
标签赋予了Kubernetes灵活操作资源对象的的能力,它也是Service和Deployment等核心资源类型得以实现的基本前提。
最新文章
- JS三大特性
- Java界面
- 猿团YTFCloud--5分钟自制APP,开发从未如此简单
- 发布代码小助手V2.1发布了——Code2HTML工具
- Linux内核:关于中断你须要知道的
- Java 8:不要再用循环了
- 自定义View-6 状态按钮 滑动 点击
- 使用contentprovider实现的日记(转)
- Java实现简单文件过滤器
- 持续集成之 Nuget 进阶
- Spring教程笔记(2) IOC
- 学了 Python 能用来做这些!
- python中使用OpenCV处理图片
- Chap1 引言[The Linux Command Line]
- python win32api 如何用代码模拟点击网页confirm框的确定按钮
- 封装php redis缓存操作类
- iOS开发-消息通知机制(NSNotification和NSNotificationCenter)
- Day 28面向对象的进阶-内置函数(__new__,__del__)
- 高可用OpenStack(Queen版)集群-14.Openstack集成Ceph准备
- 【WPF/C#】拖拽Image图片控件