你可以通过kubectl和dashboard之外的其他工具视图化和管理Kubernetes对象。一组通用标签允许工具们交互工作、以所有工具都能理解的方式描述对象。
为了支持工具化,推荐标签使用可查询的方式描述应用。
元数据(metadata)围绕应用(application)的概念组织。Kubernetes并非平台及服务(PaaS)并且没有也不强制应用的格式观念。相反,应用是非正规的且通过元数据描述。
注:这些是推荐的标签,并且对任何核心工具都不是必须的。
共享的标签和注解共享同一个前缀:app.kubernetes.io. 没有前缀的标签是用户私有的。前缀保证共享标签不与用户定制标签冲突。
标签(Labels)
为了完全获得使用这些标签的好处,它们应该被用于每个资源对象上。
key | 描述 | 例子 | 类型 |
---|---|---|---|
app.kubernetes.io/name | 应用名 | mysql | string |
app.kubernetes.io/instance | 应用的唯一标识符 | wordpress-abcxzy | string |
app.kubernetes.io/version | 应用的当前版本 | 5.7.21 | string |
app.kubernetes.io/component | 架构内的组件 | database | string |
app.kubernetes.io/part-of | 该应用所属的更高级应用 | wordpress | string |
app.kubernetes.io/managed-by | 用来管理该应用的工具 | helm | string |
参考下面的状态集(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/name标签值是wordpress,同时实例的app.kubernetes.io/instance标签值是wordpress-abcxzy。这可以识别应用和应用实例。每个实例的名称都必须是唯一的。
例子
我们来通过不同复杂度的例子以解释如何使用这些标签。
简单无状态服务
下面是使用Deployment和Service对象部署的简单无状态服务。下面的两个片段展示和如何通过简单的格式使用这些标签。
用来监督运行应用的节点(pods)的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应用
稍微复杂的应用:包含数据库(MySQL)的web应用(WordPress),使用Helm安装。下面的片段展示了用来部署该应用的对象的开头。
用于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
...
包含该应用和更高级应用的元数据、作为状态集(StatefulSet)的MySQL
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: wordpress-abcxzy
app.kubernetes.io/managed-by: helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
app.kubernetes.io/version: "5.7.21"
...
暴露WordPress中MySQL的Service
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: wordpress-abcxzy
app.kubernetes.io/managed-by: helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
app.kubernetes.io/version: "5.7.21"
...
通过MySQL状态集和Service,你可以获得MySQL和Wordpress的信息,更高级的应用被包含在了其中。