了解集群资源用量


本页面介绍了如何使用 GKE 用量计量来了解 Google Kubernetes Engine (GKE) 集群的用量概况,并将用量与您组织中的个别团队或业务部门联系起来。GKE 用量计量不会影响您项目的结算费用;而且能帮您精细地了解资源用量。

概览

GKE 用量计量会跟踪您的集群工作负载的资源请求以及实际资源用量的信息。目前,GKE 用量计量会跟踪有关 CPU、GPU、TPU、内存、存储的信息,还可以选择跟踪有关网络出站流量的信息。您可以使用 Kubernetes 命名空间标签或两者的组合来区分资源用量。

数据会存储在 BigQuery 中,您可以使用 Looker 数据洞察等外部工具直接查询这些数据,或者将其导出进行分析。

GKE 用量计量适用于如下所示的情景:

  • 在每个租户均在指定命名空间内运行的多租户集群中,跟踪各租户的资源请求量和实际资源消耗量。
  • 为与工作负载关联的 Kubernetes 对象分配唯一标签,以确定在给定集群中运行的工作负载的资源消耗量。
  • 确定资源请求量与其实际资源消耗量明显不符的工作负载,以便您可以更高效地为各工作负载分配资源。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

限制

您可以使用示例 BigQuery 查询和 Looker 数据洞察模板将 GKE 用量计量数据与 BigQuery 中导出的 Google Cloud 结算数据相结合。这样,就可估算按集群、命名空间和标签划分的费用明细。

GKE 用量计量数据纯粹属于建议性参考数据,不会影响您的 Google Cloud 结算费用。对于结算数据,请以 Google Cloud 结算发票为准。

存在以下限制:

  • 不计入任何特殊合同折扣和赠金。
  • 在 GKE 范围之外创建的资源不按命名空间或标签跟踪。
  • 只有使用情况报告才能跟踪来自 Pod 和 PersistentVolumeClaim 对象的标签。
  • 仅支持动态预配的 PersistentVolume
  • 仅支持 pd-standard 和 pd-ssd 磁盘类型。GKE 用量计量可能包含同一 SKU 下这两种磁盘类型的区域版本费用。
  • Looker 数据洞察不支持具备爆发能力的机器类型的可视化。
  • 您只能将数据导出到与您的集群位于同一项目中的 BigQuery 数据集。
  • 您不能使用端口 27304、47082 和 47083,因为这些端口是为网络出站流量跟踪预留的。
  • 不支持自定义 StorageClass 对象。
  • Windows Server 节点不支持网络出站流量计量。
  • 共享 VPC 或 VPC 网络对等互连不支持网络出站流量计量。
  • 具有 150 个以上节点的集群不支持网络出站流量计量。

前提条件

在使用 GKE 用量计量功能之前,您必须满足以下前提条件:

  • 如需跟踪实际资源消耗量,集群必须使用 GKE 1.14.2-gke.3 或更高版本。
  • 如果您使用的是 E2 或 N2 机器类型,则集群版本必须为 GKE 1.15.11-gke.9 或更高版本。
  • 已启用 BigQuery 账单导出功能。费用与 BigQuery 使用量相关联。
  • 必须使用 gcloud 命令的 250.0.0 版或更高版本。请使用 gcloud --version 标志核实版本。
  • 您必须在 Google Cloud 项目中启用 BigQuery API。如果您是在 2018 年 7 月以后首次启用 GKE,则该 API 已经启用。

启用 GKE 用量计量

如需启用 GKE 用量计量功能,您首先需要为项目中的一个或多个集群或者整个项目创建 BigQuery 数据集。有关选择数据集与集群之间的映射的详细信息,请参阅选择一个或多个 BigQuery 数据集

接下来,您可创建新集群或修改现有集群并启用 GKE 用量计量功能。

您还可以选择创建一个 Looker 数据洞察信息中心来直观呈现集群的资源使用情况。

创建 BigQuery 数据集

如需在 Google Cloud 项目中为集群使用 GKE 用量计量功能,您首先要创建 BigQuery 数据集,然后将集群配置为使用该数据集。您可以使用单个 BigQuery 数据集来存储同一个项目中多个集群的资源用量信息。

如需了解详情,请参阅创建数据集。将数据集的 Default table expiration 设置为 Never,以保证表不会过期。如果某个表过期,则系统会自动重新创建该表(空表)。

为集群启用 GKE 用量计量

您可以使用 gcloud 命令或 Google Cloud 控制台为新集群或现有集群启用 GKE 用量计量。

