全部產品
Search
文件中心

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

更新時間:Nov 28, 2024

您可以通過Cost API查詢叢集指定命名空間或Pod在指定時間周期內的即時估算成本和資源監控資料。

前提條件

已參見通過API擷取成本資料概述的前提條件章節完成準備工作。

成本資料匯出命令

串連叢集後,您可以執行命令擷取成本資料。擷取成本資料的命令參數如下。

參數

描述

DimensionType

成本統計維度,預設為叢集下所有Pod。取值:

  • Namespace:按照命名空間維度擷取應用的成本。

  • Pod:按照Pod維度擷取應用的成本。

Dimension

成本篩選值,若填寫即指定請求某個維度值。

  • 當設定DimensionType為Namespace時,存在以下情況。

    • 若不填寫Dimension,將返回所有命名空間的成本資料。

    • 若設定為Dimension=A Namespace時,則只返回A命名空間的成本資料。

    • 若設定LabelSelector,則會返回LabelSelector篩選後的資料。

  • 當設定DimensionType為Pod時,存在以下情況。

    • 若不填寫Dimension,將返回所有Pod的成本資料。

    • 若設定為Dimension=A Pod時,則只返回A Pod的成本資料。

      說明

      您也可以選擇多個Pod,使用英文半形逗號(,)隔開,例如Dimension=pod=node-exporter-7vtmj,pod=node-exporter-cn54q

    • 若設定LabelSelector,則會返回LabelSelector篩選後的資料。

LabelSelector

通過應用(app)標籤篩選Pod,擷取篩選後的成本資料。

TimeUnit

成本資料統計時間。可選值包括hourdayweekmonth,預設為hour

Summary

設定為true時,將返回篩選後的Pod資料總和。預設為false

成本資料指標

  • cpu:單位為核。

  • gpu:單位為卡。

  • memory:單位為KB。

  • perCorePricing:當前Pod或所查詢應用所在的節點的單位CPU核的價格,中國站單位為¥,國際站單位為$。

  • costRatio:當前Pod或所查詢應用占整個叢集成本比例,例如值為0.2時,表明所選應用的成本佔總叢集成本的20%。

  • cost:當前Pod或所查詢應用在查詢時間範圍內的成本,中國站單位為¥,國際站單位為$。

  • customCost:當前Pod或所查詢應用在查詢時間範圍內的定價成本。

擷取成本資料命令

樣本一:擷取叢集所有Pod資料最近一小時的成本資料

擷取命令

kubectl get --raw "/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/cost"

預期輸出

展開查看預期輸出

