标签选择器用于表达标签的查询条件或选择标准,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等核心资源类型得以实现的基本前提。

 

最新文章

  1. JS三大特性
  2. Java界面
  3. 猿团YTFCloud--5分钟自制APP,开发从未如此简单
  4. 发布代码小助手V2.1发布了——Code2HTML工具
  5. Linux内核:关于中断你须要知道的
  6. Java 8:不要再用循环了
  7. 自定义View-6 状态按钮 滑动 点击
  8. 使用contentprovider实现的日记(转)
  9. Java实现简单文件过滤器
  10. 持续集成之 Nuget 进阶
  11. Spring教程笔记(2) IOC
  12. 学了 Python 能用来做这些!
  13. python中使用OpenCV处理图片
  14. Chap1 引言[The Linux Command Line]
  15. python win32api 如何用代码模拟点击网页confirm框的确定按钮
  16. 封装php redis缓存操作类
  17. iOS开发-消息通知机制(NSNotification和NSNotificationCenter)
  18. Day 28面向对象的进阶-内置函数(__new__,__del__)
  19. 高可用OpenStack(Queen版)集群-14.Openstack集成Ceph准备
  20. 【WPF/C#】拖拽Image图片控件

热门文章

  1. 【随笔记】SiliconLabs Android Demo 编译
  2. zookeeper06-watcher四字命令
  3. 4.12 疫情数据可视化 毕设(初稿版 crud+可视化echarts
  4. Linux问题--docker启动mysql时提示3306端口被占用(kill不掉3306端口)
  5. 微信小程序的全局弹窗以及全局实例
  6. 达标式减量策略又一例证(STRASS研究)
  7. 在vue-element-admin模板中去掉tui-editor
  8. Mybatis优化
  9. 如何在 JavaScript 中使用媒体查询
  10. Access数据库使用