推荐使用的标签

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

    元数据围绕 应用(application) 的概念进行组织。Kubernetes 不是 平台即服务(PaaS),没有或强制执行正式的应用程序概念。 相反,应用程序是非正式的,并使用元数据进行描述。应用程序包含的定义是松散的。

    共享标签和注解都使用同一个前缀:。没有前缀的标签是用户私有的。共享前缀可以确保共享标签不会干扰用户自定义的标签。

    为说明这些标签的实际使用情况,请看下面的 StatefulSet 对象:

    应用可以在 Kubernetes 集群中安装一次或多次。在某些情况下,可以安装在同一命名空间中。例如,可以不止一次地为不同的站点安装不同的 wordpress。

    应用的名称和实例的名称是分别记录的。例如,某 WordPress 实例的 app.kubernetes.io/namewordpress,而其实例名称表现为 app.kubernetes.io/instance 的属性值 wordpress-abcxzy。这使应用程序和应用程序的实例成为可能是可识别的。应用程序的每个实例都必须具有唯一的名称。

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

    考虑使用 Deployment 和 对象部署的简单无状态服务的情况。以下两个代码段表示如何以最简单的形式使用标签。

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. app.kubernetes.io/name: myservice
    6. ...

    下面的 Service 用于暴露应用。

    带有一个数据库的 Web 应用程序

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

    以下 Deployment 的开头用于 WordPress:

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. app.kubernetes.io/name: wordpress
    6. app.kubernetes.io/instance: wordpress-abcxzy
    7. app.kubernetes.io/version: "4.9.4"
    8. app.kubernetes.io/component: server
    9. ...

    这个 Service 用于暴露 WordPress:

    MySQL 作为一个 StatefulSet 暴露,包含它和它所属的较大应用程序的元数据:

    1. apiVersion: apps/v1
    2. kind: StatefulSet
    3. metadata:
    4. labels:
    5. app.kubernetes.io/name: mysql
    6. app.kubernetes.io/instance: mysql-abcxzy
    7. app.kubernetes.io/version: "5.7.21"
    8. app.kubernetes.io/managed-by: helm
    9. app.kubernetes.io/component: database
    10. ...

    使用 MySQL 和 Service,您会注意到有关 MySQL 和 Wordpress 的信息,包括更广泛的应用程序。