事件
啟用 Kubernetes 叢集的監視
本文說明如何使用下列 Azure 監視器功能,啟用 Kubernetes 叢集的完整監視:
- 計量集合的受控 Prometheus
- 記錄收集的容器深入解析
- 視覺效果的受控 Grafana。
使用 Azure 入口網站,您可以同時啟用所有功能。 您也可以使用 Azure CLI、Azure Resource Manager 範本、Terraform 或 Azure 原則個別啟用。 本文說明每個方式。
重要
Kubernetes 叢集會產生大量記錄資料,如果您對收集的記錄未多加選擇,可能會導致大量成本。 啟用叢集監視之前,請參閱下列文章以確保您的環境已針對成本進行最佳化,而且您將記錄收集限制為僅需要的資料:
- 使用資料收集規則在容器深入解析中設定資料收集和成本最佳化
啟用監視之後自訂記錄收集的詳細資料,包括使用預設成本最佳化組態。 - 使用 Azure 監視器監視 Kubernetes 的最佳做法
監視 Kubernetes 叢集的最佳做法,是按照 Azure Well-Architected Framework 五大要素進行整理,包括成本最佳化。 - Azure 監視器中的成本最佳化 (部分機器翻譯)
設定 Azure 監視器所有功能的最佳做法,以將成本最佳化,並限制您收集的資料量。
本文提供下列叢集類型的上線指引。 相關區段中會指出每個類型之程式的任何差異。
權限
受控 Prometheus 必要條件
- 叢集必須使用受控識別驗證。
- 下列資源提供者必須在 AKS 叢集和 Azure 監視器工作區的訂用帳戶中註冊:
- Microsoft.ContainerService
- Microsoft.Insights
- Microsoft.AlertsManagement
- Microsoft.Monitor
- 下列資源提供者必須在 Grafana 工作區訂用帳戶中註冊:
- Microsoft.Dashboard
已啟用 Arc 的 Kubernetes 叢集必要條件
- 已啟用 Azure Arc 的 Kubernetes 叢集擴充功能的必要條件。
- 除了已啟用 Azure Arc 的 Kubernetes 網路需求之外,請確認防火牆需求。
- 如果您先前已安裝適用於 AKS 的監視,請先確定您已停用監視,再繼續以避免在延伸模組安裝期間發生問題。
- 如果您先前使用不含叢集延伸模組的腳本在叢集上安裝監視,請遵循停用 Kubernetes 叢集監視的指示,刪除此 Helm 圖表。
注意
受控 Prometheus 已啟用 Arc 的 Kubernetes (預覽) 擴充功能不支援下列設定:
- Red Hat Openshift 散發套件,包括 Azure Red Hat OpenShift (ARO)
- Windows 節點
下表描述支援 Managed Prometheus 和容器深入解析所需的工作區。 您可以將每個工作區建立為上線程式的一部分,或使用現有的工作區。 請參閱設計Log Analytics工作區架構,以取得要建立的工作區數目和放置位置的指引。
功能 | 工作區 | 備註 |
---|---|---|
Managed Prometheus | Azure 監視器工作區 | Contributor 權限足以讓附加元件將資料傳送至 Azure 監視器工作區。 連結 Azure 監視器工作區以檢視 Azure 受控 Grafana 中的計量時,您將需要 Owner 層級權限。 這是必要的,因為執行上線步驟的使用者必須能夠提供 Azure 受控 Grafana 系統識別 Monitoring Reader 角色在 Azure 監視器工作區上查詢計量。 |
容器深入解析 | Log Analytics 工作區 | 您可以將 AKS 叢集連結至相同 Microsoft Entra 租用戶中不同 Azure 訂用帳戶中的 Log Analytics 工作區,但您必須使用 Azure CLI 或 Azure Resource Manager 範本。 您目前無法使用 Azure 入口網站執行此設定。 若您要將現有 AKS 叢集連線至另一個訂閱中的 Log Analytics 工作區,則必須在具有 Log Analytics 工作區的訂閱中註冊 Microsoft.ContainerService 資源提供者。 如需更多資訊,請參閱註冊資源業者。 如需要用於預設工作區的支援對應配對,請參閱容器深入解析支援的區域對應。 |
受控 Grafana | Azure 受控 Grafana 工作區 | 將 Grafana 工作區連結至 Azure 監視器工作區,讓從叢集收集的 Prometheus 計量可供 Grafana 儀表板使用。 |
使用下列其中一種方法,從叢集抓取 Prometheus 計量,並讓受控 Grafana 將計量可視化。 如需連結 Azure 監視器工作區和 Azure 受控 Grafana 工作區的選項,請參閱連結 Grafana 工作區。
注意
如果您有私人連結的單一 Azure 監視器資源,則如果 AKS 叢集和 Azure 監視器工作區位於不同區域,Prometheus 啟用將無法運作。 Prometheus 附加元件所需的組態因為私人連結條件約束而無法跨區域使用。 若要解決此問題,請在 AKS 叢集位置中建立新的 DCE,並在相同的 AKS 叢集區域中建立新的 DCRA (關聯)。 將新的 DCE 與 AKS 叢集產生關聯,並將新關聯 (DCRA) 命名為 configurationAccessEndpoint。 如需如何設定與 Azure 監視器工作區相關聯的 DCE 以使用 Private Link 進行資料擷取的完整指示,請參閱在 Azure 監視器中啟用 Kubernetes 監視的私人連結。
- 必須已建立 Azure 監視器工作區和 Azure 受控 Grafana 執行個體。
- 範本需要部署在 Azure 受控 Grafana 執行個體所在的資源群組。
- 如果 Azure 受控 Grafana 執行個體位於 Azure 監視器工作區訂用帳戶以外的訂用帳戶中,請使用註冊資源提供者的指引透過
Microsoft.Dashboard
資源提供者註冊 Azure 監視器工作區訂用帳戶。 - AKS 叢集訂用帳戶中具有「
User Access Administrator
」角色的使用者,可以藉由部署範本,直接啟用Monitoring Reader
角色。
注意
目前在 Bicep 中,無法明確界定 Azure 監視器工作區字串參數「resource ID」上 Monitoring Reader
角色指派的範圍,例如 ARM 範本中。 Bicep 預期為 resource | tenant
類型的值。 Azure 監視器工作區也沒有 REST API 規格。
因此,Monitoring Reader
角色的預設範圍是在資源群組上。 角色會套用在相同的 Azure 監視器工作區上,這是預期的行為。 部署此 Bicep 範本之後,會將 Grafana 執行個體授與該資源群組中所有 Azure 監視器工作區 Monitoring Reader
權限。
如果 Azure 受控 Grafana 執行個體已連結至 Azure 監視器工作區,則必須將此列表包含在範本中。 在 Azure 入口網站中 Azure 受控 Grafana 執行個體的概觀頁面上,選取 [JSON 檢視],然後複製 azureMonitorWorkspaceIntegrations
的值,如下所示。 如果不存在,則執行個體尚未與任何 Azure 監視器工作區連結。
"properties": {
"grafanaIntegrations": {
"azureMonitorWorkspaceIntegrations": [
{
"azureMonitorWorkspaceResourceId": "full_resource_id_1"
},
{
"azureMonitorWorkspaceResourceId": "full_resource_id_2"
}
]
}
}
下載您所使用 Kubernetes 叢集類型所需的檔案。
AKS 叢集 ARM
- 範本檔案:https://aka.ms/azureprometheus-enable-arm-template
- 參數檔案:https://aka.ms/azureprometheus-enable-arm-template-parameters
AKS 叢集
- 範本檔案:https://aka.ms/azureprometheus-enable-bicep-template
- 參數檔案:https://aka.ms/azureprometheus-enable-bicep-template-parameters
- DCRA 模組:https://aka.ms/nested_azuremonitormetrics_dcra_clusterResourceId
- 設定檔案模組:https://aka.ms/nested_azuremonitormetrics_profile_clusterResourceId
- Azure 受控 Grafana 角色指派模組:https://aka.ms/nested_grafana_amw_role_assignment
已啟用 Arc 的叢集 (預覽) ARM
在參數檔案中編輯下列值。 ARM 和 Bicep 範本都使用同一組值。 從 JSON 檢視中擷取資源的資源識別碼概觀頁面。
參數 值 azureMonitorWorkspaceResourceId
Azure 監視器工作區的資源識別碼。 從 Azure 監視器工作區 [概觀] 頁面上的 [JSON 檢視] 擷取。 azureMonitorWorkspaceLocation
Azure 監視器工作區的位置。 從 Azure 監視器工作區 [概觀] 頁面上的 [JSON 檢視] 擷取。 clusterResourceId
AKS 叢集的資源識別碼。 從叢集 [概觀] 頁面上的 [JSON 檢視] 擷取。 clusterLocation
AKS 叢集的位置。 從叢集 [概觀] 頁面上的 [JSON 檢視] 擷取。 metricLabelsAllowlist
Kubernetes 標籤索引碼的逗號分隔清單,要在資源的標籤計量中使用。 metricAnnotationsAllowList
更多 Kubernetes 標籤索引碼的逗號分隔清單,將在資源的批注計量中使用。 grafanaResourceId
受控 Grafana 執行個體的資源識別碼。 從 Grafana 執行個體 [概觀] 頁面上的 [JSON 檢視] 擷取。 grafanaLocation
受控 Grafana 執行個體的位置。 從 Grafana 執行個體 [概觀] 頁面上的 [JSON 檢視] 擷取。 grafanaSku
受控 Grafana 執行個體的 SKU。 從 Grafana 執行個體 [概觀] 頁面上的 [JSON 檢視] 擷取。 使用 sku.name。 開啟範本檔案,並使用您從 Grafana 執行個體擷取的值,更新
grafanaIntegrations
檔案結尾處的屬性。 這看起來會類似以下範例。 在這些樣本中,full_resource_id_1
和full_resource_id_2
已在 Azure 受控 Grafana 資源 JSON 中。 最後的azureMonitorWorkspaceResourceId
項目已經在範本中,用來連結至參數檔案中提供的 Azure 監視器工作區資源識別碼。ARM
JSON{ "type": "Microsoft.Dashboard/grafana", "apiVersion": "2022-08-01", "name": "[split(parameters('grafanaResourceId'),'/')[8]]", "sku": { "name": "[parameters('grafanaSku')]" }, "location": "[parameters('grafanaLocation')]", "properties": { "grafanaIntegrations": { "azureMonitorWorkspaceIntegrations": [ { "azureMonitorWorkspaceResourceId": "full_resource_id_1" }, { "azureMonitorWorkspaceResourceId": "full_resource_id_2" }, { "azureMonitorWorkspaceResourceId": "[parameters('azureMonitorWorkspaceResourceId')]" } ] } } }
Bicep
Bicepresource grafanaResourceId_8 'Microsoft.Dashboard/grafana@2022-08-01' = { name: split(grafanaResourceId, '/')[8] sku: { name: grafanaSku } identity: { type: 'SystemAssigned' } location: grafanaLocation properties: { grafanaIntegrations: { azureMonitorWorkspaceIntegrations: [ { azureMonitorWorkspaceResourceId: 'full_resource_id_1' } { azureMonitorWorkspaceResourceId: 'full_resource_id_2' } { azureMonitorWorkspaceResourceId: azureMonitorWorkspaceResourceId } ] } } }
使用任何有效的方法來部署 Resource Manager 範本,以參數檔案部署範本。 如需不同方法的範例,請參閱部署樣本範本。
使用下列其中一種方法,在您的叢集上啟用容器深入解析。 完成之後,請參閱設定容器深入解析的代理程序資料收集來自訂設定,以確保您不會收集比所需的更多資料。
本節提供 ARM 和 Bicep 範本。
- 必須將範本部署在與叢集相同的資源群組中。
下載和編輯範本和參數檔案
AKS 叢集 ARM
- 範本檔案:https://aka.ms/aks-enable-monitoring-msi-onboarding-template-file
- 參數檔案:https://aka.ms/aks-enable-monitoring-msi-onboarding-template-parameter-file
AKS 叢集
- 範本檔案 (Syslog):https://aka.ms/enable-monitoring-msi-syslog-bicep-template
- 參數檔案 (無 Syslog):https://aka.ms/enable-monitoring-msi-syslog-bicep-parameters
- 範本檔案 (無 Syslog):https://aka.ms/enable-monitoring-msi-bicep-template
- 參數檔案 (無 Syslog):https://aka.ms/enable-monitoring-msi-bicep-parameters
已啟用 Arc 的叢集 ARM
在參數檔案中編輯下列值。 ARM 和 Bicep 範本都使用同一組值。 從 JSON 檢視中擷取資源的資源識別碼概觀頁面。
參數 描述 AKS: aksResourceId
Arc:clusterResourceId
叢集的資源識別碼。 AKS: aksResourceLocation
Arc:clusterRegion
叢集的位置。 AKS: workspaceResourceId
Arc:workspaceResourceId
Log Analytics 工作區的資源識別碼。 Arc: workspaceRegion
Log Analytics 工作區的區域。 Arc: workspaceDomain
Log Analytics 工作區的網域。
Azure 公用雲端的opinsights.azure.com
AzureUSGovernment 的opinsights.azure.us
。AKS: resourceTagValues
叢集與 DCR 名稱其現有容器深入解析延伸模組資料收集規則 (DCR) 所指定的現有標記值。 該名稱將會是 MSCI-<clusterName>-<clusterRegion>
,而且此資源會在 AKS 叢集資源群組中建立。 第一次上線時可以設定任意標籤值。使用任何有效的方法來部署 Resource Manager 範本,以參數檔案部署範本。 如需不同方法的範例,請參閱部署樣本範本。
當您在 Azure 入口網站中建立新的 AKS 叢集時,您可以從 [監視] 索引標籤啟用 Prometheus、容器深入解析和 Grafana。請務必檢查 [啟用容器記錄]、[啟用 Prometheus 計量],以及 [啟用 Grafana] 核取方塊。
- 在 Azure 入口網站中瀏覽至您的 AKS 叢集。
- 在服務功能表中的 [監視] 底下,選取 [深入解析]>[設定監視]。
- 容器深入解析已啟用。 選取 [啟用 Prometheus 計量] 和 [啟用 Grafana] 核取方塊。 如果您有現有的 Azure 監視器工作區和 Grafana 工作區,則會為您選取。
- 如果您要選取替代工作區或建立新的工作區,請選取 [進階設定]。 [成本預設值] 設定可讓您修改預設集合詳細資料,以降低監視成本。 如需詳細資訊,請參閱在容器深入解析中啟用成本最佳化設定。
- 選取設定。
- 在 Azure 入口網站中瀏覽至您的 AKS 叢集。
- 在服務功能表中的 [監視] 底下,選取 [深入解析]>[設定監視]。
- 選取 [啟用 Prometheus 計量] 核取方塊。
- 如果您要選取替代工作區或建立新的工作區,請選取 [進階設定]。 [成本預設值] 設定可讓您修改預設集合詳細資料,以降低監視成本。
- 選取設定。
注意
windows-exporter-daemonset.yaml 中沒有 CPU/儲存體限制,因此可能會過度佈建 Windows 節點
如需詳細資訊,請參閱資源保留
當您部署工作負載時,請設定容器的資源儲存體和 CPU 限制。 這也會從 NodeAllocatable 減去,並協助全叢集排程器判斷要放置於哪些節點上的 Pod。 排程沒有限制的 Pod 可能會過度佈建 Windows 節點,而且在極端情況下可能會導致節點變成狀況不良。
自 6.4.0-main-02-22-2023-3ee44b9e 受控 Prometheus 附加元件容器 (prometheus_collector) 起,已針對 AKS 叢集啟用 Windows 計量集合。 上線至 Azure 監視器計量附加元件可讓 Windows DaemonSet Pod 開始在節點集區上執行。 Windows Server 2019 和 Windows Server 2022 都有支援。 請遵循下列步驟,讓 Pod 從您的 Windows 節點集區收集計量。
藉由部署 windows-exporter-daemonset YAML 檔案,在 AKS 節點上手動安裝 windows 匯出工具以存取 Windows 計量。 啟用下列收集器:
[defaults]
container
memory
process
cpu_info
如需更多收集器,請參閱 Windows 計量的 Prometheus 匯出工具。
部署 windows-exporter-daemonset YAML 檔案。 請注意,如果節點中套用了任何污點,您必須套用適當的容忍。
kubectl apply -f windows-exporter-daemonset.yaml
將 ama-metrics-settings-configmap 套用至您的叢集。 將
windowsexporter
與windowskubeproxy
布林值設定為true
。 將 ama-metrics-settings-configmap 套用至您的叢集。開啟立即可用儀表板所需的錄製規則:
使用 kubectl 命令行工具 來確認代理程式是否已正確部署。
確認 DaemonSet 已正確部署於 Linux 節點集區
kubectl get ds ama-metrics-node --namespace=kube-system
Pod 的數目應該等於叢集上的 Linux 節點數目。 輸出應類似下列範例:
User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ama-metrics-node 1 1 1 1 1 <none> 10h
確認已正確部署 Windows 節點
kubectl get ds ama-metrics-win-node --namespace=kube-system
Pod 的數目應該等於叢集上的 Windows 節點數目。 輸出應類似下列範例:
User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ama-metrics-win-node 3 3 3 3 3 <none> 10h
確認已針對 Prometheus 部署兩個 ReplicaSet
kubectl get rs --namespace=kube-system
輸出應類似下列範例:
User@aksuser:~$kubectl get rs --namespace=kube-system
NAME DESIRED CURRENT READY AGE
ama-metrics-5c974985b8 1 1 1 11h
ama-metrics-ksm-5fcf8dffcd 1 1 1 11h
確認 DaemonSet 已正確部署於 Linux 節點集區
kubectl get ds ama-logs --namespace=kube-system
Pod 的數目應該等於叢集上的 Linux 節點數目。 輸出應類似下列範例:
User@aksuser:~$ kubectl get ds ama-logs --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ama-logs 2 2 2 2 2 <none> 1d
確認已正確部署 Windows 節點
kubectl get ds ama-logs-windows --namespace=kube-system
Pod 的數目應該等於叢集上的 Windows 節點數目。 輸出應類似下列範例:
User@aksuser:~$ kubectl get ds ama-logs-windows --namespace=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ama-logs-windows 2 2 2 2 2 <none> 1d
確認容器深入解析解決方案的部署
kubectl get deployment ama-logs-rs --namespace=kube-system
輸出應類似下列範例:
User@aksuser:~$ kubectl get deployment ama-logs-rs --namespace=kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
ama-logs-rs 1/1 1 1 24d
使用 CLI 來檢視設定
使用 aks show
命令來了解解決方案已啟用、Log Analytics 工作區資源識別碼,以及叢集的摘要資訊。
az aks show --resource-group <resourceGroupofAKSCluster> --name <nameofAksCluster>
此命令會傳回解決方案的 JSON 格式資訊。 addonProfiles
區段應包含 omsagent
的相關資訊,如下列範例所示:
"addonProfiles": {
"omsagent": {
"config": {
"logAnalyticsWorkspaceResourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"useAADAuth": "true"
},
"enabled": true,
"identity": null
},
}
當您按下啟用監視時,您的訂用帳戶中會建立下列資源:
資源名稱 | 資源類型 | 資源群組 | 區域/位置 | 描述 |
---|---|---|---|---|
MSCI-<aksclusterregion>-<clustername> |
資料收集規則 | 與叢集相同 | 與 Log Analytics 工作區相同 | 此資料收集規則適用於 Azure 監視器代理程式的記錄收集,此代理程式會使用 Log Analytics 工作區作為目的地,且與 AKS 叢集資源相關聯。 |
MSPROM-<aksclusterregion>-<clustername> |
資料收集規則 | 與叢集相同 | 與 Azure 監視器工作區相同 | 此資料收集規則適用於計量附加元件所收集的 Prometheus 計量,其已選擇的 Azure 監視器工作區作為目的地,也會與 AKS 叢集資源相關聯 |
MSPROM-<aksclusterregion>-<clustername> |
資料收集端點 | 與叢集相同 | 與 Azure 監視器工作區相同 | 上述資料收集規則會使用此資料收集端點,從計量附加元件擷取 Prometheus 計量 |
當您建立新的 Azure 監視器工作區時,會將下列其他資源建立為其中的一部分
資源名稱 | 資源類型 | 資源群組 | 區域/位置 | 描述 |
---|---|---|---|---|
<azuremonitor-workspace-name> |
資料收集規則 | MA_<azuremonitor-workspace-name>_<azuremonitor-workspace-region>_managed | 與 Azure 監視器工作區相同 | 當您使用 OSS Prometheus 伺服器遠端寫入至 Azure 監視器工作區時所建立的 DCR。 |
<azuremonitor-workspace-name> |
資料收集端點 | MA_<azuremonitor-workspace-name>_<azuremonitor-workspace-region>_managed | 與 Azure 監視器工作區相同 | 當您使用 OSS Prometheus 伺服器遠端寫入至 Azure 監視器工作區時所建立的 DCE。 |
監視 Windows Server 叢集和 Linux 叢集的主要差異包括:
- Windows 沒有記憶體 RSS 計量。 因此,不適用於 Windows 節點和容器。 工作集計量可供使用。
- 磁碟儲存體容量資訊不適用於 Windows 節點。
- 只會監視 Pod 環境,不監視 Docker 環境。
- 預覽版本最多支援 30 個 Windows Server 容器。 Linux 容器無此限制。
注意
Windows Server 2022 作業系統的容器深入解析支援現供預覽。
容器化 Linux 代理程式 (ReplicaSet Pod) 對叢集內 Kubelet 安全連接埠 (10250) 上的所有 Windows 節點進行 API 呼叫,以收集節點和容器效能相關計量。 Kubelet 安全連接埠 (:10250) 應該已在叢集的虛擬網路中開啟,Windows 節點和容器效能相關計量收集的輸入和輸出才能正常運作。
如果您有包含 Windows 節點的 Kubernetes 叢集,請檢閱並設定網路安全性群組和網路原則,確定已針對叢集虛擬網路中的輸入和輸出開啟 Kubelet 安全連接埠 (:10250)。
其他資源
訓練
學習路徑
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization