建議標籤

除了 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 StatefulSetService,您會注意到同時包含關於 MySQL 和 WordPress(更廣泛的應用程式)的資訊。

最後修改時間為 2024 年 4 月 25 日凌晨 1 點 16 分 (PST):更新 common-labels.md (4e973d44ba)