概念 - Kubernetes 推薦的標籤

我們可以使用比 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/namewordpress,而實例名稱爲 app.kubernetes.io/instance,其值爲 wordpress-abcxzy。這使得應用和其實例是可識別的。應用的每個實例都必須具有唯一的名稱。

示例

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

簡單的無狀態服務

開綠使用 DeploymentService 對象部署的簡單無狀態服務的用例。以下兩個片段代表瞭如何以最簡單的形式使用標籤。

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 StatefulSetService,我們會注意到有關 MySQL 和更大的應用 WordPress 的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章