使用 Azure 服務和雲端原生工具監視 Kubernetes 叢集

本文說明如何使用 Azure 監視器和相關 Azure 和雲端原生服務,監視 Kubernetes 叢集的健康情況和效能,以及其上執行的工作負載。 這包括在 Azure Kubernetes Service (AKS) 或其他雲端中執行的叢集,例如 AWSGCP。 針對通常管理構成 Kubernetes 環境之唯一元件的不同角色,會提供不同的指引集。

重要

本文提供以 Azure Kubernetes Service (AKS) 或其他雲端中的 Kubernetes 叢集為基礎,監視 Kubernetes 環境不同層級的完整指引。 如果您剛開始使用 AKS 或 Azure 監視器,請參閱 監視 AKS 以取得開始監視 AKS 叢集的基本資訊。

Kubernetes 環境的圖層和角色

以下是一般 Kubernetes 環境的常見模型圖例,從基礎結構層到應用程式。 每一層都有不同的監視需求,這些需求會由不同的服務解決,通常由組織中的不同角色管理。

Diagram of layers of Kubernetes environment with related administrative roles.

Kubernetes 環境的不同層級和相依應用程式的責任通常會由多個角色處理。 視組織大小而定,這些角色可能由不同的人員或甚至不同的小組執行。 下表說明不同的角色,而下列各節則提供通常會遇到的監視案例。

角色 描述
開發人員 開發和維護在叢集上執行的應用程式。 負責應用程式特定流量,包括應用程式效能和失敗。 根據 SLA 維護應用程式的可靠性。
平台工程師 負責 Kubernetes 叢集。 布建和維護開發人員所使用的平臺。
網路工程師 負責工作負載與叢集的任何輸入/輸出之間的流量。 分析網路流量並執行威脅分析。

選取監視工具

Azure 會根據 Azure 監視器 提供一組完整的服務,以監視 Kubernetes 基礎結構不同層級的健全狀況和效能,以及相依於它的應用程式。 這些服務會彼此合作,以提供完整的監視解決方案,並建議用於 在其他雲端中執行的 AKS 和 Kubernetes 叢集。 您可能已對 Cloud Native Computing Foundation 背書的雲端原生技術進行現有的投資,在此情況下,您可以選擇將 Azure 工具整合到現有的環境中。

您選擇的部署工具及其設定將取決於您特定環境的需求。 例如,您可以使用 Azure 中適用於 Prometheus 和 Grafana 的受控供應專案,或者您可以選擇在 Azure 中搭配 Kubernetes 叢集使用現有的這些工具安裝。 您的組織也可以使用容器深入解析的替代工具來收集和分析 Kubernetes 記錄,例如 Splunk 或 Datadog。

重要

監視 Kubernetes 之類的複雜環境牽涉到收集大量的遙測,其中大部分都會產生成本。 您應該只收集足夠的數據,以符合您的需求。 這包括收集的數據量、收集的頻率,以及保留期間。 如果您非常有成本意識,您可以選擇實作完整功能的子集,以減少監視費用。

網路工程師

網路 工程師 負責工作負載與叢集的任何輸入/輸出之間的流量。 它們會分析網路流量並執行威脅分析。

Diagram of layers of Kubernetes environment for network engineer.

網路管理員的 Azure 服務

下表列出網路工程師常用的服務,以監視支援 Kubernetes 叢集的網路健康情況和效能。

Service 描述
網路監看員 Azure 中的工具套件,用來監視 Kubernetes 叢集所使用的虛擬網路,並診斷偵測到的問題。
使用分析 分析流量記錄的 網路監看員 功能,以提供流量流量的深入解析。
網路深入解析 Azure 監視器的功能,其中包含不同網路元件的效能和健康情況的視覺表示法,並可讓您存取屬於 網路監看員的網路監視工具。

默認會啟用網路深入解析 ,且不需要任何設定。 每個 Azure 區域中預設也會啟用 網路監看員。

監視層級 1 - 網路

以下是監視網路的常見案例。

平台工程師

平台 工程師也稱為叢集管理員,負責 Kubernetes 叢集本身。 他們會布建和維護開發人員所使用的平臺。 他們需要瞭解叢集及其元件的健康情況,並能夠針對任何偵測到的問題進行疑難解答。 他們也需要瞭解操作叢集的成本,並可能能夠將成本分配給不同的小組。

