全部產品
Search
文件中心

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

更新時間:Dec 06, 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

format

string

成本匯出格式。支援的類別包括:

  • json(預設值)

  • csv

返回參數

名稱

類型

描述

properties

object

描述關聯Kubernetes對象的屬性。

pod

string

Pod名稱。

namespace

string

命名空間。

controllerKind

string

控制器類型。

controller

string

控制器名稱。

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
      }
    }
  ]
}

相關文檔

Allocation API結合賬單資料,提供了分攤後的賬單費用,可用於對賬,請參見通過Allocation API擷取