了解集群资源用量


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

概览

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

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

GKE 用量计量适用于类似以下的情景:

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

在初始 Beta 版基础上做出的更改

自初始 Beta 版发布以来,GKE 用量计量功能发生了以下变化:

  • 现在,除了资源请求量之外,该功能还会跟踪实际资源消耗量。对于运行 v1.12.8-gke.8 及更高版本、v1.13.6-gke.7 及更高版本或 1.14.2-gke.8 及更高版本的集群,系统会跟踪资源消耗量。资源消耗量计量数据存储在 BigQuery 数据集的 gke_cluster_resource_consumption 表中。之前,该功能只会跟踪资源请求量。
  • 该功能现在跟踪 TPU 请求量(但不会跟踪实际资源消耗量)。
  • 您现可跟踪使用自定义机器类型的节点上的资源请求量和实际资源消耗量。
  • 现在,您在 Google Cloud Console 中创建或更新集群时即可启用 GKE 用量计量功能。
  • 如果相应的 BigQuery 表格被删除,GKE 用量计量现在会自动重新创建此数据集,不过其中存储的历史数据会丢失。
  • 如果相应的 BigQuery 数据集被删除,GKE 用量计量将不会自动重新创建此数据集。用户需要确保此数据集确实存在。

升级

所有更改均向后兼容初始 Beta 版,无需修改或迁移数据。

当您将集群升级到支持资源消耗量计量功能的 GKE 版本时,系统并不会自动启用该功能。您必须使用 --enable-resource-consumption-metering 标志来明确启用这项功能。系统会自动在 BigQuery 数据集中创建一个额外的表。两个表使用相同的架构

升级后,您只需创建新的数据洞察信息中心即可添加有关实际资源消耗量的信息。

限制

您可以使用示例 BigQuery 查询和 Google 数据洞察模板将 GKE 用量计量数据与 BigQuery 中导出的 Google Cloud 结算数据相结合,以估算按集群、命名空间和标签划分的费用明细。GKE 用量计量数据纯粹属于建议性参考数据,不会影响您的 Google Cloud 结算费用。对于结算数据,请以 Google Cloud 结算发票为准。

存在以下限制:

  • Windows Server 节点不支持网络出站流量跟踪功能。
  • 不计入任何特殊合同折扣和赠金。
  • 在 GKE 范围之外创建的资源不能按命名空间或标签进行跟踪。
  • 只有使用情况报告才能跟踪来自 Pod 和 PersistentVolumeClaim 对象的标签。
  • 仅支持 pd-standard 和 pd-ssd 磁盘类型
  • 数据洞察不支持具备爆发能力的机器类型的可视化。
  • 您无法使用共享 VPC 或 VPC 对等互连进行网络出站流量计量

前提条件

在使用 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,那么系统已经为您完成了此步骤。

启用 GKE 用量计量功能

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

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

您还可以选择创建一个 Google 数据洞察信息中心,以便直观地呈现集群的资源用量。

创建 BigQuery 数据集

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

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

为集群启用 GKE 用量计量

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

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

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

创建新集群

您可以使用 gcloud 工具或 Google Cloud Console 创建集群。

gcloud

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

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

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

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

控制台

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

  1. 转到 Cloud Console 中的 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. 转到 Cloud Console 中的 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 Console 中启用 GKE 用量计量时选择启用网络出站流量计量

如需停用网络出口计量,请在使用命令行更新集群时添加标志 --no-enable-network-egress-metering,或者在 Google Cloud Console 中集群的 GKE 使用计量部分取消选择启用网络出口计量

验证已启用 GKE 用量计量

如需验证集群已经启用了 GKE 用量计量,以及哪个 BigQuery 数据集用于存储集群的资源用量数据,请使用 gcloud container clusters describe 命令。

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

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

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

停用 GKE 用量计量

gcloud

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

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

控制台

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Engine

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

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

  4. 清除启用 GKE 用量计量

  5. 点击保存更改

