查询计算引擎成本时集群工作负载名称为空

问题描述 投票:0回答:1

查询 Compute Engine 成本时,我得到一条工作负载名称为空的记录。

k8s 之外还有哪些服务消耗 Compute Engine 或者 k8s 中可能存在未命名的工作负载?

我如何进一步调查这笔费用?

SELECT
  DATE(usage_start_time) day,
  ROUND(SUM(cost),2) AS sum_cost,
  labels.value AS workload,
FROM
  my_billing_table
LEFT JOIN
  UNNEST(labels) AS labels
ON
  labels.key = "k8s-workload-name"
WHERE
  DATE(usage_start_time) >= DATE_ADD(CURRENT_DATE,INTERVAL -2 DAY)
  AND DATE(partition_time) >= DATE_ADD(CURRENT_DATE,INTERVAL -2 DAY)
  AND project.name = 'my_project'
  AND service.description = 'Compute Engine'
GROUP BY
  1,
  3
ORDER BY
  1 DESC
google-cloud-platform google-kubernetes-engine google-compute-engine billing
1个回答
0
投票

请按照以下步骤操作,可能会对您有所帮助:

  1. 检查并启用 GKE 成本分配(如果尚未启用)以获取成本明细。在集群上启用它后,您现在可以获得集群和命名空间的 GKE 成本,我的意思是您可以获得命名空间名称及其相关成本。

根据 查看 GKE 集群成本 :

“如果 GKE 无法确定资源的成本分配,导出将包含以下值之一:

  • goog-k8s-unknown:Cloud Billing 无法处理 SKU。预配新的 Compute Engine 实例时可能会发生这种情况。在节点启动和关闭期间,您可能会遇到一些 goog-k8s-unknown 值,例如当 GKE 自动缩放集群时。

  • goog-k8s-unsupported-sku:GKE 成本分配不支持此 SKU。将其视为与 /NULL 相同。无法保证 SKU 始终标有此值。

  • /NULL:GKE 成本分配不跟踪此资源。当未启用 GKE 成本分配或资源不属于 GKE 托管集群时,可能会发生这种情况。”

  1. 根据标签传播:手动创建的没有 K8s 的虚拟机不会使用 k8s-workload-name 进行标记,这可能是工作负载名称为空的原因。

  2. 检查非 Kubernetes 服务:不使用 Kubernetes 的其他服务(例如 Compute Engine VM 实例)可能正在使用资源。您可以按“k8s-workload-name”以外的标签进行过滤,以查看这些虚拟机是否正在消耗资源。

进一步调查

  1. 借助 gcloud 计算实例描述命令检查实例名称列表,该命令会显示有关特定丢失的 Compute Engine 实例的数据,并查找可能指示实例用途的任何自定义元数据标签。

  2. 日志记录和监控仪表板的帮助下,了解这些成本期间出现的任何错误可以帮助更好地理解。

  3. 查询其他标签:修改查询以检查是否存在其他标签,并确定哪些工作负载没有“k8s-workload-name”标签但仍在消耗资源。

  4. 确保工作负载标记:Kubernetes 工作负载可能未正确标记。您可以检查 Kubernetes 集群配置,以确保所有工作负载都正确标记为“k8s-workload-name”标签。

请参阅详细数据导出结构,您还可以使用 GCP 成本分配功能,该功能可以帮助您找到未归属的 Compute Engine 成本的来源查看集群成本的详细细分以了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.