默认情况下,启用 GKE 用量计量也会启用资源消耗计量。若要选择性地停用资源消耗量计量功能,同时继续跟踪资源请求量,请参阅本主题中有关使用 gcloud 命令启用 GKE 用量计量的具体说明。

默认情况下,网络出站流量计量处于停用状态。如需启用此功能,请参阅本主题中“可选:启用网络出站流量计量”内的注意事项和说明。

创建新集群

您可以使用 gcloud CLI 或 Google Cloud 控制台创建集群。

gcloud

如需在创建集群的同时启用 GKE 用量计量功能,请运行下面的命令:

gcloud container clusters create CLUSTER_NAME \
    --resource-usage-bigquery-dataset RESOURCE_USAGE_DATASET

替换以下内容:

  • CLUSTER_NAME:GKE 集群的名称。
  • RESOURCE_USAGE_DATASET:BigQuery 数据集的名称。

默认情况下,资源消耗计量功能处于启用状态。如需停用此功能且仅跟踪资源请求量,只要在上述命令中添加 --no-enable-resource-consumption- metering 标志即可。您还需要修改本主题其余部分中的示例查询,让它们不再查询资源消耗量

如果需要,您可以在启动集群时在 BigQuery 数据集中创建所需的表。

控制台

如需在创建集群的同时启用 GKE 用量计量功能,请执行以下操作:

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

    转到 Google Kubernetes Engine

  2. 点击 创建

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

  4. 选择启用 GKE 用量计量

  5. 输入 BigQuery 数据集的名称。

  6. 仔细参阅“可选:启用网络出站流量计量”中的注意事项和说明后,您可以酌情选择启用网络出站流量计量

  7. 继续配置您的集群,然后点击创建

配置现有集群

gcloud

如需在现有集群上启用 GKE 用量计量,请运行下面的命令:

gcloud container clusters update CLUSTER_NAME \
    --resource-usage-bigquery-dataset RESOURCE_USAGE_DATASET

默认情况下,资源消耗计量功能处于启用状态。如需停用此功能且仅跟踪资源请求量,只要在上述命令中添加 --no-enable-resource-consumption- metering 标志即可。您还需要修改本主题其余部分中的示例查询,让它们不再查询资源消耗量

您还可以通过更改 --resource-usage-bigquery-dataset 标志的值来更改现有集群用于存储其用量计量数据的数据集。

如果需要,您可以在更新集群时在 BigQuery 数据集中创建表。

控制台

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

    转到 Google Kubernetes Engine

  2. 在要修改的集群旁边,点击 操作,然后点击 修改

  3. 功能下,点击 GKE 用量计量旁边的 修改

  4. 选择启用 GKE 用量计量

  5. 输入 BigQuery 数据集的名称。

  6. 仔细参阅“可选:启用网络出站流量计量”中的注意事项和说明后,您可以酌情选择启用网络出站流量计量

  7. 点击保存更改

可选:启用网络出站流量计量

默认情况下,系统不会收集或导出网络出站流量数据。测量网络出站流量需要在每个节点上运行网络计量代理 (NMA)。NMA 作为特权 Pod 运行,会占用节点上的一些资源(CPU、内存和磁盘空间),还会在内核上启用 nf_conntrack_acct sysctl 标志(用于连接跟踪流程核算)。

如果您可以接受以上注意事项,则您可以启用网络出站流量跟踪,并将其与 GKE 用量计量搭配使用。如需启用网络出站流量跟踪,请在创建或更新集群时添加 --enable-network-egress-metering 选项,或是在 Google Cloud 控制台中启用 GKE 用量计量时选择启用网络出站流量计量

如需停用网络出站流量计量,请在使用命令行更新集群时添加 --no-enable-network-egress-metering 标志。您也可以在 Google Cloud 控制台中集群的 GKE 用量计量部分清除启用网络出站流量计量

验证是否已启用 GKE 用量计量

如需验证集群是否已启用 GKE 用量计量,并确认哪个 BigQuery 数据集用于存储集群的资源使用情况数据,请运行以下命令:

gcloud container clusters describe CLUSTER_NAME \
    --format="value(resourceUsageExportConfig)"

如果未启用 GKE 用量计量,则输出结果为空,否则会显示集群使用的 BigQuery 数据集,如以下输出所示:

bigqueryDestination={u'datasetId': u'test_usage_metering_dataset'}

选择一个或多个 BigQuery 数据集

