本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes 中的資源使用監控

瞭解應用程式部署後的行為對於擴充套件應用程式和提供可靠的服務至關重要。在 Kubernetes 叢集中,應用程式效能可以在許多不同級別進行檢查:容器、Pod服務和整個叢集。作為 Kubernetes 的一部分,我們希望為使用者提供有關其執行應用程式在所有這些級別的詳細資源使用資訊。這將使使用者深入瞭解其應用程式的效能以及可能存在的應用程式瓶頸。這就是 Heapster,一個旨在為 Kubernetes 提供基礎監控平臺的專案。

概述

Heapster 是叢集範圍的監控和事件資料聚合器。它目前原生支援 Kubernetes,並適用於所有 Kubernetes 設定。Heapster 作為 Pod 在叢集中執行,類似於任何 Kubernetes 應用程式的執行方式。Heapster Pod 發現叢集中的所有節點,並從節點的 Kubelet(機器上的 Kubernetes 代理)查詢使用資訊。Kubelet 本身從 cAdvisor 獲取資料。Heapster 將資訊按 Pod 和相關標籤分組。然後,這些資料被推送到可配置的後端進行儲存和視覺化。目前支援的後端包括 InfluxDB(與 Grafana 用於視覺化)、Google Cloud Monitoring 以及此處詳細描述的許多其他後端。服務的整體架構如下所示

讓我們更詳細地瞭解一些其他元件。

cAdvisor

cAdvisor 是一個開源容器資源使用和效能分析代理。它專為容器構建,並原生支援 Docker 容器。在 Kubernetes 中,cAdvisor 整合到 Kubelet 二進位制檔案中。cAdvisor 自動發現機器中的所有容器,並收集 CPU、記憶體、檔案系統和網路使用統計資訊。cAdvisor 還透過分析機器上的“根”容器來提供整體機器使用情況。

在大多數 Kubernetes 叢集上,cAdvisor 在埠 4194 上為機器上的容器提供一個簡單的 UI。這是 cAdvisor UI 的一部分快照,顯示了整體機器使用情況

Kubelet

Kubelet 充當 Kubernetes master 和節點之間的橋樑。它管理機器上執行的 Pod 和容器。Kubelet 將每個 Pod 轉換為其組成容器,並從 cAdvisor 獲取各個容器的使用統計資訊。然後,它透過 REST API 公開聚合的 Pod 資源使用統計資訊。

儲存後端

InfluxDB 和 Grafana

Grafana 與 InfluxDB 的設定是開源世界中非常流行的監控組合。InfluxDB 提供了一個易於使用的 API 來寫入和獲取時間序列資料。在大多數 Kubernetes 叢集上,Heapster 預設設定為使用此儲存後端。詳細的設定指南可以在這裡找到。InfluxDB 和 Grafana 在 Pod 中執行。該 Pod 將自身公開為 Kubernetes 服務,Heapster 透過這種方式發現它。

Grafana 容器提供 Grafana 的 UI,它提供了一個易於配置的儀表板介面。Kubernetes 的預設儀表板包含一個示例儀表板,用於監控叢集及其內部 Pod 的資源使用情況。此儀表板可以輕鬆定製和擴充套件。請在此處檢視 InfluxDB 的儲存模式 這裡

這是一個影片,演示如何使用 heapster、InfluxDB 和 Grafana 監控 Kubernetes 叢集

這是預設 Kubernetes Grafana 儀表板的快照,顯示了整個叢集、單個 Pod 和容器的 CPU 和記憶體使用情況

Google Cloud Monitoring

Google Cloud Monitoring 是一項託管監控服務,允許您視覺化和警報應用程式中的重要指標。Heapster 可以設定為自動將所有收集的指標推送到 Google Cloud Monitoring。這些指標隨後可在 Cloud Monitoring Console 中檢視。此儲存後端是最易於設定和維護的。監控控制檯允許您使用匯出的資料輕鬆建立和自定義儀表板。

這是一個影片,演示如何設定和執行 Google Cloud Monitoring 支援的 Heapster:“https://youtube.com/embed/xSMNR2fcoLs”這是 Google Cloud Monitoring 儀表板的快照,顯示了叢集範圍的資源使用情況。

試一試!

既然您已經對 Heapster 有了一些瞭解,請隨時在您自己的叢集上試用它!Heapster 儲存庫在 GitHub 上可用。它包含設定 Heapster 及其儲存後端的詳細說明。Heapster 預設在大多數 Kubernetes 叢集上執行,因此您可能已經擁有它了!歡迎提出反饋意見。如果您遇到任何問題,請透過故障排除渠道告知我們。