栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用 Kubernetes 注释、标签和选择器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用 Kubernetes 注释、标签和选择器


注释、标签和选择器用于管理附加到 Kubernetes 对象的元数据。注释和标签定义了数据,而选择器提供了一种查询方式。

以下是这三个概念之间的区别、它们的设计目的以及如何使用它们来管理资源。

注释

该Kubernetes文档定义的注释为“任意非识别的元数据”,它添加到您的对象。它们的“不可识别”状态意味着它们不会被 Kubernetes 在内部用作其对象选择系统的一部分。

这意味着注释最适合用于独立于对象及其在集群中的角色的数据。您可以使用它们来添加有关创建对象的工具的信息,定义负责管理的人员,或添加要由外部工具选取的标签。

对您使用注释的目的没有限制。只要您的数据可以表示为键值对,您就可以创建一个注释来封装它。该模型使您可以将有用的数据直接与对象一起存储,而不必参考外部文档或数据库。

设置注释

注释被定义为资源metadata字段的一部分。它们是简单的键值对。密钥必须不超过 63 个字符,并且可以包含字母数字字符、破折号、下划线和点。它必须以字母数字字符开头和结尾。

密钥还支持可选前缀,该前缀必须是有效的 DNS 子域。前缀用于命名注释键,避免常见注释之间的冲突,例如name和version。当使用前缀时,斜线字符将它与键分开。

apiVersion : v1 kind : Pod metadata : 
  name : pod-with-annotations 
  annotations : 
    unprefixed 
    -annotation : "value" cloudavvyit.com/prefixed-annotation : "another value" spec :   # 

此示例演示了带前缀和不带前缀的注释。

您可以使用 Kubectl检索已在对象上设置的注释。没有内置命令,因此您需要获取对象的 JSON 或 YAML 定义,然后提取该annotations字段的值。这是一个实例,显示与上面显示的 Pod 关联的注释:

kubectl get pod pod-with-annotations -o jsonpath='{.metadata.annotations}'
标签

标签是另一种形式的元数据,您可以将其附加到您的资源上。该文档将标签的作用描述为“识别对用户有意义且相关的对象属性”,但与核心系统的属性无关。

注释是故意没有目的的,能够表示任意数据,而标签则用于更正式的情况。它们通常用于表示流程和组织结构。您可以使用标签来表示资源的发布状态(例如beta或stable)或其映射到的开发阶段(build或qa)。

引用对象时,标签可用作选择器。与不支持作为选择器的注释相比,这是一个关键的区别。这是一个选择具有node-environment: production标签的节点的 Pod :

apiVersion : v1 kind : Pod metadata : 
  name : pod-with-node-selector spec : 
  containers :     # < 
  omited > nodeSelector : 
    node-environment : production
设置标签

标签以与注释相同的方式附加到对象。labels向对象的 中添加一个字段metadata,然后用键值对填充它。标签对键名和前缀具有相同的约束。

apiVersion: v1kind: Podmetadata:
  name: pod-with-labels
  labels:
    cloudsavvyit.com/environment: stablespec:  # 

您可以使用 Kubectl 使用与前面所示相同的技术来检索对象的标签。获取对象的 JSON 表示,然后提取labels字段:

kubectl get pod pod-with-labels -o jsonpath='{.metadata.labels}'

Kubectl 还支持–show-labels在人类可读的输出表中包含标签的标志:

kubectl get pods --show-labels
选择器

选择器在 Kubernetes 对象定义中用于引用其他对象。不同类型的选择器可用于拉入具有某些特征的对象。

在上面的示例中,我们使用选择器来标识具有特定标签的节点。这是一个 Deployment 对象,它使用显式标签选择器来标识它应该管理的 Pod:

apiVersion: apps/v1kind: Deploymentmetadata:
  name: deploymentspec:
  selector:
    matchLabels:
      cloudsavvyit.com/app: selectors-demo
  replicas: 3
  template:
    metadata:
      labels:
        cloudsavvyit.com/app: selectors-demo
    spec:      # 

部署template将创建具有cloudsavvyit.com/app标签集的Pod 。这些将与 匹配,selector因此它们成为部署的一部分。

Kubectl 中的选择器

您可以使用一种选择器的形式来过滤 Kubectl 返回的对象:

kubectl get pods -l cloudavvyit.com/app=selectors-demo

基于标签的查询支持多种比较运算符。这些包括基于等式和基于集合的比较:

= – 标签值等于给定值。

== – 标签值严格等于给定值。

!= – 标签值不等于给定值。

in – 标签值是一组给定值中的一个。

notin – 标签值不在一组给定值中。

exists – 标签存在于对象上。

以下是使用in运算符查询临时或生产环境中的对象的示例:

kubectl get pods -l "environment in (dev, production)"
概括

注释和标签是将元数据添加到 Kubernetes 对象的两种方法。注释用于 Kubernetes 不会引用的非标识数据。标签用于标识对象,以便其他 Kubernetes 资源可以选择它们。

如果您不使用键值对查询对象,最好使用注释。如果您将在另一个资源中引用它或使用它来过滤终端中的 Kubectl 输出,请使用标签。

使用标签时,可以使用多种形式的选择器来帮助您访问所需的数据。注释访问起来有点棘手,因为它们不是用来查询的,但您仍然可以通过查看 Kubernetes 对象的 JSON 表示来列出它们。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号