概念介绍
Label(标签)是 Kubernates 系统的另外一个核心概念。
- 一个Label 是一个 key=value的键值对。
- Label可以被附加到各种资源对象上,例如Node、Pod、Service、RC等
- 一个资源对象可以定义任意数量的Label,一个Label也可以被添加到任意数量的资源上。
- Label 通常在资源对象定义时确定,也可以在对象创建后动态的添加或者删除。
主要用途
Label相当于我们熟悉的“标签”,给一个资源对象定义一个Label,就相当于给他打了一个标签,随后可以通过 Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,Kubernates通过这种方式,实现了类似SQL的简单又通用的对象查询机制。
常见标签
- 版本标签: “release” : “stable”、“release”: “canary”
- 环境标签: “environment”: “dev”、“environment”: “qa”、“environment”: “production”
- 架构标签:“tier”: “frontend”、“tier”: “backed”、“tier”: “middleware”
- 分区标签:“partition”: “customerA”、“partition”: “customerB”
- 质量管控标签:“track”: “daily”、“track”: “weekly”
Label Selector (标签选择器)
上面说到 label 是一个 key=value格式的键值对,key相当于 Table Column, value 相当于 Table Column Data。
Label Selector 语法如下:
- 基于等式的(Equality-based)等式类表达式
表达式 | 作用 | 示例 | 说明 |
---|---|---|---|
= | 等于 | name = redis-slave | 查询所有标签 name=redis-slave的资源对象 |
!= | 不等于 | env != production | 查询所有不具有标签 env=production的资源对象 |
- 基于集合的(Set-based) 集合操作类表达式
表达式 | 作用 | 示例 | 说明 |
---|---|---|---|
in | 包含 | name in (redis-master, redis-slave) | 查询所有具有标签 name=redis-master 或 name=redis-slave 的资源对象 |
not in | 不包含 | name not in (php-frontend) | 查询所有不具有标签 name=php-frontend的资源对象 |
- 通过多个Label Selector 表达式组合实现复杂的条件选择
多个表达式间使用 “,” 分割,几个条件之前是 “AND” 关系,即同时满足多个条件
name=redis-slave,env!=production
name notin (php-frontend),env!=production