一个数据集可以保存项目中一个或多个集群的 GKE 用量计量数据。使用一个还是多个数据集取决于您的安全需求:

  • 为整个项目使用同一数据集可简化管理。
  • 一个集群一个数据集可让您分配对数据集的细粒度访问权。
  • 一个相关集群组一个数据集可让您根据自己的需要,适当地调和管理的简便性和访问权限的精细程度。

使用 Looker 数据洞察信息中心直观呈现 GKE 用量计量数据

您可以使用 Looker 数据洞察信息中心直观呈现 GKE 用量计量数据。这样,您就可以按集群名称、命名空间或标签过滤数据。您还可以动态调整报告期。如果您有 Looker 数据洞察和 BigQuery 的经验,可以创建自定义信息中心。您还可以克隆我们专门为 GKE 用量计量创建的信息中心。

您可以使用信息中心直观呈现您的集群随时间的资源请求量和消耗量。

前提条件

  1. 启用将 Google Cloud 结算数据导出到 BigQuery(如果尚未启用)。

    在此过程中,您将创建一个数据集,但数据集中的表最多可能需要 5 小时才能显示并开始填充。在该表出现时,其名称为 gcp_billing_export_v1_BILLING_ACCOUNT_ID

  2. 在项目中的至少一个集群上启用 GKE 用量计量。请记下您为 BigQuery 数据集选择的名称。

  3. 启用 Looker 数据洞察(如果尚未启用)。

  4. 请收集配置信息中心所需的以下信息:

    • Cloud Billing 导出数据集 ID 和数据表
    • GKE 用量计量数据集 ID
  5. 确保您拥有 2.0.58 版或更高版本的 BigQuery CLI。要检查版本,请运行 bq versiongcloud components update 来更新 BigQuery CLI。

  6. 本部分中的命令应在 Linux 终端或 Cloud Shell 中运行。

创建 BigQuery 费用明细表

  1. 下载以下查询模板之一:

    如果您使用的是 Cloud Shell,请将该文件复制到执行以下命令的目录中。

  2. 运行以下命令以设置环境变量:

    export GCP_BILLING_EXPORT_TABLE_FULL_PATH=YOUR_BILLING_EXPORT_TABLE_PATH
    export USAGE_METERING_PROJECT_ID=YOUR_USAGE_METERING_PROJECT_ID
    export USAGE_METERING_DATASET_ID=YOUR_USAGE_METERING_DATASET_ID
    export USAGE_METERING_START_DATE=YOUR_USAGE_METERING_START_DATE
    export COST_BREAKDOWN_TABLE_ID=YOUR_COST_BREAKDOWN_TABLE_ID
    export USAGE_METERING_QUERY_TEMPLATE=YOUR_TEMPLATE_PATH
    export USAGE_METERING_QUERY=YOUR_RENDERED_QUERY_PATH
    

    替换以下内容:

    • YOUR_BILLING_EXPORT_TABLE_PATH:生成的账单导出表的路径。该表的名称类似于 PROJECT_ID.DATASET_ID.gcp_billing_export_v1_xxxx
    • YOUR_USAGE_METERING_PROJECT_ID:您的 Google Cloud 项目的名称。
    • YOUR_USAGE_METERING_DATASET_ID:您在 BigQuery 中创建的数据集的名称,例如 all_billing_data
    • YOUR_USAGE_METERING_START_DATE:查询的开始日期,格式为 YYYY-MM-DD
    • YOUR_COST_BREAKDOWN_TABLE_ID:您选择的新表的名称,例如 usage_metering_cost_breakdown。此表用作 Looker 数据洞察的输入。
    • YOUR_TEMPLATE_PATH:您下载的查询模板的名称,即 usage_metering_query_template_request_and_consumption.sqlusage_metering_query_template_request_only.sql
    • YOUR_RENDERED_QUERY_PATH:您选择的所呈现查询的路径名称,例如 cost_breakdown_query.sql

    例如,您的环境变量可能如下所示:

    export GCP_BILLING_EXPORT_TABLE_FULL_PATH=my-billing-project.all_billing_data.gcp_billing_export_v1_xxxx
    export USAGE_METERING_PROJECT_ID=my-billing-project
    export USAGE_METERING_DATASET_ID=all_billing_data
    export USAGE_METERING_START_DATE=2022-05-01
    export COST_BREAKDOWN_TABLE_ID=usage_metering_cost_breakdown
    export USAGE_METERING_QUERY_TEMPLATE=usage_metering_query_template_request_only.sql
    export USAGE_METERING_QUERY=cost_breakdown_query.sql
    
  3. 基于模板呈现查询:

    sed \
    -e "s/\${fullGCPBillingExportTableID}/$GCP_BILLING_EXPORT_TABLE_FULL_PATH/" \
    -e "s/\${projectID}/$USAGE_METERING_PROJECT_ID/" \
    -e "s/\${datasetID}/$USAGE_METERING_DATASET_ID/" \
    -e "s/\${startDate}/$USAGE_METERING_START_DATE/" \
    "$USAGE_METERING_QUERY_TEMPLATE" \
    > "$USAGE_METERING_QUERY"
    
  4. 创建一个新的费用明细表,该表每 24 小时刷新一次:

    bq query \
    --project_id=$USAGE_METERING_PROJECT_ID \
    --use_legacy_sql=false \
    --destination_table=$USAGE_METERING_DATASET_ID.$COST_BREAKDOWN_TABLE_ID \
    --schedule='every 24 hours' \
    --display_name="GKE Usage Metering Cost Breakdown Scheduled Query" \
    --replace=true \
    "$(cat $USAGE_METERING_QUERY)"
    

    如需详细了解如何计划查询,请参阅设置计划查询

