推荐标签

你可以使用除 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架构中的组件database字符串
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。这使得应用程序和应用程序的实例都可被识别。应用程序的每个实例都必须具有唯一的名称。

示例

为了说明使用这些标签的不同方法,以下示例展示了不同复杂程度的情况。

一个简单的无状态服务

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

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 应用程序

考虑一个稍微复杂的应用程序:使用 Helm 安装的、使用数据库 (MySQL) 的 Web 应用程序 (WordPress)。以下片段说明了用于部署此应用程序的对象开头部分。

以下 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)