全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:通过Cost V2 API获取成本数据

更新时间:Jan 08, 2025

您可以通过Cost V2 API查询集群工作负载的实时估算成本。Cost V2 API支持设定更为灵活的时间范围,对Pod、命令空间、Label、Controller(Controller名称,例如csi-plugin等)、Controller Kind(Controller类型,例如ReplicaSet、DaemonSet、Job等)等维度的资源进行过滤查询,可用于实时成本趋势分析。

前提条件

已参见通过API获取成本数据概述的前提条件章节完成准备工作。

请求和返回参数

请求语法

GET /v2/cost

请求参数

名称

类型

是否必选

描述

window

string

查询的持续时间。接受以下几种格式的输入:

  • 关键词:如“today”、“week”、“month”、“yesterday”、“lastweek”、“lastmonth”。

  • 持续时间:如“30m”、“12h”、“7d”。

  • RFC3339日期:逗号分隔的RFC3339格式的日期对,如“2024-03-26T00:00:00Z,2024-03-27T00:00:00Z”。

  • Unix时间戳:逗号分隔的Unix时间戳(秒)对,例如“1711382400,1711468800”。

filter

string

对指定资源类别进行过滤。支持的类别包括:

  • namespace

  • controllerName(例如csi-plugin、node-exporter

    等)

  • controllerKind(例如ReplicaSet、DaemonSet、Job等)

  • pod

  • label(例如[app]:"nginx"

同一个类别支持指定多个过滤项,使用英文半角逗号(,)分隔,例如namespace:"default","kube-system"

同时,支持多字段组合过滤,使用+分隔,例如namespace:"default"+label[app]:"nginx"

step

string

对返回结果按时间段切分为多个成本集,step描述单个成本集的持续时间,例如“1d”、“1w”。如果未指定,默认为window的时间范围。

说明

成本集指一个时间段内Kubernetes对象成本的集合,例如一个Pod在持续时间内的成本集合。

aggregate

string

对返回结果按照不同维度进行聚合。支持的类别包括:

  • namespace

  • controller

  • controllerKind

  • label:<name>

  • node

idle

boolean

是否展示或处理闲置成本。默认为true。

shareIdle

boolean

是否将闲置成本分摊到各个资源。默认为false。

shareSplit

string

闲置分摊策略。支持的类别包括:

  • weighted(默认值)

  • even

idleByNode

boolean

是否将闲置成本按节点维度聚合。仅在aggregate参数设置为node且shareIdle参数为false时生效。默认值为 false。

format

string

成本导出格式。支持的类别包括:

  • json(默认值)

  • csv

返回参数

名称

类型

描述

properties

object

描述关联Kubernetes对象的属性。

pod

string

Pod名称。

node

string

节点名称。

namespace

string

命名空间。

controllerKind

string

控制器类型。

controller

string

控制器名称。

providerID

string

节点对应ECS实例ID。

labels

map[string]string

Pod标签。

说明

Prometheus仅支持在label中使用下划线“_”。如果您的label中包含“-”、“.”等符号,Prometheus会将其转换为下划线“_”。

start

string

成本集的开始时间。

end

string

成本集的结束时间。

cpuCoreRequestAverage

float

请求的平均CPU核心数。

cpuCoreUsageAverage

float

使用的平均CPU核心数。

ramByteRequestAverage

float

请求的平均内存量。

ramByteUsageAverage

float

使用的平均内存量。

cost

float

估算成本。默认成本估算策略为CPU权重100%,自定义资源权重请参见成本估算策略介绍

costRatio

float

成本占比。描述当前成本占集群总成本的比例。

customCost

float

自定义成本。

(可选)步骤一:自定义资源成本权重

Cost V2 API默认使用CPU权重100%的成本估算策略。如需自定义资源成本权重,请参见以下步骤。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm页面的操作列,单击ack-alibaba-cloud-metrics-adapter对应的更新

  4. 在YAML中,修改AlibabaCloudMetricsAdapter.costWeights(默认值为:{"cpu": "1.0", "memory": "0.0"}),然后单击确定

    image

    关于权重混合(CPU-内存混合)资源估算策略,请参见成本估算策略介绍

步骤二:获取成本数据

本小节使用curl命令访问Kubernetes API。具体操作,请参见使用Kubernetes API

示例一:获取某个DaemonSet昨天的估算成本明细

获取命令

curl -G -k --cert ./client-cert.pem --key ./client-key.pem \
-d 'window=yesterday' \
-d 'filter=namespace:"kube-system"+controllerKind:"DaemonSet"+label[app]:"terway-eniip"' \
"$APISERVER/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/v2/cost" | jq .

返回示例(JSON格式)

展开查看返回示例

{
  "data": [
    {
      "kube-system/terway-eniip-88286": {
        "name": "kube-system/terway-eniip-88286",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-88286"
        },
        "start": "2024-03-25T00:00:00+08:00",
        "end": "2024-03-26T00:00:00+08:00",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 65815511.04,
        "cost": 1.622,
        "costRatio": 0.016,
        "customCost": 0.972
      },
      "kube-system/terway-eniip-fqxk8": {
        "name": "kube-system/terway-eniip-fqxk8",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-fqxk8"
        },
        "start": "2024-03-25T00:00:00+08:00",
        "end": "2024-03-26T00:00:00+08:00",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 72787722.24,
        "cost": 1.622,
        "costRatio": 0.016,
        "customCost": 0.972
      },
      "kube-system/terway-eniip-xjsr8": {
        "name": "kube-system/terway-eniip-xjsr8",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-xjsr8"
        },
        "start": "2024-03-25T00:00:00+08:00",
        "end": "2024-03-26T00:00:00+08:00",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 53661380.923,
        "cost": 0.843,
        "costRatio": 0.008,
        "customCost": 0.505
      }
    }
  ]
}