Diagram of layers of Kubernetes environment for platform engineer.

大型組織可能也有 車隊架構師,類似於平台工程師,但負責多個叢集。 他們需要整個環境的可見度,而且必須大規模執行系統管理工作。 大規模建議包含在下列指引中。 如需建立多叢集和大規模案例的 Fleet 資源的詳細資訊,請參閱什麼是 Azure Kubernetes Fleet Manager (預覽版)。

適用於平台工程師的 Azure 服務

下表列出平台工程師的 Azure 服務,以監視 Kubernetes 叢集及其元件的健全狀況和效能。

Service 描述
容器深入解析 適用於 AKS 和已啟用 Azure Arc 的 Kubernetes 叢集的 Azure 服務,其會使用 Azure 監視器代理程式的 容器化版本,從叢集中的每個節點收集 stdout/stderr 記錄、效能計量和 Kubernetes 事件。 它也會從 Kubernetes 控制平面收集計量,並將其儲存在工作區中。 您可以檢視 Azure 入口網站 中的數據,或使用Log Analytics進行查詢
適用於 Prometheus 的 Azure 監視器受管理服務 Prometheus 是 Cloud Native Compute Foundation 的雲端原生計量解決方案,也是用來從 Kubernetes 叢集收集和分析計量數據的最常見工具。 適用於 Prometheus 的 Azure 監視器受控服務是完全受控的解決方案,可與 Prometheus 查詢語言 (PromQL) 和 Prometheus 警示相容,並與 Azure Managed Grafana 整合以進行視覺效果。 這項服務支援您投資 開放原始碼 工具,而不需要管理自己的 Prometheus 環境的複雜性。
已啟用 Azure Arc 的 Kubernetes 可讓您連結至在其他雲端中執行的 Kubernetes 叢集,以便您可以在 Azure 中管理和設定它們。 安裝 Arc 代理程式後,您可以使用相同的方法和工具來監視 AKS 和混合式叢集,包括容器深入解析和 Prometheus。
Azure 受控 Grafana Grafana 的完全受控實作,這是一個開放原始碼數據視覺效果平臺,通常用來呈現 Prometheus 和其他數據。 多個預先定義的 Grafana 儀錶板可用於監視 Kubernetes 和完整堆棧疑難解答。

設定平台工程師的監視

下列各節會使用上表中的 Azure 服務,識別完整監視 Kubernetes 環境的步驟。 每個功能與整合選項都會提供,以協助您判斷您可能需要修改此組態的位置,以符合您的特定需求。

啟用 Prometheus 計量的擷取

重要

若要使用適用於 Prometheus 的 Azure 監視器受控服務,您需要有 Azure 監視器工作區。 如需工作區設定設計考慮的詳細資訊,請參閱 Azure 監視器工作區架構

使用下列其中一種方法,啟用 Azure 監視器受控服務的 Prometheus 從叢集擷取 Prometheus 計量:

如果您已經有要用於 AKS 叢集的 Prometheus 環境,請啟用 Prometheus 的 Azure 監視器受控服務,然後使用遠端寫入將數據傳送至現有的 Prometheus 環境。 您也可以 使用遠端寫入,將數據從現有的自我管理 Prometheus 環境傳送至適用於 Prometheus 的 Azure 監視器受控服務。

如需預設收集計量及其收集頻率的詳細資訊,請參閱 Azure 監視器 中的預設 Prometheus 計量組態。 如果您想要自定義設定,請參閱 在適用於 Prometheus 的 Azure 監視器受控服務中自定義 Prometheus 計量的擷取。

啟用 Grafana 以分析 Prometheus 數據

建立受控 Grafana 的實例,並將其 連結至您的 Azure 監視器工作區 ,讓您可以使用 Prometheus 數據作為數據源。 您也可以使用 新增適用於 Prometheus 的 Azure 監視器受控服務作為數據源,手動執行此設定。 各種 預先建置的儀錶板 可用來監視 Kubernetes 叢集,包括數個類似容器深入解析檢視的資訊。

