树叶云kubernetes教程:Kubernetes 标签和选择算符

标签和选择算符

标签(Labels) 是附加到 Kubernetes 对象(比如 Pods)上的键值对。 标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 标签可以用于组织和选择对象的子集。标签可以在创建时附加到对象,随后可以随时添加和修改。 每个对象都可以定义一组键/值标签。每个键对于给定对象必须是唯一的。

"metadata": {
  "labels": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。 应使用注解 记录非识别信息。

动机

标签使用户能够以松散耦合的方式将他们自己的组织结构映射到系统对象,而无需客户端存储这些映射。

服务部署和批处理流水线通常是多维实体(例如,多个分区或部署、多个发行序列、多个层,每层多个微服务)。 管理通常需要交叉操作,这打破了严格的层次表示的封装,特别是由基础设施而不是用户确定的严格的层次结构。

示例标签:

  • "release" : "stable"​, ​"release" : "canary"
  • "environment" : "dev"​, ​"environment" : "qa"​, ​"environment" : "production"
  • "tier" : "frontend"​, ​"tier" : "backend"​, ​"tier" : "cache"
  • "partition" : "customerA"​, ​"partition" : "customerB"
  • "track" : "daily"​, ​"track" : "weekly"

有一些常用标签的例子; 你可以任意制定自己的约定。 请记住,标签的 Key 对于给定对象必须是唯一的。

语法和字符集 

标签 是键值对。有效的标签键有两个段:可选的前缀和名称,用斜杠(​/​)分隔。 名称段是必需的,必须小于等于 63 个字符,以字母数字字符(​[a-z0-9A-Z]​)开头和结尾, 带有破折号(​-​),下划线(​_​),点( ​.​)和之间的字母数字。 前缀是可选的。如果指定,前缀必须是 DNS 子域:由点(​.​)分隔的一系列 DNS 标签,总共不超过 253 个字符, 后跟斜杠(​/​)。

如果省略前缀,则假定标签键对用户是私有的。 向最终用户对象添加标签的自动系统组件(例如 ​kube-scheduler​、​kube-controller-manager​、 ​kube-apiserver​、​kubectl​ 或其他第三方自动化工具)必须指定前缀。

kubernetes.io/​ 和 ​k8s.io/​ 前缀是为 Kubernetes 核心组件保留的。

有效标签值:

  • 必须为 63 个字符或更少(可以为空)
  • 除非标签值为空,必须以字母数字字符(​[a-z0-9A-Z]​)开头和结尾
  • 包含破折号(​-​)、下划线(​_​)、点(​.​)和字母或数字。

标签选择算符 

与名称和 UID 不同, 标签不支持唯一性。通常,我们希望许多对象携带相同的标签。

通过 标签选择算符,客户端/用户可以识别一组对象。标签选择算符是 Kubernetes 中的核心分组原语。

API 目前支持两种类型的选择算符:基于等值的 和 基于集合的。 标签选择算符可以由逗号分隔的多个 需求 组成。 在多个需求的情况下,必须满足所有要求,因此逗号分隔符充当逻辑 与(​&&​)运算符。

空标签选择算符或者未指定的选择算符的语义取决于上下文, 支持使用选择算符的 API 类别应该将算符的合法性和含义用文档记录下来。

对于某些 API 类别(例如 ReplicaSet)而言,两个实例的标签选择算符不得在命名空间内重叠, 否则它们的控制器将互相冲突,无法确定应该存在的副本个数。

对于基于等值的和基于集合的条件而言,不存在逻辑或(||)操作符。 你要确保你的过滤语句按合适的方式组织。

基于等值的需求

基于等值 或 基于不等值 的需求允许按标签键和值进行过滤。 匹配对象必须满足所有指定的标签约束,尽管它们也可能具有其他标签。 可接受的运算符有​=​、​==​ 和 ​!=​ 三种。 前两个表示 相等(并且只是同义词),而后者表示 不相等。例如:

environment = production
tier != frontend

前者选择所有资源,其键名等于 ​environment​,值等于 ​production​。 后者选择所有资源,其键名等于 ​tier​,值不同于 ​frontend​,所有资源都没有带有 ​tier ​键的标签。 可以使用逗号运算符来过滤 ​production ​环境中的非 ​frontend ​层资源:​environment=production,tier!=frontend​。

基于等值的标签要求的一种使用场景是 Pod 要指定节点选择标准。 例如,下面的示例 Pod 选择带有标签 “​accelerator=nvidia-tesla-p100​”。

apiVersion: v1
kind: Pod
metadata:
  name: cuda-test
spec:
  containers:
    - name: cuda-test
      image: "k8s.gcr.io/cuda-vector-add:v0.1"
      resources:
        limits:
          nvidia.com/gpu: 1
  nodeSelector:
    accelerator: nvidia-tesla-p100

基于集合的需求

基于集合 的标签需求允许你通过一组值来过滤键。 支持三种操作符:​in​、​notin ​和 ​exists ​(只可以用在键标识符上)。例如:

environment in (production, qa)
tier notin (frontend, backend)
partition
!partition

  • 第一个示例选择了所有键等于 ​environment ​并且值等于 ​production ​或者 ​qa ​的资源。
  • 第二个示例选择了所有键等于 ​tier ​并且值不等于 ​frontend ​或者 ​backend ​的资源,以及所有没有 ​tier ​键标签的资源。
  • 第三个示例选择了所有包含了有 ​partition ​标签的资源;没有校验它的值。
  • 第四个示例选择了所有没有 ​partition ​标签的资源;没有校验它的值。

类似地,逗号分隔符充当 与 运算符。因此,使用 ​partition ​键(无论为何值)和 ​environment ​不同于 ​qa​ 来过滤资源可以使用 ​partition, environment notin(qa)​ 来实现。

基于集合 的标签选择算符是相等标签选择算符的一般形式,因为 ​environment=production​ 等同于 ​environment in(production)​;​!=​ 和 ​notin ​也是类似的。

基于集合 的要求可以与基于 相等 的要求混合使用。例如:​partition in (customerA, customerB),environment!=qa​。

API

LIST 和 WATCH 过滤

LIST 和 WATCH 操作可以使用查询参数指定标签选择算符过滤一组对象。 两种需求都是允许的。(这里显示的是它们出现在 URL 查询字符串中)

  • 基于等值 的需求: ​?labelSelector=environment%3Dproduction,tier%3Dfrontend
  • 基于集合 的需求: ​?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29

两种标签选择算符都可以通过 REST 客户端用于 list 或者 watch 资源。 例如,使用 ​kubectl ​定位 ​apiserver​,可以使用 基于等值 的标签选择算符可以这么写:

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 对象,例如 ​services ​和 ​replicationcontrollers ​, 也使用了标签选择算符去指定了其他资源的集合,例如 pods。

Service 和 ReplicationController

一个 ​Service ​指向的一组 Pods 是由标签选择算符定义的。同样,一个 ​ReplicationController ​应该管理的 pods 的数量也是由标签选择算符定义的。

两个对象的标签选择算符都是在 ​json ​或者 ​yaml ​文件中使用映射定义的,并且只支持 基于等值 需求的选择算符:

"selector": {
    "component" : "redis",
}

或者

selector:
    component: redis

这个选择算符(分别在 ​json ​或者 ​yaml ​格式中) 等价于 ​component=redis​ 或 ​component in (redis)​ 。

支持基于集合需求的资源

比较新的资源,例如 ​Job​、 ​Deployment​、 ​Replica Set​ 和 ​DaemonSet ​, 也支持 基于集合的 需求。

selector:
  matchLabels:
    component: redis
  matchExpressions:
    - {key: tier, operator: In, values: [cache]}
    - {key: environment, operator: NotIn, values: [dev]}

matchLabels​ 是由 ​{key,value}​ 对组成的映射。 ​matchLabels​ 映射中的单个 ​{key,value }​ 等同于 ​matchExpressions ​的元素, 其 ​key ​字段为 “key”,​operator ​为 “In”,而 ​values ​数组仅包含 “value”。 ​matchExpressions ​是 Pod 选择算符需求的列表。 有效的运算符包括 ​In​、​NotIn​、​Exists ​和 ​DoesNotExist​。 在 ​In ​和 ​NotIn ​的情况下,设置的值必须是非空的。 来自 ​matchLabels ​和 ​matchExpressions ​的所有要求都按逻辑与的关系组合到一起 — 它们必须都满足才能匹配。

选择节点集 

通过标签进行选择的一个用例是确定节点集,方便 Pod 调度。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/159391.html<

(0)
管理的头像管理
上一篇2025-03-17 06:58
下一篇 2025-03-17 07:00

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注