[
  {
    "metadata": {
      "timestamp": "2023-02-14T03:27:18Z",
      "timeUnit": "hour",
      "DimensionType": "",
      "Dimension": "",
      "PodName": "arms-springboot-demo-subcomponent-7f94c7f597-5l8tc"
    },
    "request": {
      "cpu": 0.5,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0.022,
      "memory": 1538784,
      "gpu": 0,
      "gpuMem": 0
    },
    "limit": {
      "cpu": 0,
      "memory": 0.5,
      "gpu": 0,
      "gpuMem": 0
    },
    "perCorePricing": 0.2,
    "costRatio": 0.010671219720414044,
    "cost": 0.1
  },
  {
    "metadata": {
      "timestamp": "2023-02-14T03:27:18Z",
      "timeUnit": "hour",
      "DimensionType": "",
      "Dimension": "",
      "PodName": "thanos-query-74cfcd459f-pf54n"
    },
    "request": {
      "cpu": 0.1,
      "memory": 131072,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0.001,
      "memory": 90780,
      "gpu": 0,
      "gpuMem": 0
    },
........

樣本二:擷取某一個命名空間所有Pod的資料最近一小時的成本資料

樣本說明

擷取default命名空間所有Pod最近一小時的成本資料。請替換命名空間取值為實際命名空間名稱。

擷取命令

kubectl get --raw "/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/cost?DimensionType=Namespace&Dimension=default"| jq .

預期輸出

展開查看預期輸出

[
  {
    "metadata": {
      "timestamp": "2023-02-14T04:08:15Z",
      "timeUnit": "hour",
      "DimensionType": "Namespace",
      "Dimension": "default",
      "PodName": "test60-test-chart-v2-5cd85b946c-ntcct"
    },
    "request": {
      "cpu": 0,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0,
      "memory": 18336,
      "gpu": 0,
      "gpuMem": 0
    },
    "limit": {
      "cpu": 0,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "perCorePricing": 0,
    "costRatio": 0,
    "cost": 0
  },
  {
    "metadata": {
      "timestamp": "2023-02-14T04:08:15Z",
      "timeUnit": "hour",
      "DimensionType": "Namespace",
      "Dimension": "default",
      "PodName": "nginx"
    },
    "request": {
      "cpu": 0,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
.......

樣本三:擷取某一個Pod最近一小時的成本資料

樣本說明

擷取名為nginx-deployment-basic-75d6678cbb-lg8v5的Pod的最近一小時的成本資料。請替換Pod名稱為實際的Pod名稱。

擷取命令

kubectl get --raw "/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/cost?DimensionType=Pod&Dimension=pod=nginx-deployment-basic-75d6678cbb-lg8v5"| jq .

預期輸出

展開查看預期輸出

[
  {
    "metadata": {
      "timestamp": "2023-02-14T04:09:50Z",
      "timeUnit": "hour",
      "DimensionType": "Pod",
      "Dimension": "pod=nginx-deployment-basic-75d6678cbb-lg8v5",
      "PodName": "nginx-deployment-basic-75d6678cbb-lg8v5"
    },
    "request": {
      "cpu": 0.5,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0.002,
      "memory": 50148,
      "gpu": 0,
      "gpuMem": 0
    },
    "limit": {
      "cpu": 0,
      "memory": 0.5,
      "gpu": 0,
      "gpuMem": 0
    },
    "perCorePricing": 0.2,
    "costRatio": 0.010671219720414044,
    "cost": 0.1
  }
]

樣本四:通過LabelSelector篩選的方式擷取成本資料

樣本說明

LabelSelector與DimensionType可以同時作為篩選條件使用,兩個條件為“且”的關係。以下樣本為擷取帶有Labelapp=sample-app的所有Pod的最近一小時的成本資料。請將應用標籤替換為實際標籤。

擷取命令

kubectl get --raw "/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/cost?LabelSelector=app=nginx"| jq .

預期輸出

展開查看預期輸出

[
  {
    "metadata": {
      "timestamp": "2023-02-14T04:10:24Z",
      "timeUnit": "hour",
      "DimensionType": "",
      "Dimension": "",
      "PodName": "nginx-deployment-basic-75d6678cbb-lg8v5"
    },
    "request": {
      "cpu": 0.5,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0.002,
      "memory": 50148,
      "gpu": 0,
      "gpuMem": 0
    },
    "limit": {
      "cpu": 0,
      "memory": 0.5,
      "gpu": 0,
      "gpuMem": 0
    },
    "perCorePricing": 0.2,
    "costRatio": 0.010671219720414044,
    "cost": 0.1
  },
  {
    "metadata": {
      "timestamp": "2023-02-14T04:10:24Z",
      "timeUnit": "hour",
      "DimensionType": "",
      "Dimension": "",
      "PodName": "nginx-675b8d6f54-vqxvd"
    },
    "request": {
      "cpu": 0.25,
      "memory": 524288,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0,
      "memory": 13548,
      "gpu": 0,
      "gpuMem": 0
    },
    "limit": {
      "cpu": 0,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "perCorePricing": 0.2,
    "costRatio": 0.005335609860207022,
    "cost": 0.05
  },
  {
    "metadata": {
      "timestamp": "2023-02-14T04:10:25Z",
      "timeUnit": "hour",
      "DimensionType": "",
      "Dimension": "",
      "PodName": "nginx-deployment-basic-7456bcd48d-r87rz"
    },
    "request": {
      "cpu": 0,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0,
      "memory": 223492,
      "gpu": 0,
      "gpuMem": 0
    },
    "limit": {
      "cpu": 0,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "perCorePricing": 0,
    "costRatio": 0,
    "cost": 0
  }
]

樣本五:擷取最近1天的Pod資料

樣本說明

擷取名為nginx-deployment-basic-75d6678cbb-lg8v5的Pod的最近一天的成本資料。請替換Pod名稱為實際Pod名稱。

擷取命令

kubectl get --raw "/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/cost?DimensionType=Pod&Dimension=pod=nginx-deployment-basic-75d6678cbb-lg8v5&TimeUnit=day"| jq .

預期輸出

展開查看預期輸出

[
  {
    "metadata": {
      "timestamp": "2023-02-14T04:11:04Z",
      "timeUnit": "day",
      "DimensionType": "Pod",
      "Dimension": "pod=nginx-deployment-basic-75d6678cbb-lg8v5",
      "PodName": "nginx-deployment-basic-75d6678cbb-lg8v5"
    },
    "request": {
      "cpu": 0.5,
      "memory": 0,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0.001,
      "memory": 50196,
      "gpu": 0,
      "gpuMem": 0
    },
    "limit": {
      "cpu": 0,
      "memory": 0.5,
      "gpu": 0,
      "gpuMem": 0
    },
    "perCorePricing": 0.2,
    "costRatio": 0.010571112959515542,
    "cost": 2.402
  }
]

樣本六:擷取某一命名空間的成本資料總量

樣本說明

擷取default命名空間的成本資料總量。請替換命名空間名稱為實際命名空間。

擷取命令

kubectl get --raw "/api/v1/namespaces/kube-system/services/ack-metrics-adapter-api-service:8080/proxy/cost?DimensionType=Namespace&Dimension=default&Summary=true"| jq .

預期輸出

展開查看預期輸出

[
  {
    "metadata": {
      "timestamp": "2023-02-14T04:12:48Z",
      "timeUnit": "hour",
      "DimensionType": "Namespace",
      "Dimension": "default",
      "PodName": ""
    },
    "request": {
      "cpu": 12,
      "memory": 7045120,
      "gpu": 0,
      "gpuMem": 0
    },
    "usage": {
      "cpu": 0.053,
      "memory": 4901208,
      "gpu": 0,
      "gpuMem": 0
    },
    "limit": {
      "cpu": 0,
      "memory": 6553600,
      "gpu": 0,
      "gpuMem": 0
    },
    "perCorePricing": 4.061,
    "costRatio": 0.01609432143753053,
    "cost": 3.657
  }
]

相關文檔

  • Cost V2 API支援設定更靈活的時間範圍,提供Pod、Namespace、Label、Controller、Controller Kind等維度即時估算成本查詢,請參見通過Cost V2 API擷取

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