如果您有現有的 Grafana 環境,則可以繼續使用它,並將適用於 Prometheus 的 Azure 監視器受控服務新增為數據源。 您也可以 將 Azure 監視器數據源新增至 Grafana,以使用容器深入解析在自定義 Grafana 儀錶板中收集的數據。 如果您想要專注於 Grafana 儀錶板,而不是使用容器深入解析檢視和報表,請執行此設定。

啟用容器深入解析以收集記錄

當您為 Kubernetes 叢集啟用 Container Insights 時,它會部署 Azure 監視器代理程式的容器化版本,以將數據傳送至 Azure 監視器中的 Log Analytics 工作區。 容器深入解析會收集容器 stdout/stderr、基礎結構記錄和效能數據。 所有記錄數據都會儲存在Log Analytics工作區中,以便使用 Kusto 查詢語言 (KQL) 進行分析。

如需將 Kubernetes 叢集上線的必要條件和設定選項,請參閱 啟用容器深入解析使用 Azure 原則 上線,以確保所有叢集都會保留一致的設定。

為叢集啟用容器深入解析之後,請執行下列動作來優化您的安裝。

  • 容器深入解析會收集許多與 Prometheus 相同的計量值。 您可以藉由將 Container insights 設定為只收集記錄和事件,藉此停用這些計量的收集,如在容器深入解析中啟用成本優化設定中所述。 此設定會停用 Azure 入口網站 中的容器深入解析體驗,但您可以使用 Grafana 將 Prometheus 計量和 Log Analytics 可視化,以分析容器深入解析所收集的記錄數據。
  • 藉由減少收集的數據量,降低容器深入解析數據擷取的成本。
  • 若要改善容器深入解析所收集的數據以及降低收集成本的查詢體驗, 請為每個叢集啟用 ContainerLogV2 架構 。 如果您只使用記錄進行偶爾的疑難解答,請考慮將此數據表設定為 基本記錄

如果您有記錄收集的現有解決方案,請遵循此工具的指引,或啟用 Container Insights,並使用 Log Analytics 工作區的數據導出功能將數據傳送至 Azure 事件中樞 轉送至替代系統。

收集 AKS 叢集的控制平面記錄

AKS 控制平面元件的記錄會實作為資源記錄在 Azure 中。 Container Insights 不會使用這些記錄,因此您必須建立自己的記錄查詢來檢視和分析它們。 如需記錄結構和查詢的詳細資訊,請參閱 如何從 Container Insights 查詢記錄。

為每個 AKS 叢集建立診斷設定 ,以將資源記錄傳送至 Log Analytics 工作區。 使用 Azure 原則 確保跨多個叢集的一致設定。

將資源記錄傳送至工作區的成本,因此您應該只收集您想要使用的記錄類別。 如需 AKS 可用類別的描述,請參閱 資源記錄。 從收集最少數量的類別開始,然後修改診斷設定,以在需求增加時收集其他類別,以及了解相關聯的成本。 如果您需要保留資訊,基於合規性考慮,您可以將記錄傳送至 Azure 記憶體帳戶,以降低成本。 如需擷取和保留記錄數據成本的詳細資訊,請參閱 Azure 監視器記錄定價詳細數據

如果您不確定最初要啟用哪些資源記錄,請使用下列建議,這些建議是根據最常見的客戶需求。 如有需要,您可以稍後啟用其他類別。

類別 使? Destination
kube-apiserver Enable Log Analytics 工作區
kube-audit Enable Azure 記憶體。 如果稽核員需要稽核記錄,這可讓成本保持在最低水準,但仍會保留稽核記錄。
kube-audit-admin Enable Log Analytics 工作區
kube-controller-manager Enable Log Analytics 工作區
kube-scheduler 停用
cluster-autoscaler 如果已啟用自動調整,請啟用 Log Analytics 工作區
警衛 如果已啟用 Microsoft Entra ID,請啟用 Log Analytics 工作區
AllMetrics 停用,因為受控 Prometheus 中收集計量 Log Analytics 工作區

如果您有收集記錄的現有解決方案,請遵循此工具的指引,或啟用 Container Insights,並使用 Log Analytics 工作區 的數據導出功能將數據傳送至 Azure 事件中樞,以轉送至替代系統。

收集 AKS 叢集的活動記錄

AKS 叢集的組態變更會儲存在活動記錄建立診斷設定,以將此數據傳送至 Log Analytics 工作區 ,以使用其他監視數據進行分析。 此數據收集不需要任何費用,而且您可以使用Log Analytics來分析或警示數據。

