我們可以使用比 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/name
爲 wordpress
,而實例名稱爲 app.kubernetes.io/instance
,其值爲 wordpress-abcxzy
。這使得應用和其實例是可識別的。應用的每個實例都必須具有唯一的名稱。
示例
爲了說明使用這些標籤的不同方式,以下示例具有不同的複雜性。
簡單的無狀態服務
開綠使用 Deployment
和 Service
對象部署的簡單無狀態服務的用例。以下兩個片段代表瞭如何以最簡單的形式使用標籤。
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 StatefulSet
和 Service
,我們會注意到有關 MySQL 和更大的應用 WordPress 的信息。