概念 - Kubernetes 推荐的标签

我们可以使用比 kubectl 和仪表盘更多的工具来可视化和管理 Kubernetes 对象。一组通过标签允许工具互操作,以所有工具都可以理解的通用方式描述对象。

除了支持工具外,建议的标签还可以查询的方式描述了应用。

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

注意:这些时推荐标签。它们使管理应用变得更加容易,但是任何核心工具都不需要它们。

共享的标签和注解共享一个公共前缀:app.kubernetes.io。没有前缀的标签是用户专有的。共享前缀可确保共享标签不会干扰自定义用户标签。

标签

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

描述 示例 类型
app.kubernetes.io/name 应用名称 mysql 字符串
app.kubernetes.io/instance 标识应用实例的唯一名称 wordpress-abcxzy 字符串
app.kubernetes.io/version 应用的当前版本(例如,语义版本、修订哈希,等等) 5.7.2.1 字符串
app.kubernetes.io/component 体系结构组件 database 字符串
app.kubernetes.io/part-of 该部分所属的高层应用名称 wordpress 字符串
app.kubernetes.io/managed-by 用于管理应用操作的工具 helm 字符串

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

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: wordpress-abcxzy
    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-abcxzy。这使得应用和其实例是可识别的。应用的每个实例都必须具有唯一的名称。

示例

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

简单的无状态服务

开绿使用 DeploymentService 对象部署的简单无状态服务的用例。以下两个片段代表了如何以最简单的形式使用标签。

Deployment 用于监控运行应用本身的容器。

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

Service 用于暴露应用。

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

有数据库的 Web 应用

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

以下为 WordPress 的 Deployment 的起始位置:

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

用于暴露 WordPress 的 Service

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: wordpress
    app.kubernetes.io/instance: wordpress-abcxzy
    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-abcxzy
    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-abcxzy
    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 的信息。

发布了231 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/stevenchen1989/article/details/105447340