監視層級 2 - 叢集層級元件

叢集層級包含下列元件:

元件 監視需求
節點 瞭解每個節點 CPU、記憶體、磁碟和 IP 使用量的整備狀態和效能,並在部署任何工作負載之前主動監視其使用趨勢。

以下是監視叢集層級元件的常見案例。

容器深入解析

  • 使用 [ 叢集 ] 檢視來查看叢集中節點的效能,包括 CPU 和記憶體使用率。
  • 使用 [ 節點] 檢視來查看每個節點的健康情況,以及其上所執行 Pod 的健康情況和效能。 如需分析節點健康情況和效能的詳細資訊,請參閱 使用 Container Insights 監視 Kubernetes 叢集效能。
  • 在 [報表] 下,使用 [節點監視] 活頁簿來分析磁碟容量、磁碟 IO 和 GPU 使用量。 如需這些活頁簿的詳細資訊,請參閱 節點監視活頁簿
  • 在 [監視]下,選取 [活頁簿],然後選取 [子網 IP 使用量],以查看所選時間範圍的每個節點上的IP配置和指派。

Grafana 儀錶板

Log Analytics

疑難排解

成本分析

  • 設定 OpenCost,這是開放原始碼、廠商中立的 CNCF 沙箱專案,以瞭解 Kubernetes 成本,以支援對叢集成本的分析。 它會將詳細的成本數據匯出至 Azure 記憶體。
  • 使用 OpenCost 中的數據,細分組織中不同小組的叢集相對使用量,讓您可以在每個小組之間配置成本。
  • 使用 OpenCost 的數據,藉由密集封裝工作負載,確保叢集使用其節點的完整容量,而使用較少的大型節點,而不是許多較小的節點。

監視層級 3 - 受控 Kubernetes 元件

受控 Kubernetes 層級包含下列元件:

元件 監視
API 伺服器 監視 API 伺服器的狀態,並在服務關閉時識別要求負載和瓶頸的任何增加。
Kubelet 監視 Kubelet 以協助針對 Pod 管理問題、Pod 未啟動、節點未就緒或 Pod 終止進行疑難解答。

以下是監視受控 Kubernetes 元件的常見案例。

容器深入解析

  • 在 [監視]下,選取 [計量] 以檢視 Inflight Requests 計數器。
  • 在 [報表],使用 Kubelet 活頁簿來查看每個 kubelet 的健康情況和效能。 如需這些活頁簿的詳細資訊,請參閱 資源監視活頁簿

Grafana

Log Analytics

  • 使用 記錄查詢搭配資源記錄 來分析 AKS 元件所產生的控制平面記錄

  • AKS 的任何設定活動都會記錄在活動記錄檔中。 當您 將活動記錄傳送至 Log Analytics 工作區 時,您可以使用 Log Analytics 加以分析。 例如,下列範例查詢可用來傳回所有 AKS 叢集上成功升級的記錄。

    AzureActivity
    | where CategoryValue == "Administrative"
    | where OperationNameValue == "MICROSOFT.CONTAINERSERVICE/MANAGEDCLUSTERS/WRITE"
    | extend properties=parse_json(Properties_d) 
    | where properties.message == "Upgrade Succeeded"
    | order by TimeGenerated desc
    

疑難排解

監視層級 4 - Kubernetes 物件和工作負載

Kubernetes 物件和工作負載層級包含下列元件:

元件 監視需求
部署 監視部署的實際與預期狀態,以及在部署上執行之 Pod 的狀態和資源使用率。
Pod 監視 AKS 叢集上所執行 Pod 的狀態和資源使用率,包括 CPU 和記憶體。
容器 監視 AKS 叢集上執行之容器的資源使用率,包括 CPU 和記憶體。

以下是監視 Kubernetes 物件和工作負載的常見案例。

容器深入解析

  • 使用節點控制器檢視來查看 Pod 在其上執行的健康情況和效能,並向下切入其容器的健康情況和效能。
  • 使用 [ 容器] 檢視來查看容器的健康情況和效能。 如需分析容器健康情況和效能的詳細資訊,請參閱 使用 Container Insights 監視 Kubernetes 叢集效能。
  • 在 [報表] 下,使用 [部署] 活頁簿來查看部署計量。 如需詳細資訊,請參閱 使用 Container Insights 部署和 HPA 計量。

