資源指標管線

對於 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[指標
伺服器] 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 伺服器提供 Metrics API,供 HPA、VPA 和 kubectl top 命令使用。Metrics Server 是 Metrics API 的參考實作。

  • Metrics API:Kubernetes API,支援存取用於工作負載自動擴展的 CPU 和記憶體。為了使此功能在您的叢集中運作,您需要一個提供 Metrics API 的 API 擴充伺服器。

Metrics API

功能狀態: Kubernetes 1.8 [beta]

metrics-server 實作了 Metrics API。此 API 允許您存取叢集中節點和 Pod 的 CPU 和記憶體使用量。其主要作用是將資源使用量指標饋送給 K8s 自動擴展元件。

以下是針對 minikube 節點的 Metrics API 請求範例,透過 jq 管道傳輸以方便閱讀

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

以下是使用 curl 的相同 API 呼叫

curl http://localhost: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 的 Metrics API 請求範例,透過 jq 管道傳輸以方便閱讀

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

以下是使用 curl 的相同 API 呼叫

curl http://localhost: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"
      }
    }
  ]
}

Metrics API 在 k8s.io/metrics 儲存庫中定義。您必須啟用 API 聚合層 並為 metrics.k8s.io API 註冊 APIService

若要瞭解更多關於 Metrics API 的資訊,請參閱 資源指標 API 設計metrics-server 儲存庫資源指標 API

測量資源使用量

CPU

CPU 回報為以 CPU 單位測量的平均核心使用量。在 Kubernetes 中,一個 CPU 相當於雲端供應商的 1 個 vCPU/核心,以及裸機 Intel 處理器上的 1 個超執行緒。

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

若要瞭解更多關於 Kubernetes 如何分配和測量 CPU 資源的資訊,請參閱CPU 的意義

記憶體

記憶體回報為收集指標時的工作集,以位元組為單位測量。

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

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

若要瞭解更多關於 Kubernetes 如何分配和測量記憶體資源的資訊,請參閱記憶體的意義

Metrics Server

metrics-server 從 kubelet 提取資源指標,並透過 Metrics 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 PST:Update resource-metrics-pipeline.md (d984d503ed)