推荐标签

你可以使用 kubectl 和 Dashboard 之外的更多工具来可视化和管理 Kubernetes 对象。一组通用的标签使得工具能够互操作,以所有工具都能理解的通用方式描述对象。

除了支持工具之外,推荐的标签以可查询的方式描述应用。

元数据围绕着 应用 的概念进行组织。Kubernetes 不是一个平台即服务(PaaS),它没有或不强制执行正式的应用概念。相反,应用是非正式的,通过元数据来描述。应用所包含内容的定义是松散的。

共享标签和注解共用一个公共前缀:app.kubernetes.io。没有前缀的标签是用户私有的。共享前缀确保共享标签不会与自定义用户标签冲突。

标签

为了充分利用这些标签,应该将它们应用到每个资源对象上。

描述示例类型
app.kubernetes.io/name应用名称mysql字符串
app.kubernetes.io/instance标识应用实例的唯一名称mysql-abcxyz字符串
app.kubernetes.io/version应用当前版本(例如,SemVer 1.0、修订哈希等)5.7.21字符串
app.kubernetes.io/component架构中的组件数据库字符串
app.kubernetes.io/part-of本应用所属的更高级别应用的名称wordpress字符串
app.kubernetes.io/managed-by用于管理应用操作的工具Helm字符串

为了说明这些标签的作用,请考虑以下 StatefulSet 对象

# This is an excerpt
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: mysql-abcxyz
    app.kubernetes.io/version: "5.7.21"
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: wordpress
    app.kubernetes.io/managed-by: Helm

应用和应用实例

一个应用可以多次安装到 Kubernetes 集群中,有时甚至可以安装在同一个命名空间内。例如,WordPress 可以多次安装,不同的网站对应不同的 WordPress 安装。

应用名称和实例名称是分开记录的。例如,WordPress 的 app.kubernetes.io/namewordpress,而它的实例名称通过 app.kubernetes.io/instance 表示,其值为 wordpress-abcxyz。这使得应用及其应用实例能够被识别。每个应用实例必须有一个唯一的名称。

示例

为了说明如何以不同方式使用这些标签,以下示例具有不同的复杂程度。

一个简单的无状态 Service

考虑使用 DeploymentService 对象部署一个简单的无状态 service 的情况。以下两个代码片段展示了如何以最简单的形式使用这些标签。

Deployment 用于管理运行应用本身的 Pod。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: myservice
    app.kubernetes.io/instance: myservice-abcxyz
...

Service 用于暴露应用。

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: myservice
    app.kubernetes.io/instance: myservice-abcxyz
...

带有数据库的 Web 应用

考虑一个稍微复杂一些的应用:使用数据库 (MySQL) 的 Web 应用 (WordPress),使用 Helm 安装。以下代码片段展示了用于部署此应用的对象的开头部分。

以下 Deployment 的开头部分用于 WordPress

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: wordpress
    app.kubernetes.io/instance: wordpress-abcxyz
    app.kubernetes.io/version: "4.9.4"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: server
    app.kubernetes.io/part-of: wordpress
...

Service 用于暴露 WordPress

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: wordpress
    app.kubernetes.io/instance: wordpress-abcxyz
    app.kubernetes.io/version: "4.9.4"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: server
    app.kubernetes.io/part-of: wordpress
...

MySQL 作为 StatefulSet 暴露,其中包含它自身的元数据以及其所属的更大型应用的元数据

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: mysql-abcxyz
    app.kubernetes.io/version: "5.7.21"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: wordpress
...

Service 用于将 MySQL 作为 WordPress 的一部分暴露

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: mysql-abcxyz
    app.kubernetes.io/version: "5.7.21"
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: wordpress
...

在 MySQL 的 StatefulSetService 中,你会注意到其中包含了关于 MySQL 和 WordPress(更广泛的应用)的信息。

最后修改于 太平洋标准时间 2024 年 4 月 25 日 上午 1:16:更新 common-labels.md (4e973d44ba)