Grafana 儀錶板

實時數據

  • 在疑難解答案例中,Container Insights 可讓您存取即時 AKS 容器記錄(stdout/stderror)、事件和 Pod 計量。 如需此功能的詳細資訊,請參閱 如何實時檢視 Kubernetes 記錄、事件和 Pod 計量。

平台工程師的警示

Azure 監視器 中的警示會主動通知您監視數據中有趣的數據和模式。 如此便能在您的客戶注意到之前,先在您的系統中識別問題並加以對應。 如果您有警示的現有 ITSM 解決方案 ,您可以將 它與 Azure 監視器整合。 您也可以 匯出工作區數據 ,以將數據從Log Analytics工作區傳送至支援您目前警示解決方案的另一個位置。

警示類型

下表說明您可以根據上述服務所收集的數據建立的不同自定義警示規則類型。

警示類型 描述
Prometheus 警示 Prometheus 警示 是以 Prometheus 查詢語言 (Prom QL) 撰寫,並套用在適用於 Prometheus 的 Azure 監視器受控服務中儲存的 Prometheus 計量上。 建議的警示已經包含最常見的 Prometheus 警示,您可以 視需要建立新增警示規則
計量警示規則 計量警示規則會使用與計量瀏覽器相同的計量值。 事實上,您可以使用您目前正在分析的數據,直接從計量總管建立警示規則。 計量警示規則對於使用 AKS 數據參考計量中的任何值來警示 AKS 效能很有用。
記錄搜尋警示規則 使用記錄搜尋警示規則,從記錄查詢的結果產生警示。 如需詳細資訊,請參閱 如何從 Container Insights 建立記錄搜尋警示,以及如何 從 Container Insights 查詢記錄。

從容器深入解析中計量警示規則的一組建議 Prometheus 警示 開始(預覽), 其中包含 Kubernetes 叢集最常見的警示條件。 您可以在稍後識別其他警示條件時新增更多警示規則。

開發人員

除了開發應用程式,開發人員也會維護在叢集上執行的應用程式。 它們負責應用程式特定流量,包括應用程式效能和失敗,並根據公司定義的SLA維護應用程式的可靠性。

Diagram of layers of Kubernetes environment for developer.

適用於開發人員的 Azure 服務

下表列出開發人員通常用來監視叢集上執行之應用程式健康情況和效能的服務。

Service 描述
Application insights Azure 監視器的功能,可提供應用程式效能監視 (APM),以監視 Kubernetes 叢集上執行的應用程式,從開發、測試到生產環境。 使用分散式追蹤快速識別並降低延遲和可靠性問題。 支援 適用於廠商中性檢測的 OpenTelemetry

請參閱 Azure 監視器 Application Insights 的數據收集基本概念 ,以取得從叢集上執行的應用程式設定數據收集的選項,以及針對您特定需求的最佳方法決策準則。

監視層級 5 - 應用程式

以下是監視應用程式的常見案例。

應用程式效能

  • 使用 Application Insights 中的效能檢視,檢視應用程式中不同作業的效能。
  • 使用 Profiler 來擷取和檢視應用程式的效能追蹤。
  • 使用 應用程式對應 來檢視應用程式元件之間的相依性,並找出任何瓶頸。
  • 啟用 分散式追蹤,其提供效能分析工具,其運作方式類似雲端和微服務架構的呼叫堆棧,以取得服務之間互動的更佳可檢視性。

應用程式失敗

  • 使用 Application Insights 的 [失敗] 索引標籤來檢視失敗的要求數目和最常見的例外狀況。
  • 請確定已正確設定智慧偵測所識別失敗異常的警示

健康狀態監視

應用程式記錄

  • 容器深入解析會將 stdout/stderr 記錄傳送至 Log Analytics 工作區。 如需不同記錄和 Kubernetes Services 的描述,請參閱資源記錄,以取得每個數據表的清單。

服務網格

  • 針對 AKS 叢集,部署 Istio 型服務網格附加元件 ,以提供微服務架構的可觀察性。 Istio 是開放原始碼服務網格,可透明地分層至現有的分散式應用程式。 附加元件可協助部署和管理適用於 AKS 的 Istio。

另請參閱