查看集群费用明细


本页面介绍了如何使用 GKE 费用分配在 Cloud Billing BigQuery 导出中查看 Google Kubernetes Engine (GKE) 集群费用的明细。

您可以使用此信息将集群的费用分配给用户。

潜在数据量增加

启用 GKE 费用分配会增加 BigQuery 中的存储和查询费用。确切的增加量取决于您在 Pod 和集群中使用的不同标签和命名空间组合的数量。

启用 GKE 费用分配不会更改 GKE 用量的总费用。导出文件中费用专列项的总和相同,并且基于账单导出文件构建的现有查询和报告将返回相同的值。

GKE 费用分配和集群用量计量

GKE 费用分配与集群用量计量有以下区别:

  • GKE 费用分配是集群用量计量的替代方法,用于获取集群信息。
  • GKE 费用分配计算 Cloud Billing 账号中的集群费用,而不是汇总 Looker 数据洞察模板中的数据。
  • 使用 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 以获取最新版本。

局限和限制

  • 您只能在 Cloud Billing BigQuery 详细使用费用数据导出中查看 GKE 费用分配数据。
  • 您必须使用 Google Cloud CLI 392.0.0 或更高版本
  • 如果您启用 GKE 费用分配,则账单导出将从该日期开始包含 GKE 资源的其他专列项。账单导出文件不会回填数据。
  • 如果您停用 GKE 费用分配,则账单导出不会再包含其他专列项,但也不会修改或移除系统以前在启用该功能时生成的专列项。
  • GKE 费用分配数据基于资源请求量,而非消耗的资源量。如需详细了解资源请求、资源限制和资源消耗量之间的区别,请参阅 Kubernetes 最佳实践:资源请求和限制
  • GKE 费用分配支持以下资源 SKU 类型:
    • Compute Engine 虚拟机实例 vCPU SKU
    • Compute Engine 虚拟机实例 RAM SKU
    • Compute Engine 虚拟机实例 GPU SKU
    • Compute Engine PD 容量 SKU
  • 如果一个 Pod 有超过 50 个 Kubernetes 标签,则 Google Cloud 控制台的 Cloud Billing 部分中或 Cloud Billing 详细导出中都不会提供这些标签。
  • 启用 GKE 费用分配后,数据最多可能需要三天时间才会显示在 Cloud Billing 中。
  • GKE 费用分配包括来自 Persistent Disk 的数据,但存在以下例外情况:
    • 仅支持通过 PersistentVolumeClaims通用临时卷动态预配的 PersistentVolume 资源。
    • 仅支持由 Compute Engine 永久性磁盘 CSI 驱动程序预配或者使用具有 ReadWriteOnceReadWriteOncePod 访问模式的已弃用 kubernetes.io/gce-pd 存储插件来预配的 PersistentVolume 资源。
    • 可能无法跟踪正常运行时间少于 30 分钟的 Persistent Disk。系统会始终跟踪至少具有 30 分钟正常运行时间的 Persistent Disk。

查看 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 标签键与虚拟机标签键冲突,则 Kubernetes 标签值会替换虚拟机标签值。集群和节点池资源标签按以下从高到低的优先级应用于资源:
  • 单个资源,例如实例或存储
  • 节点池
  • 集群
集群名称 goog-k8s-cluster-name [cluster-name]
命名空间 k8s-namespace [namespace]
工作负载类型 k8s-workload-type [workload-type]
(例如 apps/v1-Deploymentapps/v1-StatefulSetapps/v1-DaemonSetapps/v1-ReplicaSetbatch/v1-Jobbatch/v1-CronJobcore/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 声明 Persistent Disk 的支持性 PersistentVolumeClaims 时,系统会跟踪 Persistent Disk 的费用。永久性磁盘费用会继承声明 Pod 的所有元数据,例如 Pod 标签和命名空间,直到其 PersistentVolumeClaims 被删除为止。对于根据收回政策删除但保留 PersistentVolumesPersistentVolumeClaims,Persistent Disk 的费用将作为未分配跟踪。

直接应用于 PersistentVolumeClaims 的标签不会出现在 Google Cloud 控制台的 Cloud Billing 部分或 Cloud Billing 详细导出中。

启用 GKE 费用分配

您可以使用 gcloud CLI 或 Google Cloud 控制台在新集群或现有集群上启用 GKE 费用分配。

创建新集群

gcloud

使用 --enable-cost-allocation 标志创建集群:

gcloud container clusters create CLUSTER_NAME \
    --enable-cost-allocation \
    --region=COMPUTE_REGION

请替换以下内容:

  • CLUSTER_NAME:新集群的名称。
  • COMPUTE_REGION:集群的 Compute Engine 区域。对于可用区级集群,请使用 --zone=COMPUTE_ZONE

控制台

如需在创建新集群时启用 GKE 费用分配,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 配置集群。

  4. 在导航窗格的集群下,点击功能

  5. 其他部分中,选中启用费用分配复选框。

  6. 根据需要配置集群,然后点击创建

更新集群

gcloud

使用 --enable-cost-allocation 标志更新集群:

gcloud container clusters update CLUSTER_NAME \
    --enable-cost-allocation

CLUSTER_NAME 替换为您的集群的名称。

控制台

如需在现有集群上启用 GKE 费用分配,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。 转到 Google Kubernetes Engine
  2. 点击要修改的集群的名称。
  3. 集群页面的功能部分中,点击费用分配旁边的
  4. 修改费用分配对话框中,选中启用费用分配复选框。
  5. 点击保存更改

验证是否已启用 GKE 费用分配

gcloud

描述集群:

gcloud container clusters describe CLUSTER_NAME

输出类似于以下内容:

...
costManagementConfig:
  enabled: true
...

在此输出中,costManagementConfig 表示已启用 GKE 费用分配。

控制台

如需检查现有集群上是否已启用 GKE 费用分配,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。 转到 Google Kubernetes Engine
  2. 点击要修改的集群的名称。
  3. 集群页面的功能部分中,费用分配旁边会显示是否已启用 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

您还可以删除创建的集群

后续步骤