本页面介绍了如何使用 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
以获取最新版本。
- 确保您已完成将详细使用费数据导出到 BigQuery 的步骤。如果您的组织已在导出数据,则您必须具有查询表的权限。
局限和限制
- 您只能在 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 驱动程序预配或者使用具有
ReadWriteOnce
或ReadWriteOncePod
访问模式的已弃用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-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 声明 Persistent Disk 的支持性 PersistentVolumeClaims
时,系统会跟踪 Persistent Disk 的费用。永久性磁盘费用会继承声明 Pod 的所有元数据,例如 Pod 标签和命名空间,直到其 PersistentVolumeClaims
被删除为止。对于根据收回政策删除但保留 PersistentVolumes
的 PersistentVolumeClaims
,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 费用分配,请执行以下操作:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
配置集群。
在导航窗格的集群下,点击功能。
在其他部分中,选中启用费用分配复选框。
根据需要配置集群,然后点击创建。
更新集群
gcloud
使用 --enable-cost-allocation
标志更新集群:
gcloud container clusters update CLUSTER_NAME \
--enable-cost-allocation
将 CLUSTER_NAME
替换为您的集群的名称。
控制台
如需在现有集群上启用 GKE 费用分配,请执行以下操作:
- 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。 转到 Google Kubernetes Engine
- 点击要修改的集群的名称。
- 在集群页面的功能部分中,点击费用分配旁边的 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 数据洞察直观呈现您的费用。