推薦標籤
你可以使用 kubectl 和儀表盤以外的更多工具來視覺化和管理 Kubernetes 物件。一組通用的標籤允許工具協同工作,以所有工具都能理解的通用方式描述物件。
除了支援工具之外,推薦標籤以可查詢的方式描述應用程式。
元資料圍繞 應用程式 概念組織。Kubernetes 不是平臺即服務 (PaaS),並且沒有或不強制執行正式的應用程式概念。相反,應用程式是非正式的,透過元資料描述。應用程式包含什麼內容的定義是鬆散的。
注意
這些是推薦的標籤。它們使管理應用程式變得更容易,但對於任何核心工具都不是必需的。共享標籤和註解共享一個共同的字首:app.kubernetes.io
。沒有字首的標籤是使用者私有的。共享字首可確保共享標籤不會與自定義使用者標籤衝突。
標籤
為了充分利用這些標籤,它們應該應用於每個資源物件。
鍵 | 描述 | 示例 | 型別 |
---|---|---|---|
app.kubernetes.io/name | 應用程式的名稱 | mysql | string |
app.kubernetes.io/instance | 標識應用程式例項的唯一名稱 | mysql-abcxyz | string |
app.kubernetes.io/version | 應用程式的當前版本(例如,SemVer 1.0、修訂雜湊等) | 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 物件
# 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 安裝。以下片段說明了用於部署此應用程式的物件的開頭。
以下 Deployment
的開頭用於 WordPress
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
用於將 MySQL 作為 WordPress 的一部分暴露
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 的資訊。