创建 BigQuery 数据源

  1. 在 Looker 数据洞察中,转到数据源
  2. 点击 创建,然后点击数据源
  3. 选择 BigQuery
  4. 命名您的数据源。在工具栏中,点击未命名数据源字样,将文本替换为描述性名称。
  5. 选择自定义查询,然后选择您的项目 ID。
  6. 将以下查询粘贴到查询编辑器中:

    SELECT
      *
    FROM
      `USAGE_METERING_PROJECT_ID.USAGE_METERING_DATASET_ID.COST_BREAKDOWN_TABLE_ID`
    
  7. 点击连接

创建 Looker 数据洞察信息中心

  1. GKE 用量计量信息中心复制到您的项目中。
  2. 点击 更多选项,然后点击 复制
  3. 复制此报告对话框的新数据源列表中,选择您创建的数据源。
  4. 点击复制报告

信息中心已创建,您可以在项目的 Looker 数据洞察报告列表中随时访问。

使用 Looker 数据洞察信息中心

信息中心内包含多个报告:

用量明细
此报告包含将用量计量数据发送到同一 BigQuery 数据源的所有集群的整体集群使用率。它还包含按命名空间划分的有关资源类型(例如 CPU、内存或网络出站流量)的详细信息。您可以对报告数据进行限制,以便仅显示一个或多个单独的集群或命名空间的相应数据。
包含未分配资源的用量明细
此报告与使用情况明细报告类似,但会将未分配的资源按比例分摊到所有命名空间中。未分配资源包括空闲资源,以及当前尚未通过 GKE 用量计量分配给特定租户的任何资源。
费用趋势 * 按命名空间展开细目
将用量计量数据发送到同一 BigQuery 数据源的所有集群的用量趋势(按命名空间划分)。您可以选择一个或多个单独的集群、命名空间、资源或 SKU。
费用趋势 * 按标签展开细目
将用量计量数据发送到同一 BigQuery 数据源的所有集群的费用趋势。您可以选择一个或多个单独的集群、资源、标签名称或标签值。
基于消耗量的计量
将用量计量数据发送到同一 BigQuery 数据源的所有集群的消耗量趋势。您可以选择一个或多个单独的命名空间、标签键或标签值。只有在至少一个集群上启用资源用量计量时,系统才会填充此报告。

您可以使用导航菜单更改页面。您可以使用日期选择器更改页面的时间范围。如需与组织成员共享报告或撤消访问权限,请点击 共享报告

将报告复制到项目中后,可以使用 Looker 数据洞察报告编辑器对其进行自定义。即使 Google 提供的报告模板发生变化,您的副本也不会受到影响。

使用 BigQuery 探索 GKE 用量计量数据

如需使用 BigQuery 查看有关资源请求的数据,请查询相关 BigQuery 数据集内的 gke_cluster_resource_usage 表。

如需查看有关实际资源消耗量的数据,请查询 gke_cluster_resource_consumption 表。由于不存在出站流量资源请求的概念,网络出站流量消耗量数据会保留在 gke_cluster_resource_usage 中。

如需详细了解如何在 BigQuery 中使用查询,请参阅运行查询架构中目前的字段已经稳定,但将来我们可能会添加更多字段。

这些查询都是较为简单的示例。您可以自定义查询以查找所需数据。

