使用容器深入解析設定混合式 Kubernetes 叢集
容器深入解析提供 Azure Kubernetes Service (AKS)的豐富監視體驗。 本文說明如何啟用 Azure 外部裝載的 Kubernetes 叢集監視,並實現類似的監視體驗。
支援的設定
容器深入解析已正式支援下列設定。 如果您有不同版本的 Kubernetes 和作業系統版本,請建立支援票證。
- 環境:
- Kubernetes 內部部署。
- OpenShift 第 4 版和更新版本、內部部署或其他雲端環境。
- Kubernetes 和支援原則的版本與支援的 AKS 版本相同。
- 支援下列容器執行階段:Moby 和 CRI 相容執行階段,例如 CRI-O 和 ContainerD。
- 支援的主要和背景工作節點 Linux OS 版本包括:Ubuntu (18.04 LTS 和 16.04 LTS),以及 Red Hat Enterprise Linux CoreOS 43.81。
- 支援的 Azure 存取控制服務:Kubernetes 角色型存取控制 (RBAC) 和非 RBAC。
必要條件
開始之前,請確保您符合下列必要條件:
您具有 Log Analytics 工作區。 容器深入解析支援區域中的 Log Analytics 工作區,而這些區段列在 Azure 依區域的產品中。 您可以透過 Azure Resource Manager、PowerShell 或 Azure 入口網站建立自己的工作區。
注意
不支援對在同一 Log Analytics 工作區具有相同叢集名稱的多個叢集進行監視。 叢集名稱必須是唯一的。
您是 Log Analytics 參與者角色的成員,才能啟用容器監視。 如需有關如何控制 Log Analytics 工作區存取的詳細資訊,請參閱管理工作區和記錄資料的存取權。
若要檢視監視資料,您必須在 Log Analytics 工作區中具有 Log Analytics 讀者角色,這會使用容器深入解析來設定。
您具有 HELM 用戶端,可上線指定 Kubernetes 叢集的容器深入解析圖表。
需要下列 Proxy 和防火牆組態資訊,才能讓 Linux 版 Log Analytics 代理程式的容器化版本與 Azure 監視器通訊:
代理程式資源 連接埠 *.ods.opinsights.azure.com
連接埠 443 *.oms.opinsights.azure.com
連接埠 443 *.dc.services.visualstudio.com
連接埠 443 容器化代理程式需要在叢集中的所有節點上開啟 Kubelet 的
cAdvisor secure port: 10250
或unsecure port :10255
,才能收集效能計量。 如果您尚未在 Kubelet cAdvisor 上設定secure port: 10250
,建議先進行設定。容器化代理程式需要在容器上指定下列環境變數,才能與叢集中的 Kubernetes API 服務通訊以收集清查資料:
KUBERNETES_SERVICE_HOST
和KUBERNETES_PORT_443_TCP_PORT
。
重要
監視混合式 Kubernetes 叢集所支援的最低代理程式版本是 ciprod10182019 或更新版本。
啟用監視
若要啟用混合式 Kubernetes 叢集的容器深入解析:
使用容器深入解析解決方案設定 Log Analytics 工作區。
使用 Log Analytics 工作區啟用容器深入解析 HELM Chart。
如需有關 Azure 監視器中監視解決方案的詳細資訊,請參閱 Azure 監視器中的監視解決方案。
新增 Azure 監視器容器解決方案
您可以使用 Azure PowerShell Cmdlet New-AzResourceGroupDeployment
或 Azure CLI,透過提供的 Azure Resource Manager 範本部署解決方案。
若您不熟悉使用範本部署資源的概念,請參閱:
如果您選擇使用 Azure CLI,必須先在本機安裝並使用 CLI。 您必須執行 Azure CLI 2.0.59 版或更新版本。 若要知道您使用的版本,請執行 az --version
。 如果您需要安裝或升級 Azure CLI,請參閱安裝 Azure CLI。
此方法包含兩個 JSON 範本。 一個範本指定要啟用監視的設定。 另一個範本包含為指定下列項目而設定的參數值:
workspaceResourceId
:您 Log Analytics 工作區的完整資源識別碼。workspaceRegion
:工作區建立所在的區域,從 Azure 入口網站檢視時,這在工作區屬性中也稱為位置。
若要先識別 containerSolutionParams.json 檔案中 workspaceResourceId
參數值所需的 Log Analytics 工作區完整資源識別碼,請執行下列步驟。 然然後執行 PowerShell Cmdlet 或 Azure CLI 命令以新增解決方案。
使用下列命令來列出您可以存取的所有訂用帳戶:
az account list --all -o table
將類似下列範例輸出:
Name CloudName SubscriptionId State IsDefault ------------------------------------ ----------- ------------------------------------ ------- ----------- Microsoft Azure AzureCloud 0fb60ef2-03cc-4290-b595-e71108e8f4ce Enabled True
複製 SubscriptionId 的值。
使用下列命令來切換至裝載 Log Analytics 工作區的訂用帳戶:
az account set -s <subscriptionId of the workspace>
下列範例會以預設的 JSON 格式顯示訂用帳戶中的工作區清單:
az resource list --resource-type Microsoft.OperationalInsights/workspaces -o json
在輸出中,尋找工作區名稱。 然後在 [識別碼] 欄位下,複製該 Log Analytics 工作區的完整資源識別碼。
複製以下 JSON 語法並貼到您的檔案中:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "workspaceResourceId": { "type": "string", "metadata": { "description": "Azure Monitor Log Analytics Workspace Resource ID" } }, "workspaceRegion": { "type": "string", "metadata": { "description": "Azure Monitor Log Analytics Workspace region" } } }, "resources": [ { "type": "Microsoft.Resources/deployments", "name": "[Concat('ContainerInsights', '-', uniqueString(parameters('workspaceResourceId')))]", "apiVersion": "2017-05-10", "subscriptionId": "[split(parameters('workspaceResourceId'),'/')[2]]", "resourceGroup": "[split(parameters('workspaceResourceId'),'/')[4]]", "properties": { "mode": "Incremental", "template": { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "variables": {}, "resources": [ { "apiVersion": "2015-11-01-preview", "type": "Microsoft.OperationsManagement/solutions", "location": "[parameters('workspaceRegion')]", "name": "[Concat('ContainerInsights', '(', split(parameters('workspaceResourceId'),'/')[8], ')')]", "properties": { "workspaceResourceId": "[parameters('workspaceResourceId')]" }, "plan": { "name": "[Concat('ContainerInsights', '(', split(parameters('workspaceResourceId'),'/')[8], ')')]", "product": "[Concat('OMSGallery/', 'ContainerInsights')]", "promotionCode": "", "publisher": "Microsoft" } } ] }, "parameters": {} } } ] }
將此檔案儲存為本機資料夾 containerSolution.json。
將下列 JSON 語法貼到您的檔案中:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "workspaceResourceId": { "value": "<workspaceResourceId>" }, "workspaceRegion": { "value": "<workspaceRegion>" } } }
使用您在步驟 3 中複製的值,編輯 workspaceResourceId 的值。 針對workspaceRegion,在執行 Azure CLI 命令 az monitor log-analytics workspace show 之後,複製區域值。
將此檔案儲存為本機資料夾的 containerSolutionParams.json。
您已準備好部署此範本。
若要使用 Azure PowerShell 來部署,請在包含範本的資料夾中使用下列命令:
# configure and login to the cloud of Log Analytics workspace.Specify the corresponding cloud environment of your workspace to below command. Connect-AzureRmAccount -Environment <AzureCloud | AzureChinaCloud | AzureUSGovernment>
# set the context of the subscription of Log Analytics workspace Set-AzureRmContext -SubscriptionId <subscription Id of Log Analytics workspace>
# execute deployment command to add Container Insights solution to the specified Log Analytics workspace New-AzureRmResourceGroupDeployment -Name OnboardCluster -ResourceGroupName <resource group of Log Analytics workspace> -TemplateFile .\containerSolution.json -TemplateParameterFile .\containerSolutionParams.json
可能需要幾分鐘的時間才能完成設定變更。 完成時,類似下列範例的訊息會包含以下結果:
provisioningState : Succeeded
若要使用 Azure CLI 來部署,請執行下列命令:
az login az account set --name <AzureCloud | AzureChinaCloud | AzureUSGovernment> az login az account set --subscription "Subscription Name" # execute deployment command to add container insights solution to the specified Log Analytics workspace az deployment group create --resource-group <resource group of log analytics workspace> --name <deployment name> --template-file ./containerSolution.json --parameters @./containerSolutionParams.json
可能需要幾分鐘的時間才能完成設定變更。 完成時,類似下列範例的訊息會包含以下結果:
provisioningState : Succeeded
啟用監視之後,可能需要約 15 分鐘的時間才能檢視叢集的健康情況計量。
安裝 HELM Chart
在本節中,您會安裝用於容器深入解析的容器化代理程式。 在繼續之前,請先識別 amalogsagent.secret.wsid
參數所需的工作區識別碼,以及 amalogsagent.secret.key
參數所需的主索引鍵。 若要識別這項資訊,請遵循下列步驟,然後使用 Helm Chart 執行命令來安裝代理程式。
執行下列命令來識別工作區識別碼:
az monitor log-analytics workspace list --resource-group <resourceGroupName>
在輸出中的 [名稱] 欄位底下,尋找工作區名稱。 然後將該 Log Analytics 工作區的工作區標識碼複製到 [customerID] 欄位底下。
執行下列命令來識別工作區的主索引鍵:
az monitor log-analytics workspace get-shared-keys --resource-group <resourceGroupName> --workspace-name <logAnalyticsWorkspaceName>
在輸出中,找到欄位 primarySharedKey 底下的主索引鍵,然後複製值。
注意
下列命令僅適用於 Helm 第 2 版。 Helm 第 3 版不支援使用
--name
參數。如果您的 Kubernetes 叢集透過 Proxy 伺服器通訊,請使用 Proxy 伺服器的 URL 設定參數
amalogsagent.proxy
。 如果叢集未透過 Proxy 伺服器進行通訊,則您不需要指定此參數。 如需詳細資訊,請參閱本文稍後的設定 Proxy 端點一節。執行下列命令,將 Azure Chart 存放庫新增至本機清單:
helm repo add microsoft https://microsoft.github.io/charts/repo
執行下列命令以安裝 Chart:
$ helm install --name myrelease-1 \ --set amalogsagent.secret.wsid=<logAnalyticsWorkspaceId>,amalogsagent.secret.key=<logAnalyticsWorkspaceKey>,amalogsagent.env.clusterName=<my_prod_cluster> microsoft/azuremonitor-containers
如果 Log Analytics 工作區位於 Azure China 21Vianet,請執行下列命令:
$ helm install --name myrelease-1 \ --set amalogsagent.domain=opinsights.azure.cn,amalogsagent.secret.wsid=<logAnalyticsWorkspaceId>,amalogsagent.secret.key=<logAnalyticsWorkspaceKey>,amalogsagent.env.clusterName=<your_cluster_name> incubator/azuremonitor-containers
如果 Log Analytics 工作區位於 Azure 美國政府,請執行下列命令:
$ helm install --name myrelease-1 \ --set amalogsagent.domain=opinsights.azure.us,amalogsagent.secret.wsid=<logAnalyticsWorkspaceId>,amalogsagent.secret.key=<logAnalyticsWorkspaceKey>,amalogsagent.env.clusterName=<your_cluster_name> incubator/azuremonitor-containers
使用 API 模型啟用 Helm Chart
您可以在 AKS 引擎叢集規格 JSON 檔案中指定附加元件,也稱為 API 模型。 在此附加元件中,請提供 WorkspaceGUID
的 base64 編碼版本,以及 Log Analytics 工作區的 WorkspaceKey
,此處會用於儲存收集的監視資料。 您可以使用上一節的步驟 1 和 2 尋找 WorkspaceGUID
和 WorkspaceKey
。
如需 Azure Stack Hub 叢集支援的 API 定義,請參閱範例:kubernetes-container-monitoring_existing_workspace_id_and_key.json。 具體而言,請在 kubernetesConfig 中尋找 addons 屬性:
"orchestratorType": "Kubernetes",
"kubernetesConfig": {
"addons": [
{
"name": "container-monitoring",
"enabled": true,
"config": {
"workspaceGuid": "<Azure Log Analytics Workspace Id in Base-64 encoded>",
"workspaceKey": "<Azure Log Analytics Workspace Key in Base-64 encoded>"
}
}
]
}
設定代理程式資料收集
從 Chart 1.0.0 版開始,代理程式資料收集設定由 ConfigMap 控制。 如需代理程式資料收集設定的詳細資訊,請參閱設定容器深入解析的代理程式資料收集。
成功部署 Chart 之後,您可以從 Azure 入口網站的容器深入解析中,檢閱混合式 Kubernetes 叢集的資料。
注意
從代理程式認可到 Log Analytics 工作區中的擷取延遲大約是 5 到 10 分鐘。 在 Azure 監視器獲得所有必要的監視資料之前,叢集的狀態會顯示 [沒有資料] 或 [未知] 值。
設定 Proxy 端點
從 Chart 2.7.1 版開始,Chart 將支援使用 amalogsagent.proxy
Chart 參數指定 Proxy 端點。 如此一來,即可透過 Proxy 伺服器進行通訊。 容器深入解析代理程式和 Azure 監視器之間的通訊可以是 HTTP 或 HTTPS Proxy 伺服器。 支援匿名和以使用者名稱和密碼進行基本驗證。
Proxy 設定值具有 [protocol://][user:password@]proxyhost[:port]
語法。
注意
即使您的 Proxy 伺服器不需要驗證,您仍然需要指定 pseudo 使用者名稱和密碼。 這可以是任何使用者名稱或密碼。
屬性 | 說明 |
---|---|
protocol | HTTP 或 HTTPS |
使用者 | 用於驗證 Proxy 的選擇性使用者名稱 |
password | 用於驗證 Proxy 的選擇性密碼 |
proxyhost | Proxy 伺服器的位址或 FQDN |
port | Proxy 伺服器的選擇性連接埠號碼 |
例如 amalogsagent.proxy=http://user01:password@proxy01.contoso.com:8080
。
如果您將通訊協定指定為 http,則會使用 SSL/TLS 安全連線來建立 HTTP 要求。 您的 Proxy 伺服器必須支援 SSL/TLS 通訊協定。
疑難排解
如果您在嘗試為混合式 Kubernetes 叢集啟用監視時發生錯誤,請使用 PowerShell 指令碼 TroubleshootError_nonAzureK8s.ps1 來協助您偵測並修正所遇到的問題。 其設計目的是偵測並嘗試修正下列問題:
- 指定的 Log Analytics 工作區有效。
- Log Analytics 工作區是使用容器深入解析解決方案進行設定。 若否,則設定工作區。
- Azure 監視器代理程式複本集 Pod 正在執行。
- Azure 監視器代理程式精靈集 Pod 正在執行。
- Azure 監視器代理程式健全狀況服務正在執行。
- 容器化代理程式上設定的 Log Analytics 工作區識別碼和金鑰會與深入解析設定所在的工作區相符。
- 驗證所有 Linux 背景工作節點都有排程器 Pod 的
kubernetes.io/role=agent
標籤。 如果不存在,則新增。 - 識別可能表示
cAdvisor secure port:10250
或unsecure port: 10255
未在叢集中所有節點上開啟的情況。
若要使用 Azure PowerShell 執行,請在包含指令碼的資料夾中使用下列命令:
.\TroubleshootError_nonAzureK8s.ps1 - azureLogAnalyticsWorkspaceResourceId </subscriptions/<subscriptionId>/resourceGroups/<resourcegroupName>/providers/Microsoft.OperationalInsights/workspaces/<workspaceName> -kubeConfig <kubeConfigFile> -clusterContextInKubeconfig <clusterContext>
下一步
啟用監視功能以收集混合式 Kubernetes 叢集及其上執行的工作負載的健康情況和資源使用率之後,請了解如何使用容器深入解析。