使用 Azure 服務和雲端原生工具監視 Kubernetes 叢集
本文說明如何使用 Azure 監視器和相關 Azure 和雲端原生服務,監視 Kubernetes 叢集的健康情況和效能,以及其上所執行的工作負載。 這包括在 Azure Kubernetes Service (AKS) 或其他雲端中執行的叢集,例如 AWS 和 GCP。 針對通常管理構成 Kubernetes 環境之唯一元件的不同角色,會提供一組不同的指導。
重要
本文提供以 Azure Kubernetes Service (AKS) 或其他雲端中的 Kubernetes 叢集為基礎,監視 Kubernetes 環境中不同層級的完整指導。 如果您剛開始使用 AKS 或 Azure 監視器,請參閱監視 AKS 以取得開始監視 AKS 叢集的基本資訊。
Kubernetes 環境的層級和角色
以下是一般 Kubernetes 環境的常見模型圖例,從基礎結構層到應用程式。 每一層都有不同的監視需求,這些需求會由不同的服務來處理,且通常由組織中的不同角色來管理。
Kubernetes 環境中的不同層級及與其相依應用程式的責任通常會由多個角色處理。 視組織大小而定,這些角色可能由不同的人員或甚至不同的小組來執行。 下表說明不同的角色,而下列各節則提供通常會遇到的監視案例。
角色 | 描述 |
---|---|
開發人員 | 開發和維護在叢集上執行的應用程式。 負責應用程式特定流量,包括應用程式效能和失敗。 根據 SLA 維護應用程式的可靠性。 |
平台工程師 | 負責 Kubernetes 叢集。 佈建和維護開發人員所使用的平台。 |
網路工程師 | 負責工作負載與叢集的任何輸入/輸出之間的流量。 分析網路流量並執行威脅分析。 |
選取監視工具
Azure 會根據 Azure 監視器提供一組完整的服務,以監視 Kubernetes 基礎結構中不同層級的健全狀況和效能,以及相依於它的應用程式。 這些服務會彼此搭配運作,以提供完整的監視解決方案,並建議用於 AKS 和在其他雲端中執行的 Kubernetes 叢集。 您可能已對 Cloud Native Computing Foundation 背書的雲端原生技術進行現有的投資,在此情況下,您可以選擇將 Azure 工具整合到現有的環境中。
您對於要部署工具的選擇及其設定將取決於您特定環境的需求。 例如,您可以使用 Azure 中適用於 Prometheus 和 Grafana 的受控供應項目,或者您可以選擇在 Azure 中搭配 Kubernetes 叢集使用這些工具的現有安裝。 您的組織也可以使用容器深入解析的替代工具來收集和分析 Kubernetes 記錄,例如 Splunk 或 Datadog。
重要
監視 Kubernetes 之類的複雜環境牽涉到收集大量的遙測,其中大部分都會產生成本。 您應該只收集符合需求的足夠資料。 這包括收集的資料量、收集的頻率,以及保留期間。 如果您非常具有成本意識,則可以選擇實作完整功能的子集,以減少監視費用。
網路工程師
網路工程師負責工作負載與叢集的任何輸入/輸出之間的流量。 他們會分析網路流量並執行威脅分析。
適用於網路管理員的 Azure 服務
下表列出網路工程師常用的服務,以監視支援 Kubernetes 叢集的網路健康情況和效能。
Service | 描述 |
---|---|
網路監看員 | Azure 中的工具套件,用來監視 Kubernetes 叢集所使用的虛擬網路,並診斷偵測到的問題。 |
流量分析 | 網路監看員的功能,可分析流量記錄,以提供流量的深入解析。 |
網路深入解析 | Azure 監視器的功能,其中包含不同網路元件的效能和健康情況的視覺呈現,並提供網路監看員一部分的網路監視工具存取權。 |
預設會啟用網路深入解析,且不需要任何設定。 網路監看員通常也會在每個 Azure 區域中依預設啟用。
監視層級 1 - 網路
以下是監視網路的常見案例。
- 建立流量記錄,以記錄流經叢集所使用網路安全性群組的 IP 流量相關資訊,然後使用流量分析來分析並提供此資料的深入解析。 您很可能會使用相同的 Log Analytics 工作區進行用於容器深入解析和控制平面記錄的流量分析。
- 使用流量分析,您可以判斷叢集所使用的任何流量是否流向或流出任何非預期的連接埠,以及是否有任何流量流經不應公開的公用 IP。 請使用這項資訊來判斷您的網路規則是否需要修改。
- 針對 AKS 叢集,使用 AKS 的網路可檢視性附加元件(預覽) 來監視和觀察叢集中服務之間的存取權 (東-西向流量)。
平台工程師
平台工程師也稱為叢集管理員,負責 Kubernetes 叢集本身。 他們會佈建和維護開發人員所使用的平台。 他們需要了解叢集及其元件的健康情況,並能夠針對任何偵測到的問題進行疑難排解。 他們也需要了解營運叢集的成本,並可能能夠將成本分配給不同的小組。
大型組織可能也有機群架構師,類似於平台工程師,但負責多個叢集。 他們需要整個環境的可見度,而且必須大規模執行系統管理工作。 大規模建議包含在下列指導中。 如需建立多叢集和大規模案例的機群資源詳細資訊,請參閱什麼是 Azure Kubernetes 機群管理員?。
適用於平台工程師的 Azure 服務
下表列出適用於平台工程師的 Azure 服務,以監視 Kubernetes 叢集及其元件的健全狀況和效能。
Service | 描述 |
---|---|
容器深入解析 | 適用於 AKS 和已啟用 Azure Arc 之 Kubernetes 叢集的 Azure 服務,其會使用 Azure 監視器代理程式的容器化版本,從叢集中的每個節點收集 stdout/stderr 記錄、效能計量和 Kubernetes 事件。 您可以在 Azure 入口網站中檢視資料,或使用 Log Analytics 進行查詢。 設定 Prometheus 體驗,以搭配 Prometheus 資料使用容器深入解析檢視。 |
適用於 Prometheus 的 Azure 監視器受管理服務 | Prometheus 是 Cloud Native Compute Foundation 的雲端原生計量解決方案,也是用來從 Kubernetes 叢集收集和分析計量資料的最常見工具。 Azure 監視器適用於 Prometheus 的受管理服務是完全受控的解決方案,可與 Prometheus 查詢語言 (PromQL) 和 Prometheus 警示相容,並與 Azure 受控 Grafana 整合以取得視覺效果。 此服務支援您在開放原始碼工具方面的投資,而沒有管理您自己 Prometheus 環境的複雜性。 |
已啟用 Azure Arc 的 Kubernetes | 可讓您連結至在其他雲端中執行的 Kubernetes 叢集,以便您可以在 Azure 中管理和設定它們。 安裝 Arc 代理程式後,您可以使用相同的方法和工具來監視 AKS 和混合式叢集,包括容器深入解析和 Prometheus。 |
Azure 受控 Grafana | Grafana 的完全受控實作,是一個開放原始碼資料視覺效果平台,通常用來呈現 Prometheus 與其他資料。 多個預先定義的 Grafana 儀表板可用來監視 Kubernetes 和完整堆疊疑難排解。 |
設定平台工程師的監視
下列各節會使用上表中的 Azure 服務,識別完整監視 Kubernetes 環境的步驟。 每個功能與整合選項都會提供,以協助您判斷可能需要修改此設定的位置,以符合您的特定需求。
將容器深入解析和受控 Prometheus 上線可以屬於與啟用 Kubernetes 叢集監視中所述的相同體驗。 下列各節分別說明各項,因此您可考慮各項的所有上線和設定選項。
啟用 Prometheus 計量抓取
重要
若要使用 Azure 監視器適用於 Prometheus 的受管理服務,您需要擁有 Azure 監視器工作區。 如需工作區設定設計考量事項的詳細資訊,請參閱 Azure 監視器工作區架構。
使用下列其中一種方法,啟用 Azure 監視器適用於 Prometheus 的受管理服務從叢集抓取 Prometheus 計量:
- 當您建立 AKS 叢集時,選取 [啟用 Prometheus 計量] 選項。
- 當您在現有的 AKS 叢集或已啟用 Azure Arc 的 Kubernetes 叢集上啟用容器深入解析時,請選取 [啟用 Prometheus 計量] 選項。
- 針對現有的 AKS 叢集或已啟用 Arc 的 Kubernetes 叢集啟用。
如果您已有要用於 AKS 叢集的 Prometheus 環境,請啟用 Azure 監視器適用於 Prometheus 的受管理服務,然後使用遠端寫入將資料傳送至現有的 Prometheus 環境。 您也可以使用遠端寫入,將資料從現有的自我管理 Prometheus 環境傳送至 Azure 監視器適用於 Prometheus 的受管理服務。
如需預設收集計量及其收集頻率的詳細資料,請參閱 Azure 監視器中的預設 Prometheus 計量設定。 如果您想要自訂設定,請參閱在 Azure 監視器適用於 Prometheus 的受管理服務中自訂 Prometheus 計量的抓取。
啟用 Grafana 以分析 Prometheus 資料
注意
如果您有對 Grafana 的現有投資,或偏好使用 Grafana 儀表板,而不是使用容器深入解析來分析 Prometheus 資料,請使用 Grafana 來監視 Kubernetes 環境。 如果您不想使用 Grafana,請在容器深入解析中啟用 Prometheus 體驗,以便搭配 Prometheus 資料使用容器深入解析檢視。
建立受控 Grafana 的執行個體,並將其連結至您的 Azure 監視器工作區,以便您可以使用 Prometheus 資料作為資料來源。 您也可以使用新增 Azure 監視器適用於 Prometheus 的受管理服務作為資料來源,手動執行此設定。 各種預先建置的儀表板用於監視 Kubernetes 叢集,包括數個將類似資訊呈現為容器深入解析檢視的儀表板。
如果您有現有的 Grafana 環境,則可以繼續使用它,並將 Azure 監視器適用於 Prometheus 的受管理服務新增為資料來源。 您也可以將 Azure 監視器資料來源新增至 Grafana,以使用容器深入解析在自訂 Grafana 儀表板中收集的資料。 如果您想要專注於 Grafana 儀表板,而不是使用容器深入解析檢視和報告,請執行此設定。
啟用容器深入解析以收集記錄
當您為 Kubernetes 叢集啟用容器深入解析時,它會部署 Azure 監視器代理程式的容器化版本,以將資料傳送至 Azure 監視器中的 Log Analytics 工作區。 容器深入解析會收集容器 stdout/stderr、基礎結構記錄和效能資料。 所有記錄資料都會儲存在 Log Analytics 工作區中,以便使用 Kusto 查詢語言 (KQL) 進行分析。
如需將 Kubernetes 叢集上線的必要條件和設定選項,請參閱啟用容器深入解析。 使用 Azure 原則上線,以確保所有叢集都會保留一致的設定。
為叢集啟用容器深入解析之後,請執行下列動作來最佳化您的安裝。
- 在容器深入解析中啟用 Prometheus 體驗,以便搭配 Prometheus 資料使用容器深入解析檢視。
- 若要改善容器深入解析所收集的資料以及降低收集成本的查詢體驗,請為每個叢集啟用 ContainerLogV2 結構描述。 如果您只使用記錄偶爾進行疑難排解,請考慮將此資料表設定為基本記錄。
- 使用在容器深入解析中啟用成本最佳化設定中所述的成本預設值,藉由減少收集的資料量來降低容器深入解析資料擷取的成本。 藉由將容器深入解析設定為只收集記錄和事件來停用計量收集,因為有許多與 Prometheus 相同的計量值。
如果您有收集記錄的現有解決方案,請遵循該工具的指導,或啟用容器深入解析,並使用 Log Analytics 工作區的資料匯出功能將資料傳送至 Azure 事件中樞,以轉送至替代系統。
收集 AKS 叢集的控制平面記錄
AKS 控制平面元件記錄會在 Azure 中實作為資源記錄。 容器深入解析並不使用這些記錄,因此您必須建立自己的記錄查詢,以檢視和分析記錄。 如需記錄結構和查詢的詳細資料,請參閱如何從容器深入解析查詢記錄。
為每個 AKS 叢集建立診斷設定,以將資源記錄傳送至 Log Analytics 工作區。 使用 Azure 原則來確保跨多個叢集的一致設定。
將資源記錄傳送至工作區需要成本,因此應當只收集您想要使用的記錄類別。 如需 AKS 可用類別的描述,請參閱資源記錄。 首先收集最少的類別,然後修改診斷設定,以在需求增加時收集其他類別,以及瞭解相關的成本。 如果您基於合規性考慮需要保留資訊,則可以將記錄傳送至 Azure 儲存體帳戶以降低成本。 如需擷取和保留記錄資料成本的詳細資料,請參閱 Azure 監視器記錄定價詳細資料。
如果您不確定一開始要啟用哪些資源記錄,請使用下列以最常見客戶需求為基礎的建議。 如有需要,您可以稍後啟用其他類別。
類別 | 要啟用嗎? | Destination |
---|---|---|
kube-apiserver | 啟用 | Log Analytics 工作區 |
kube-audit | 啟用 | Azure 儲存體中的 Blob。 此能將成本保持最小化,但稽核員需要保留稽核記錄。 |
kube-audit-admin | 啟用 | Log Analytics 工作區 |
kube-controller-manager | 啟用 | Log Analytics 工作區 |
kube-scheduler | 停用 | |
cluster-autoscaler | 如果已啟用自動調整,則請進行啟用 | Log Analytics 工作區 |
成立條件 | 如果已啟用 Microsoft Entra ID,請予以啟用 | Log Analytics 工作區 |
AllMetrics | 因為在受控 Prometheus 中收集計量而停用 | Log Analytics 工作區 |
如果您有收集記錄的現有解決方案,請遵循該工具的指導,或啟用容器深入解析,並使用 Log Analytics 工作區的資料匯出功能將資料傳送至 Azure 事件中樞,以轉送至替代系統。
收集 AKS 叢集的活動記錄
AKS 叢集的設定變更會儲存在活動記錄中。 建立診斷設定,以將此資料傳送至 Log Analytics 工作區,以使用其他監視資料進行分析。 此資料收集不會產生成本,且您可以使用 Log Analytics 來分析資料或發出警示。
監視層級 2 - 叢集層級元件
叢集層級包括下列元件:
元件 | 監視需求 |
---|---|
節點 | 了解每個節點 CPU、記憶體、磁碟和 IP 使用量的整備狀態和效能,並在部署任何工作負載前主動監視其使用量趨勢。 |
以下是監視叢集層級元件的常見案例。
容器深入解析
- 使用 [叢集] 檢視來查看叢集中節點的效能,包括 CPU 和記憶體使用率。
- 使用 [節點] 檢視來查看每個節點的健康情況,以及其上所執行 Pod 的健康情況和效能。 如需分析節點健康情況和效能的詳細資訊,請參閱使用容器深入解析監視 Kubernetes 叢集效能。
- 在 [報告] 下,使用 [節點監視] 活頁簿來分析磁碟容量、磁碟 IO 和 GPU 使用量。 如需這些活頁簿的詳細資訊,請參閱節點監視活頁簿。
- 在 [監視] 底下,選取 [活頁簿],然後選取 [子網路 IP 使用量],以查看所選時間範圍每個節點上的 IP 配置和指派。
Grafana 儀表板
- 使用適用於Kubelet 的受控 Grafana for 中的預先建置儀表板來查看每個儀表板的健康情況和效能。
- 使用 Grafana 儀表板搭配與磁碟相關的 Prometheus 計量值 (例如
node_disk_io_time_seconds_total
和windows_logical_disk_free_bytes
) 來監視連接的儲存體。 - 有多個 Kubernetes 儀表板可供使用,根據儲存在 Prometheus 中的資料,將節點的效能和健康情況視覺化。
Log Analytics
- 選取 Log Analytics 工作區 [查詢] 對話方塊中 的 [容器] 類別,以存取針對叢集預先建置的記錄查詢,包括從容器深入解析填入的 ContainerImageInventory 資料表擷取資料的映像詳細目錄記錄查詢。
疑難排解
- 針對疑難排解案例,您可能需要直接存取節點,以直接進行維護或立即記錄集合。 基於安全性目的,AKS 節點不會公開至網際網路,但您可以使用
kubectl debug
命令以透過 SSH 連線至 AKS 節點。 如需此流程的詳細資訊,請參閱使用 SSH 連線至 Azure Kubernetes Service (AKS) 叢集節點以進行維護或疑難排解。
成本分析
- 設定 OpenCost,這是開放原始碼、廠商中立的 CNCF 沙箱專案,以了解 Kubernetes 成本,從而支援對叢集成本的分析。 它會將詳細的成本資料匯出至 Azure 儲存體。
- 使用 OpenCost 中的資料,細分組織中不同小組的相對叢集使用量,讓您可以在每個小組之間配置成本。
- 使用 OpenCost 的資料,藉由密集封裝工作負載,確保叢集使用其節點的完整容量,且使用較少的大型節點,而不是許多較小的節點。
監視層級 3 - 受控 Kubernetes 元件
受控 Kubernetes 層級包含下列元件:
元件 | 監視 |
---|---|
API 伺服器 | 監視 API 伺服器的狀態,並找出服務關閉時所要求的任何負載和瓶頸的增加。 |
Kubelet | 監視 Kubelet 以協助針對 Pod 管理問題、Pod 未啟動、節點未就緒或 Pod 遭到終止進行疑難排解。 |
以下是監視受控 Kubernetes 元件的常見案例。
容器深入解析
- 在 [監視] 底下,選取 [計量] 以檢視 Inflight 要求計數器。
- 在 [報告] 下,使用 kubelet 活頁簿來查看每一個 kubelet 的健康情況和效能。 如需這些活頁簿的詳細資訊,請參閱資源監視活頁簿。
Grafana
- 使用適用於Kubelet 的受控 Grafana for 中的預先建置儀表板來查看每個 kubelet 的健康情況和效能。
- 使用 Kubernetes apiserver 之類的儀表板來完整檢視 API 伺服器效能。 此會包含像是要求延遲和 WorkQueue 處理時間的值。
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 健康情況和效能,並向下切入到其容器的健康情況和效能。
- 使用 [容器] 檢視來查看容器的健康情況和效能。 如需分析容器健康情況和效能的詳細資訊,請參閱使用容器深入解析監視 Kubernetes 叢集效能。
- 在 [報告] 下,使用 [部署] 活頁簿來查看部署計量。 如需詳細資訊,請參閱使用容器深入解析部署與 HPA 計量。
Grafana 儀表板
- 使用適用於節點和 Pod 的受控 Grafana 中的預先建置儀表板來檢視其健康情況和效能。
- 有多個 Kubernetes 儀表板可供使用,根據儲存在 Prometheus 中的資料,將節點的效能和健康情況視覺化。
即時資料
- 在疑難排解案例中,容器深入解析可讓您存取即時 AKS 容器記錄 (stdout/stderror)、事件和 Pod 計量。 如需此功能的詳細資訊,請參閱如何即時檢視 Kubernetes 記錄、事件和 Pod 計量。
適用於平台工程師的警示
Azure 監視器中的警示 會主動通知您在監視資料中有趣的資料和模式。 如此便能在您的客戶注意到之前,先在您的系統中識別問題並加以對應。 如果您有用於警示的現有 ITSM 解決方案,則可以將其與 Azure 監視器整合。 您也可以匯出工作區資料,以將資料從 Log Analytics 工作區傳送至支援您目前警示解決方案的另一個位置。
警示類型
下表說明您可以根據上述服務所收集資料建立的不同自訂警示規則類型。
警示類型 | 描述 |
---|---|
Prometheus 警示 | Prometheus 警示是以 Prometheus 查詢語言 (Prom QL) 撰寫,並套用在 Azure 監視器適用於 Prometheus 的受管理服務中儲存的 Prometheus 計量上。 建議的警示已包含最常見的 Prometheus 警示,您可以視需要建立額外警示規則。 |
計量警示規則 | 計量警示規則會使用與計量瀏覽器相同的計量值。 事實上,可以從計量瀏覽器直接建立警示規則,其中也包含您目前正在分析的資料。 計量警示規則對於使用 AKS 資料參考計量中任何值來針對 AKS 效能發出警示很有用。 |
記錄搜尋警示規則 | 使用記錄搜尋警示規則,從記錄查詢的結果來產生警示。 請參閱如何從容器深入解析建立記錄搜尋警示,以及如何從容器深入解析查詢記錄。 |
建議的警示
從容器深入解析 (預覽) 中計量警示規則的一組建議 Prometheus 警示開始,其中包含 Kubernetes 叢集最常見的警示條件。 您可以在稍後識別其他警示條件時新增更多警示規則。
開發人員
除了開發應用程式,開發人員也會維護在叢集上執行的應用程式。 他們負責應用程式特定流量,包括應用程式效能和失敗,並根據公司定義的 SLA 維護應用程式的可靠性。
適用於開發人員的 Azure 服務
下表列出開發人員通常用來監視叢集上所執行應用程式健康情況和效能的服務。
Service | 描述 |
---|---|
Application insights | Azure 監視器的功能可提供應用程式效能監視 (APM),以監視 Kubernetes 叢集上執行的應用程式,從開發、測試到生產環境。 使用分散式追蹤快速識別並緩解延遲和可靠性問題。 支援適用於廠商中立檢測的 OpenTelemetry。 |
請參閱 Azure 監視器 Application Insights 的資料收集基本概念,以取得從叢集上執行的應用程式設定資料收集的選項,以及針對您特定需求的最佳方法決策準則。
監視層級 5 - 應用程式
以下是監視應用程式的常見案例。
應用程式效能
- 使用 Application Insights 中的 [效能] 檢視,檢視應用程式中不同作業的效能。
- 使用 .NET Profiler 來擷取和檢視應用程式的效能追蹤。
- 使用應用程式對應來檢視應用程式元件之間的相依性,並找出任何瓶頸。
- 啟用提供效能分析工具的 [分散式追蹤],其運作方式類似雲端和微服務架構的呼叫堆疊,以取得服務之間互動的更佳可檢視性。
應用程式失敗
健康狀態監視
- 在 Application insights 中建立可用性測試,以建立週期性測試,監視應用程式的可用性和回應性。
- 使用 SLA 報告來計算和報告用於 Web 測試的 SLA。
- 使用 [註釋] 來識別部署新組建的時機,讓您可以在更新之後以視覺化方式檢查效能的任何變更。
應用程式記錄
- 容器深入解析會將 stdout/stderr 記錄傳送至 Log Analytics 工作區。 如需不同記錄和 Kubernetes Services 的描述,請參閱資源記錄,以取得每個所傳送到資料表的清單。
服務網格
- 針對 AKS 叢集,部署 Istio 型服務網格附加元件,以提供微服務架構的可檢視性。 Istio 是開放原始碼服務網格,可透明地分層至現有的分散式應用程式。 附加元件可協助部署和管理適用於 AKS 的 Istio。
另請參閱
- 如需 Azure Kubernetes Service (AKS) 專屬監視的指導,請參閱監視 AKS。