資源指標管線
對於 Kubernetes 而言,指標 API 提供了一組基本指標,以支援自動擴展和類似的用例。此 API 提供有關節點和 Pod 的資源使用資訊,包括 CPU 和記憶體指標。如果您將指標 API 部署到叢集中,Kubernetes API 的用戶端接著可以查詢此資訊,並且您可以使用 Kubernetes 的存取控制機制來管理執行此操作的權限。
HorizontalPodAutoscaler (HPA) 和 VerticalPodAutoscaler (VPA) 使用來自指標 API 的資料來調整工作負載複本和資源,以滿足客戶需求。
您也可以使用 kubectl top
命令來檢視資源指標。
注意
Metrics API 及其啟用的指標管線僅提供最基本的 CPU 和記憶體指標,以使用 HPA 和/或 VPA 實現自動擴展。如果您想要提供更完整的指標集,您可以部署第二個使用自訂指標 API 的指標管線,以補充更簡單的 Metrics API。圖 1 說明了資源指標管線的架構。
] 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 擴充伺服器。
注意
cAdvisor 支援從 cgroup 讀取指標,這適用於 Linux 上典型的容器執行階段。如果您使用的容器執行階段使用其他資源隔離機制,例如虛擬化,則該容器執行階段必須支援 CRI 容器指標,指標才能供 kubelet 使用。
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。
注意
您必須部署 metrics-server 或提供 Metrics 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 存取這些指標,請閱讀節點指標資料。