Kubernetes 推薦使用的標(biāo)簽

2022-04-29 09:12 更新

推薦使用的標(biāo)簽

除了 kubectl 和 dashboard 之外,您可以使用其他工具來可視化和管理 Kubernetes 對象。一組通用的標(biāo)簽可以讓多個工具之間相互操作,用所有工具都能理解的通用方式描述對象。

除了支持工具外,推薦的標(biāo)簽還以一種可以查詢的方式描述了應(yīng)用程序。

元數(shù)據(jù)圍繞 應(yīng)用(application) 的概念進(jìn)行組織。Kubernetes 不是 平臺即服務(wù)(PaaS),沒有或強(qiáng)制執(zhí)行正式的應(yīng)用程序概念。 相反,應(yīng)用程序是非正式的,并使用元數(shù)據(jù)進(jìn)行描述。應(yīng)用程序包含的定義是松散的。

這些是推薦的標(biāo)簽。它們使管理應(yīng)用程序變得更容易但不是任何核心工具所必需的。

共享標(biāo)簽和注解都使用同一個前綴:?app.kubernetes.io?。沒有前綴的標(biāo)簽是用戶私有的。共享前綴可以確保共享標(biāo)簽不會干擾用戶自定義的標(biāo)簽。

標(biāo)簽

為了充分利用這些標(biāo)簽,應(yīng)該在每個資源對象上都使用它們。

描述 示例 類型
app.kubernetes.io/name 應(yīng)用程序的名稱 mysql 字符串
app.kubernetes.io/instance 用于唯一確定應(yīng)用實(shí)例的名稱 mysql-abcxzy 字符串
app.kubernetes.io/version 應(yīng)用程序的當(dāng)前版本(例如,語義版本,修訂版哈希等) 5.7.21 字符串
app.kubernetes.io/component 架構(gòu)中的組件 database 字符串
app.kubernetes.io/part-of 此級別的更高級別應(yīng)用程序的名稱 wordpress 字符串
app.kubernetes.io/managed-by 用于管理應(yīng)用程序的工具 helm 字符串
app.kubernetes.io/created-by 創(chuàng)建該資源的控制器或者用戶 controller-manager 字符串

為說明這些標(biāo)簽的實(shí)際使用情況,請看下面的 StatefulSet 對象:

# 這是一段節(jié)選
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/component: database
    app.kubernetes.io/part-of: wordpress
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/created-by: controller-manager

應(yīng)用和應(yīng)用實(shí)例

應(yīng)用可以在 Kubernetes 集群中安裝一次或多次。在某些情況下,可以安裝在同一命名空間中。例如,可以不止一次地為不同的站點(diǎn)安裝不同的 WordPress。

應(yīng)用的名稱和實(shí)例的名稱是分別記錄的。例如,WordPress 應(yīng)用的 ?app.kubernetes.io/name? 為 ?wordpress?,而其實(shí)例名稱 ?app.kubernetes.io/instance? 為 ?wordpress-abcxzy?。 這使得應(yīng)用和應(yīng)用的實(shí)例均可被識別,應(yīng)用的每個實(shí)例都必須具有唯一的名稱。

示例

為了說明使用這些標(biāo)簽的不同方式,以下示例具有不同的復(fù)雜性。

一個簡單的無狀態(tài)服務(wù)

考慮使用 ?Deployment ?和 ?Service ?對象部署的簡單無狀態(tài)服務(wù)的情況。以下兩個代碼段表示如何以最簡單的形式使用標(biāo)簽。

下面的 ?Deployment ?用于監(jiān)督運(yùn)行應(yīng)用本身的 pods。

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

下面的 ?Service ?用于暴露應(yīng)用。

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

帶有一個數(shù)據(jù)庫的 Web 應(yīng)用程序

考慮一個稍微復(fù)雜的應(yīng)用:一個使用 Helm 安裝的 Web 應(yīng)用(WordPress),其中 使用了數(shù)據(jù)庫(MySQL)。以下代碼片段說明用于部署此應(yīng)用程序的對象的開始。

以下 ?Deployment ?的開頭用于 WordPress:

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
...

這個 ?Service ?用于暴露 WordPress:

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 ?暴露,包含它和它所屬的較大應(yīng)用程序的元數(shù)據(jù):

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 ?StatefulSet ?和 ?Service?,您會注意到有關(guān) MySQL 和 Wordpress 的信息,包括更廣泛的應(yīng)用程序。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號