推薦標籤

你可以使用 kubectl 和儀表盤以外的更多工具來視覺化和管理 Kubernetes 物件。一組通用的標籤允許工具協同工作,以所有工具都能理解的通用方式描述物件。

除了支援工具之外,推薦標籤以可查詢的方式描述應用程式。

元資料圍繞 應用程式 概念組織。Kubernetes 不是平臺即服務 (PaaS),並且沒有或不強制執行正式的應用程式概念。相反,應用程式是非正式的,透過元資料描述。應用程式包含什麼內容的定義是鬆散的。

共享標籤和註解共享一個共同的字首:app.kubernetes.io。沒有字首的標籤是使用者私有的。共享字首可確保共享標籤不會與自定義使用者標籤衝突。

標籤

為了充分利用這些標籤,它們應該應用於每個資源物件。

描述示例型別
app.kubernetes.io/name應用程式的名稱mysqlstring
app.kubernetes.io/instance標識應用程式例項的唯一名稱mysql-abcxyzstring
app.kubernetes.io/version應用程式的當前版本(例如,SemVer 1.0、修訂雜湊等)5.7.21string
app.kubernetes.io/component架構內的元件databasestring
app.kubernetes.io/part-of此應用程式所屬的更高級別應用程式的名稱wordpressstring
app.kubernetes.io/managed-by用於管理應用程式操作的工具Helmstring

為了說明這些標籤的作用,請考慮以下 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/namewordpress,而它的例項名稱(表示為 app.kubernetes.io/instance,值為 wordpress-abcxyz)與應用程式名稱分開。這使得應用程式和應用程式的例項都可以被識別。應用程式的每個例項都必須有一個唯一的名稱。

示例

為了說明使用這些標籤的不同方式,以下示例具有不同的複雜性。

一個簡單的無狀態服務

考慮使用 DeploymentService 物件部署的簡單無狀態服務。以下兩個片段表示標籤如何以最簡單的形式使用。

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 的 StatefulSetService 中,你會注意到其中包含了 MySQL 和其所屬的更大應用程式 WordPress 的資訊。

最後修改於 2024 年 4 月 25 日太平洋標準時間凌晨 1:16:更新 common-labels.md (4e973d44ba)