您可以通過Cost V2 API查詢叢集工作負載的即時估算成本。Cost V2 API支援設定更為靈活的時間範圍,對Pod、命令空間、Label、Controller(Controller名稱,例如csi-plugin等)、Controller Kind(Controller類型,例如ReplicaSet、DaemonSet、Job等)等維度資源進行過濾查詢,可用於即時成本趨勢分析。
前提條件
已參見通過API擷取成本資料概述的前提條件章節完成準備工作。
請求和返回參數
請求文法
GET /v2/cost請求參數
名稱 | 類型 | 是否必選 | 描述 |
window | string | 是 | 查詢的期間。接受以下幾種格式的輸入:
|
filter | string | 否 | 對指定資源類別進行過濾。支援的類別包括:
同一個類別支援指定多個過濾項,使用英文半形逗號(,)分隔,例如 同時,支援多欄位組合過濾,使用 |
step | string | 否 | 對返回結果按時間段切分為多個成本集,step描述單個成本集的期間,例如“1d”、“1w”。如果未指定,預設為 說明 成本集指一個時間段內Kubernetes對象成本的集合,例如一個Pod在期間內的成本集合。 |
aggregate | string | 否 | 對返回結果按照不同維度進行彙總。支援的類別包括:
|
idle | boolean | 否 | 是否展示或處理閑置成本。預設為true。 |
shareIdle | boolean | 否 | 是否將閑置成本分攤到各個資源。預設為false。 |
shareSplit | string | 否 | 閑置分攤策略。支援的類別包括:
|
idleByNode | boolean | 否 | 是否將閑置成本按節點維度彙總。僅在aggregate參數設定為node且shareIdle參數為false時生效。預設值為 false。 |
format | string | 否 | 成本匯出格式。支援的類別包括:
|
返回參數
名稱 | 類型 | 描述 |
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%的成本估算策略。如需自訂資源成本權重,請參見以下步驟。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在Helm頁面的操作列,單擊ack-alibaba-cloud-metrics-adapter對應的更新。
在YAML中,修改
AlibabaCloudMetricsAdapter.costWeights(預設值為:{"cpu": "1.0", "memory": "0.0"}),然後單擊確定。
關於權重混合(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格式)
樣本二:擷取某個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格式)
樣本三:擷取所有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格式)
相關文檔
Allocation API結合賬單資料,提供了分攤後的賬單費用,可用於對賬,請參見通過Allocation API擷取。