全部產品
Search
文件中心

Container Service for Kubernetes:通過Cost V2 API擷取成本資料

更新時間:Dec 28, 2024

您可以通過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. 登入Container Service管理主控台,在左側導覽列選擇叢集

  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擷取