資源度量管道

對於 Kubernetes,_指標 API_ 提供了一組基本的指標來支援自動伸縮和類似的使用場景。此 API 提供了節點和 Pod 的資源使用情況資訊,包括 CPU 和記憶體指標。如果你在叢集中部署了指標 API,Kubernetes API 客戶端就可以查詢這些資訊,並且你可以使用 Kubernetes 的訪問控制機制來管理相關許可權。

HorizontalPodAutoscaler (HPA) 和 VerticalPodAutoscaler (VPA) 使用來自指標 API 的資料來調整工作負載的副本和資源,以滿足客戶需求。

你還可以使用 kubectl top 命令檢視資源指標。

圖 1 展示了資源指標管道的架構。

flowchart RL subgraph cluster[叢集] direction RL S[

] A[Metrics-
Server] subgraph B[節點] direction TB D[cAdvisor] --> C[kubelet] E[容器
執行時] --> D E1[容器
執行時] --> D P[Pod 資料] -.- C end L[API
伺服器] W[HPA] C ---->|節點級別
資源指標| A -->|指標
API| L --> W end L ---> K[kubectl
top] classDef box fill:#fff,stroke:#000,stroke-width:1px,color:#000; class W,B,P,K,cluster,D,E,E1 box classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000 class S spacewhite classDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff; class A,L,C k8s

圖 1. 資源指標管道

架構元件,從圖中右到左,包括以下內容:

  • cAdvisor:用於收集、聚合和暴露容器指標的守護程式,整合在 Kubelet 中。

  • kubelet:用於管理容器資源的節點代理。資源指標可透過 /metrics/resource/stats kubelet API 端點訪問。

  • 節點級別資源指標:kubelet 提供的 API,用於發現和檢索透過 /metrics/resource 端點獲得的每個節點的彙總統計資訊。

  • metrics-server:叢集外掛元件,用於收集並聚合從每個 kubelet 拉取的資源指標。API 伺服器透過指標 API 提供給 HPA、VPA 和 kubectl top 命令使用。Metrics Server 是指標 API 的參考實現。

  • 指標 API:Kubernetes API,支援訪問用於工作負載自動伸縮的 CPU 和記憶體。要在叢集中實現此功能,你需要一個提供指標 API 的 API 擴充套件伺服器。

指標 API

功能狀態: Kubernetes 1.8 [beta]

metrics-server 實現了指標 API。此 API 允許你訪問叢集中節點和 Pod 的 CPU 和記憶體使用情況。其主要作用是向 K8s 自動伸縮元件提供資源使用指標。

以下是一個針對 minikube 節點的指標 API 請求示例,透過 jq 管道輸出以方便閱讀

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/minikube" | jq '.'

這是使用 curl 的相同 API 呼叫

curl https://:8080/apis/metrics.k8s.io/v1beta1/nodes/minikube

示例響應

{
  "kind": "NodeMetrics",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "name": "minikube",
    "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/minikube",
    "creationTimestamp": "2022-01-27T18:48:43Z"
  },
  "timestamp": "2022-01-27T18:48:33Z",
  "window": "30s",
  "usage": {
    "cpu": "487558164n",
    "memory": "732212Ki"
  }
}

以下是一個針對 kube-system 名稱空間中包含的 kube-scheduler-minikube Pod 的指標 API 請求示例,透過 jq 管道輸出以方便閱讀

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube" | jq '.'

這是使用 curl 的相同 API 呼叫

curl https://:8080/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube

示例響應

{
  "kind": "PodMetrics",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "name": "kube-scheduler-minikube",
    "namespace": "kube-system",
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube",
    "creationTimestamp": "2022-01-27T19:25:00Z"
  },
  "timestamp": "2022-01-27T19:24:31Z",
  "window": "30s",
  "containers": [
    {
      "name": "kube-scheduler",
      "usage": {
        "cpu": "9559630n",
        "memory": "22244Ki"
      }
    }
  ]
}

指標 API 定義在 k8s.io/metrics 倉庫中。你必須啟用 API 聚合層併為 metrics.k8s.io API 註冊一個 APIService

要了解更多關於指標 API 的資訊,請參閱 資源指標 API 設計metrics-server 倉庫資源指標 API

衡量資源使用情況

CPU

CPU 以 CPU 單位表示,測量為平均核心使用率。在 Kubernetes 中,一個 CPU 相當於雲提供商的 1 個 vCPU/核心,以及裸金屬 Intel 處理器上的 1 個超執行緒。

此值是透過對核心(在 Linux 和 Windows 核心中)提供的累積 CPU 計數器進行速率計算得出的。用於計算 CPU 的時間視窗在指標 API 的視窗欄位中顯示。

要了解 Kubernetes 如何分配和衡量 CPU 資源,請參閱 CPU 的含義

記憶體

記憶體以工作集大小報告,以位元組為單位,在收集指標的瞬間測量。

在理想情況下,“工作集”是指在記憶體壓力下無法釋放的正在使用的記憶體量。然而,工作集的計算因主機作業系統而異,並且通常大量使用啟發式方法來生成估計值。

Kubernetes 容器工作集模型期望容器執行時計算與該容器相關的匿名記憶體。工作集指標通常也包括一些快取(檔案支援)記憶體,因為主機作業系統不能總是回收頁面。

要了解 Kubernetes 如何分配和衡量記憶體資源,請參閱 記憶體的含義

指標伺服器

metrics-server 從 kubelet 獲取資源指標,並透過指標 API 將其暴露在 Kubernetes API 伺服器中,供 HPA 和 VPA 使用。你還可以使用 kubectl top 命令檢視這些指標。

metrics-server 使用 Kubernetes API 來跟蹤叢集中的節點和 Pod。metrics-server 透過 HTTP 查詢每個節點以獲取指標。metrics-server 還構建了 Pod 元資料的內部檢視,並維護 Pod 健康狀態的快取。該快取的 Pod 健康資訊可透過 metrics-server 提供的擴充套件 API 獲得。

例如,對於 HPA 查詢,metrics-server 需要識別哪些 Pod 符合部署中的標籤選擇器。

metrics-server 呼叫 kubelet API 從每個節點收集指標。根據 metrics-server 版本,它使用:

  • v0.6.0+ 版本中的指標資源端點 /metrics/resource
  • 舊版本中的摘要 API 端點 /stats/summary

下一步

要了解更多關於 metrics-server 的資訊,請參閱 metrics-server 倉庫

你還可以檢視以下內容:

要了解 kubelet 如何提供節點指標,以及如何透過 Kubernetes API 訪問這些指標,請閱讀 節點指標資料

上次修改時間:2024 年 8 月 31 日太平洋標準時間晚上 8:50:更新 resource-metrics-pipeline.md (d984d503ed)