建議標籤
除了 kubectl 和儀表板之外,您可以使用更多工具來視覺化和管理 Kubernetes 物件。一組通用的標籤允許工具互通操作,以所有工具都能理解的通用方式描述物件。
除了支援工具之外,建議的標籤還以可查詢的方式描述應用程式。
元數據圍繞著應用程式的概念組織。Kubernetes 不是平台即服務 (PaaS),也沒有或強制執行應用程式的正式概念。相反地,應用程式是非正式的,並使用元數據描述。應用程式包含內容的定義是寬鬆的。
注意
這些是建議的標籤。它們使應用程式管理更容易,但並非任何核心工具的必要條件。共用標籤和註解共用一個通用前綴:`app.kubernetes.io`。沒有前綴的標籤是使用者私有的。共用前綴確保共用標籤不會干擾自訂使用者標籤。
標籤
為了充分利用這些標籤,應將其應用於每個資源物件。
鍵 | 描述 | 範例 | 類型 |
---|---|---|---|
app.kubernetes.io/name | 應用程式的名稱 | mysql | 字串 |
app.kubernetes.io/instance | 識別應用程式實例的唯一名稱 | mysql-abcxyz | 字串 |
app.kubernetes.io/version | 應用程式的目前版本(例如,SemVer 1.0、修訂雜湊等) | 5.7.21 | 字串 |
app.kubernetes.io/component | 架構內的元件 | 資料庫 | 字串 |
app.kubernetes.io/part-of | 此應用程式所屬的較高層級應用程式的名稱 | wordpress | 字串 |
app.kubernetes.io/managed-by | 用於管理應用程式操作的工具 | Helm | 字串 |
為了說明這些標籤的實際應用,請考慮以下 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
用於監督執行應用程式本身的 Pods。
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
用於公開作為 WordPress 一部分的 MySQL
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(更廣泛的應用程式)的資訊。