资源请求量查询

SELECT
  cluster_name,
  labels,
  usage
FROM
  'CLUSTER_GCP_PROJECT.USAGE_METERING_DATASET.gke_cluster_resource_usage'
WHERE
  namespace="NAMESPACE"

资源消耗量查询

SELECT
  cluster_name,
  labels,
  usage
FROM
  'CLUSTER_GCP_PROJECT.USAGE_METERING_DATASET.gke_cluster_resource_consumption'
WHERE
  namespace="NAMESPACE"

替换以下内容:

  • CLUSTER_GCP_PROJECT:您要查询的集群所在的 Google Cloud 项目的名称。
  • USAGE_METERING_DATASET:您的用量计量表的名称。
  • NAMESPACE:您的命名空间名称。

更多示例

展开以下部分以查看更复杂的示例。

BigQuery 中的 GKE 用量计量架构

下表说明了 BigQuery 数据集中 GKE 用量计量表的架构。如果您的集群运行的 GKE 版本同时支持计量资源消耗量和资源请求量,系统会另外创建一个相同架构的表

字段 类型 说明
cluster_location STRING GKE 集群所在的 Compute Engine 地区或区域的名称。
cluster_name STRING GKE 集群的名称。
namespace STRING 生成用量的 Kubernetes 命名空间。
resource_name STRING 资源的名称,例如“cpu”“内存”和“存储”。
sku_id STRING 底层 Google Cloud 云资源的 SKU ID。
start_time TIMESTAMP 使用开始时的 UNIX 时间戳。
end_time TIMESTAMP 使用结束时的 UNIX 时间戳。
fraction FLOAT 相关用量占某个云资源总量的比例。对于仅由单个命名空间使用的专用云资源,比例始终为 1.0。对于在多个命名空间之间共享的资源,比例计算方式为请求量除以底层云资源的总量。
cloud_resource_size INTEGER 底层 Google Cloud 资源的规模。例如,n1-standard-2 实例上的 vCPU 规模为 2。
labels.key STRING 与用量关联的 Kubernetes 标签的键。
labels.value STRING 与用量关联的 Kubernetes 标签的值。
project.id STRING GKE 集群所在项目的 ID。
usage.amount FLOAT 所用 usage.unit 的数量。
usage.unit STRING 用于衡量资源使用情况的基本单位。例如,标准存储空间的基本单位是字节/秒

GKE 用量计量单位必须通过以下方式进行解释:

  1. CPU usage.unit 为秒,这是 Pod 请求或利用的总 CPU 时间。例如,如果我们有两个 Pod,其中每个 Pod 请求 30 个 CPU 并运行 15 分钟,则请求表的汇总量为 54000 秒(2 个 Pod * 30 个 CPU * 15 分钟 * 60 秒 / 分钟)。

  2. 内存 usage.unit 是字节秒,这是 Pod 在一段时间内请求或利用的内存累积量。例如,如果我们有两个 Pod,其中每个 Pod 请求 30 GiB 并运行 15 分钟,则请求表的汇总量为 5.798+13 字节秒(2 个 Pod * 30 GiB * 15 分钟 * 60 秒/分钟 * 1073741824 字节/GiB)。

了解 GKE 用量计量数据何时写入 BigQuery

在以下两种情况下,GKE 用量计量会将用量记录写入 BigQuery 指标:

  1. pod 阶段更改为 succeededfailed,或者 Pod 被删除时。
  2. 当 pod 仍在运行时,达到了写入记录的每小时时间表的时间戳。

    GKE 用量计量会生成每小时时间表,以将所有当前运行的 pod 的 pod 用量记录写入 BigQuery。时间表的时间戳在所有集群中不相同。

    如果有多个 pod 在该时间戳运行,您会看到具有相同 end_time 的多个用量记录。这些用量记录的 end_time 指示每小时时间表的时间戳。

    此外,如果多个 pod 运行了数小时,您还具有一组用量记录,其中 end_time 与另一组用量记录的 start_time 匹配。

停用 GKE 用量计量

gcloud

如需在集群上停用 GKE 用量计量功能,请运行下面的命令:

gcloud container clusters update CLUSTER_NAME \
    --clear-resource-usage-bigquery-dataset

控制台

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

    转到 Google Kubernetes Engine

  2. 在要修改的集群旁边,点击 操作,然后点击 修改

  3. 功能下,点击 GKE 用量计量旁边的 修改

  4. 清除启用 GKE 用量计量

  5. 点击保存更改

后续步骤