推荐标签
您可以使用比 kubectl 和仪表板更多工具来可视化和管理 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/name
为 wordpress
,而其实例名称(表示为 app.kubernetes.io/instance
)的值为 wordpress-abcxyz
。这使得应用程序和应用程序实例可以识别。每个应用程序实例都必须具有唯一的名称。
示例
为了说明使用这些标签的不同方式,以下示例具有不同的复杂性。
简单的无状态服务
考虑使用 Deployment
和 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 安装。以下代码段说明用于部署此应用程序的对象的开头。
以下是用于 WordPress 的 Deployment
的开头
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
用于公开作为 WordPress 一部分的 MySQL
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 StatefulSet
和 Service
中,您会注意到包含了有关 MySQL 和 WordPress(更广泛的应用程序)的信息。