本頁說明如何使用 Google Kubernetes Engine (GKE) 成本分配功能,取得重要的支出洞察資料,做為資源分配和成本最佳化決策的依據。瞭解 GKE 費用分配與叢集用量計量之間的差異、GKE 費用分配的限制、如何在現有和新叢集上啟用 GKE 費用分配,以及如何篩選及查詢 Cloud Billing BigQuery 匯出資料。
本頁面適用於需要管理成本的運算子、雲端架構師、開發人員和資料管理員,在 GKE 中建立及設定叢集和部署工作負載時,可參考本頁面內容。如要進一步瞭解常見角色,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
閱讀本頁內容前,建議先瞭解在 GKE 上執行最具成本效益的 Kubernetes 應用程式的最佳做法
資料量可能增加
啟用 GKE 費用分配功能可能會增加 BigQuery 的儲存和查詢費用。確切的增幅取決於您在 Pod 和叢集中使用的不同標籤和命名空間組合數量。
啟用 GKE 費用分配功能不會改變 GKE 用量的總費用。匯出資料中的費用明細總和相同,且您根據帳單匯出資料建立的現有查詢和報表會傳回相同的值。
GKE 費用分配和叢集用量計算
GKE 費用分配與叢集用量計算的不同之處如下:
- GKE 費用分配功能可做為叢集用量計算功能的替代方案,用來取得叢集資訊。
- GKE 費用分配功能會在您的 Cloud Billing 帳戶中計算叢集費用,而不是在 Looker Studio 範本中彙整資料。
- 啟用 GKE 費用分配功能後,您就能在 Cloud Billing Google Cloud 控制台和 Cloud Billing 詳細匯出內容中,查看叢集費用資料。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
- 請務必完成「將詳細用量費用資料匯出至 BigQuery」一文中的步驟。如果貴機構已匯出資料,您必須有權查詢資料表。
限制和規定
- 您只能在 Cloud Billing BigQuery 詳細用量費用資料匯出中,查看 GKE 費用分配資料。
- 您必須使用 Google Cloud CLI 392.0.0 以上版本
- 啟用 GKE 費用分配後,帳單匯出作業會從當天開始,納入 GKE 資源的額外明細項目。帳單匯出功能不會遞補資料。
- 停用 GKE 費用分配後,帳單匯出作業會停止納入額外明細項目,但不會修改或移除啟用這項功能時產生的先前明細項目。
- GKE 費用分配資料是以資源要求為準,而非以耗用的資源為準。如要進一步瞭解資源要求、資源限制和資源耗用量之間的差異,請參閱「Kubernetes 最佳做法:資源要求和限制」。
- GKE 費用分配功能支援下列資源 SKU 類型:
- Compute Engine VM 執行個體 vCPU SKU
- Compute Engine VM 執行個體 RAM SKU
- Compute Engine VM 自訂擴充執行個體 RAM SKU
- Compute Engine VM 執行個體 GPU SKU
- Compute Engine PD 容量 SKU
- Cloud TPU 執行個體 SKU
- 如果 Pod 的 Kubernetes 標籤超過 50 個, Google Cloud 控制台的 Cloud Billing 專區或 Cloud Billing 詳細匯出內容中,就不會顯示任何標籤。
- 啟用 GKE 費用分配功能後,Cloud Billing 最慢會在三天後顯示相關資料。
- GKE 費用分配包含永久磁碟的資料,但有下列例外狀況:
- 僅支援透過
PersistentVolumeClaims
或一般暫時性磁碟區動態佈建的PersistentVolume
資源。 - 僅支援由 Compute Engine 永久磁碟 CSI 驅動程式佈建的
PersistentVolume
資源,或使用已淘汰的kubernetes.io/gce-pd
儲存空間外掛程式,且存取模式為ReadWriteOnce
或ReadWriteOncePod
。 - 如果永久磁碟的正常運作時間少於 30 分鐘,系統可能不會追蹤。 系統一律會追蹤正常運作時間至少 30 分鐘的永久磁碟。
- 僅支援透過
- Cloud TPU 版本必須為 Cloud TPU v4 以上。
查看 GKE 叢集費用
啟用 GKE 費用分配功能後,GKE 工作負載的叢集名稱和命名空間會顯示在帳單匯出至 BigQuery 的 labels
欄位中:
資源標籤鍵 (labels.key ) |
資源標籤值 (labels.value ) |
|
說明 |
Kubernetes 標籤
採用以下格式:
k8s-label/${k8s-label-key} ,其中 ${k8s-label-key} 是 Pod 的 Kubernetes 標籤鍵。帳單標籤 k8s-label/${k8s-label-key} 的值與對應的 Kubernetes Pod 標籤相同。 |
如果 Kubernetes 標籤鍵與 VM 標籤鍵發生衝突,Kubernetes 標籤值會覆寫 VM 標籤值。系統會依下列優先順序 (由高到低),將叢集和節點集區資源標籤套用至資源:
|
叢集名稱 | goog-k8s-cluster-name |
[叢集名稱] |
命名空間 | k8s-namespace |
[命名空間] |
工作負載類型 | k8s-workload-type |
[workload-type] (例如 apps/v1-Deployment 、apps/v1-StatefulSet 、apps/v1-DaemonSet 、apps/v1-ReplicaSet 、batch/v1-Job 、batch/v1-CronJob 、core/v1-Pod ) |
工作負載名稱 | k8s-workload-name |
[workload-name] |
詳情請參閱「詳細用量費用資料的結構定義」。
此外,下列命名空間用於追蹤額外負荷和未分配的資源:
kube:system-overhead
:這會計入 Pod 無法使用的節點資源。系統會預留這些資源,用於執行 Kubernetes 架構 (包括但不限於 kubelet、kube-proxy、containerd)。這是節點容量與可分配資源之間的差異。kube:unallocated
:工作負載未要求資源,系統額外負擔也未要求資源。
如果 GKE 無法判斷資源的費用分配,匯出內容會包含下列其中一個值:
goog-k8s-unknown
:Cloud Billing 無法處理 SKU。這可能發生在佈建新的 Compute Engine 執行個體時。節點啟動和關閉期間,您可能會看到一些goog-k8s-unknown
值,例如 GKE 自動調整叢集大小時。goog-k8s-unsupported-sku
:GKE 費用分配功能不支援這個 SKU。將此值視為與<blank>
/NULL
相同。SKU 不一定會標示這個值。<blank>
/NULL
:GKE 成本分配不會追蹤這項資源。如果未啟用 GKE 費用分配功能,或資源不屬於 GKE 代管叢集,就可能發生這種情況。
當 Pod 聲明永久磁碟的備份 PersistentVolumeClaims
時,系統會追蹤永久磁碟的費用。在刪除永久磁碟的 PersistentVolumeClaims
之前,永久磁碟的費用會沿用所有中繼資料,例如 Pod 標籤和命名空間。如果PersistentVolumeClaims
遭到刪除,但根據回收政策保留 PersistentVolumes
,系統會將永久磁碟的費用追蹤為未分配。
直接套用至 PersistentVolumeClaims
的標籤不會顯示在 Google Cloud 控制台的「Cloud Billing」(雲端帳單) 專區,也不會顯示在 Cloud Billing 詳細匯出內容中。
如果是擴充 RAM,系統會根據要求的資源,將相同比例的總費用分配給一般 RAM 和擴充 RAM SKU 的工作負載。
啟用 GKE 費用分配功能
您可以使用 gcloud CLI 或 Google Cloud 控制台,在新叢集或現有叢集上啟用 GKE 費用分配功能。
建立新叢集
gcloud
使用 --enable-cost-allocation
旗標建立叢集:
gcloud container clusters create CLUSTER_NAME \
--enable-cost-allocation \
--location=CONTROL_PLANE_LOCATION
更改下列內容:
CLUSTER_NAME
:新叢集的名稱。CONTROL_PLANE_LOCATION
:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
主控台
如要在建立新叢集時啟用 GKE 費用分配功能,請按照下列步驟操作:
在 Google Cloud 控制台中,前往「建立 Kubernetes 叢集」頁面。
設定叢集。
在導覽窗格的「Cluster」(叢集) 底下,按一下「Features」(功能)。
在「其他」部分,選取「啟用費用分配」核取方塊。
視需要設定叢集,然後按一下「建立」。
更新叢集
gcloud
使用 --enable-cost-allocation
標記更新叢集:
gcloud container clusters update CLUSTER_NAME \
--enable-cost-allocation
將 CLUSTER_NAME
替換為叢集名稱。
控制台
如要在現有叢集上啟用 GKE 費用分配功能,請執行下列步驟:
- 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。 前往 Google Kubernetes Engine
- 按一下您要修改的叢集名稱。
- 在「Clusters」(叢集) 頁面的「Features」(功能) 部分,按一下「Cost Allocation」(費用分配) 旁的 edit。
- 在「編輯費用分配」對話方塊中,選取「啟用費用分配」核取方塊。
- 按一下 [儲存變更]。
確認已啟用 GKE 費用分配功能
gcloud
描述叢集:
gcloud container clusters describe CLUSTER_NAME
輸出結果會與下列內容相似:
...
costManagementConfig:
enabled: true
...
在這個輸出內容中,costManagementConfig
表示已啟用 GKE 費用分配。
控制台
如要檢查現有叢集是否已啟用 GKE 費用分配功能,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。 前往 Google Kubernetes Engine
- 按一下您要修改的叢集名稱。
- 在「叢集」頁面的「功能」部分,系統會在「費用分配」旁邊顯示 GKE 費用分配功能是否已啟用。
篩選 GKE 費用資料
下列查詢範例說明如何依叢集名稱、命名空間和標籤,篩選及分組支援的資源類型 GKE 成本。
將 BILLING_DATASET_TABLE
替換為您在 BigQuery 中建立的資料集名稱。
資料表名稱類似於 gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>
。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取這個頁面所用資源的費用,請停用叢集的 GKE 費用分配功能:
gcloud container clusters update CLUSTER_NAME \
--no-enable-cost-allocation
您也可以刪除建立的叢集。
後續步驟
- 如需更多範例,請參閱Cloud Billing 資料匯出的查詢範例。
- 瞭解如何透過 Looker Studio 以圖表呈現費用。