选择一个或多个 BigQuery 数据集

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

  • 为整个项目使用同一数据集可简化管理。
  • 一个集群一个数据集可让您分配对数据集的细粒度访问权。
  • 一个相关集群组一个数据集可让您根据自己的需要,找到适当的简单性和粒度级别组合。

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

您可以使用数据洞察信息中心直观呈现 GKE 用量计量数据,以便按照集群名称、命名空间或标签过滤数据,并动态调整报告期。如果您是数据洞察和 BigQuery 的高级用户,则可以创建完全自定义的信息中心,不过也可以直接克隆我们专门为 GKE 用量计量创建的信息中心。

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

前提条件

  1. 启用将 Google Cloud 结算数据导出到 BigQuery (Exporting Google Cloud billing data to BigQuery)(如果尚未启用)。在此过程中,您将创建一个数据集,但数据集中的表最多需要 5 小时才能显示并开始填充。在表格出现时,其名称为 gcp_billing_export_v1_BILLING_ACCOUNT_ID
  2. 在项目中的至少一个集群上启用 GKE 用量计量。请记下您为 BigQuery 数据集选择的名称。
  3. 启用数据洞察(如果尚未启用)。
  4. 请收集配置信息中心所需的以下信息

    • Cloud Billing 导出数据集 ID 和数据表
    • GKE 用量计量数据集 ID
  5. 至少拥有 2.0.58 版的 BigQuery CLI。您可以运行 bq version 以检查版本,然后运行 gcloud components update 以更新 BigQuery CLI。

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

创建 BigQuery 费用明细表

  1. 下载查询模板:

  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 中创建的数据集的名称。
    • YOUR_USAGE_METERING_START_DATE:查询的开始日期,格式为 YYYY-MM-DD
    • YOUR_COST_BREAKDOWN_TABLE_ID:用作数据洞察输入的新表的名称。
    • YOUR_TEMPLATE_PATH:您下载的查询模板的名称。
    • YOUR_RENDERED_QUERY_PATH:所呈现查询的路径的名称。

    例如:

    export GCP_BILLING_EXPORT_TABLE_FULL_PATH=my-billing-project.my_billing_export.gcp_billing_export_v1_xxxx
    export USAGE_METERING_PROJECT_ID=my-billing-project
    export USAGE_METERING_DATASET_ID=my_billing_export
    export USAGE_METERING_START_DATE=2020-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. 访问数据源
  2. 点击屏幕右下角附近的 + 图标以添加数据源。
  3. 选择 BigQuery
  4. 选择自定义查询,然后选择您的项目 ID。
  5. 命名您的数据源。点击屏幕顶部的无标题数据源字样,然后使用说明性名称替换这段文本。
  6. 将以下查询粘贴到查询编辑器中。

    SELECT
      *
    FROM
      `PROJECT_ID.USAGE_METERING_DATASET.COST_BREAKDOWN_TABLE_ID`
    
  7. 点击屏幕右上角的关联

创建数据洞察信息中心

我们创建了一个可供您复制到您的项目中的信息中心。复制信息中心时,系统会提示您选择刚刚创建的三个数据源。

  1. 点击此信息中心链接
  2. 点击屏幕右上角的复制按钮 创建此报告图标的副本
  3. 对于数据源,请选择刚刚创建的数据源。
  4. 点击创建报告

信息中心已创建,您可以在项目的 Data Studio 报告列表中随时访问。

使用数据洞察信息中心

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

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

您可以使用屏幕左上角附近的箭头翻页。您可以使用日期选择器更改页面的时间范围。如需与组织成员共享报告或撤消访问权限,请点击共享报告链接,该链接形似带有 + 符号的人。

将报告复制到项目中后,可以使用数据洞察报告编辑器对其进行自定义。 即使 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_NAME"

资源消耗量查询

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

更多示例

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

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 分钟 * 1073741824 字节 / GiB)。

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

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

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

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

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

    此外,如果多个 pod 运行了数小时,您还会在 BigQuery 表中发现一组用量记录的 end_time 与另一组用量记录的 start_time 匹配。

后续步骤