示例二:获取某个Pod三小时内的估算成本明细,成本集按小时维度拆分

获取命令

curl -G -k --cert ./client-cert.pem --key ./client-key.pem \
-d 'window=2024-03-24T00:00:00Z,2024-03-24T03:00:00Z' \
-d 'step=1h' \
-d 'filter=namespace:"kube-system"+pod:"terway-eniip-kz68n"' \
"$APISERVER/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/v2/cost" | jq .

返回示例(JSON格式)

展开查看返回示例

{
  "data": [
    {
      "kube-system/terway-eniip-kz68n": {
        "name": "kube-system/terway-eniip-kz68n",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-kz68n"
        },
        "start": "2024-03-24T00:00:00Z",
        "end": "2024-03-24T01:00:00Z",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 63583378.285,
        "cost": 0.075,
        "costRatio": 0.025,
        "customCost": 0.045
      }
    },
    {
      "kube-system/terway-eniip-kz68n": {
        "name": "kube-system/terway-eniip-kz68n",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-kz68n"
        },
        "start": "2024-03-24T01:00:00Z",
        "end": "2024-03-24T02:00:00Z",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 63111168,
        "cost": 0.075,
        "costRatio": 0.025,
        "customCost": 0.045
      }
    },
    {
      "kube-system/terway-eniip-kz68n": {
        "name": "kube-system/terway-eniip-kz68n",
        "properties": {
          "controller": "terway-eniip",
          "controllerKind": "DaemonSet",
          "namespace": "kube-system",
          "pod": "terway-eniip-kz68n"
        },
        "start": "2024-03-24T02:00:00Z",
        "end": "2024-03-24T03:00:00Z",
        "cpuCoreRequestAverage": 0.35,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 209715200,
        "ramByteUsageAverage": 63430656,
        "cost": 0.075,
        "costRatio": 0.025,
        "customCost": 0.045
      }
    }
  ]
}

示例三:获取所有Label Key为app的应用成本,成本集按Label Value进行聚合

获取命令

curl -G -k --cert ./client-cert.pem --key ./client-key.pem \
-d 'window=2h' \
-d 'aggregate=label:app' \
"$APISERVER/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/v2/cost" | jq .

返回示例(JSON格式)

展开查看返回示例

{
  "data": [
    {
      "__idle__": {
        "name": "__idle__",
        "start": "2024-12-17T09:50:30+08:00",
        "end": "2024-12-17T11:50:30+08:00",
        "cpuCoreRequestAverage": 0,
        "cpuCoreUsageAverage": 0,
        "ramByteRequestAverage": 0,
        "ramByteUsageAverage": 0,
        "cost": 3.8230000000000004,
        "costRatio": 0.6371666666666664,
        "customCost": 0
      },
      "__unallocated__": {
        "name": "__unallocated__",
        "start": "2024-12-17T09:50:30+08:00",
        "end": "2024-12-17T11:50:30+08:00",
        "cpuCoreRequestAverage": 1.135,
        "cpuCoreUsageAverage": 0.024,
        "ramByteRequestAverage": 1901068288,
        "ramByteUsageAverage": 646283264,
        "cost": 0.6000000000000001,
        "costRatio": 0.09999999999999999,
        "customCost": 0
      },
      "ack-alibaba-cloud-metrics-adapter": {
        "name": "ack-alibaba-cloud-metrics-adapter",
        "start": "2024-12-17T09:50:30+08:00",
        "end": "2024-12-17T11:50:30+08:00",
        "cpuCoreRequestAverage": 0.24,
        "cpuCoreUsageAverage": 0.004,
        "ramByteRequestAverage": 482344960,
        "ramByteUsageAverage": 96964608,
        "cost": 0.064,
        "costRatio": 0.010666666666666666,
        "customCost": 0
      },
      "terway-eniip": {
        "name": "terway-eniip",
        "start": "2024-12-17T09:50:30+08:00",
        "end": "2024-12-17T11:50:30+08:00",
        "cpuCoreRequestAverage": 1.0499999999999998,
        "cpuCoreUsageAverage": 0.001,
        "ramByteRequestAverage": 629145600,
        "ramByteUsageAverage": 122054656,
        "cost": 0.5609999999999999,
        "costRatio": 0.0935,
        "customCost": 0
      },
      ... ...
      
    }
  ]
}

相关文档

Allocation API结合账单数据,提供了分摊后的账单费用,可用于对账,请参见通过Allocation API获取