共用方式為


使用容器深入解析設定混合式 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 ManagerPowerShellAzure 入口網站建立自己的工作區。

    注意

    不支援對在同一 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: 10250unsecure port :10255,才能收集效能計量。 如果您尚未在 Kubelet cAdvisor 上設定 secure port: 10250,建議先進行設定。

  • 容器化代理程式需要在容器上指定下列環境變數,才能與叢集中的 Kubernetes API 服務通訊以收集清查資料:KUBERNETES_SERVICE_HOSTKUBERNETES_PORT_443_TCP_PORT

重要

監視混合式 Kubernetes 叢集所支援的最低代理程式版本是 ciprod10182019 或更新版本。

啟用監視

若要啟用混合式 Kubernetes 叢集的容器深入解析:

  1. 使用容器深入解析解決方案設定 Log Analytics 工作區。

  2. 使用 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 命令以新增解決方案。

  1. 使用下列命令來列出您可以存取的所有訂用帳戶:

    az account list --all -o table
    

    將類似下列範例輸出:

    Name                                  CloudName    SubscriptionId                        State    IsDefault
    ------------------------------------  -----------  ------------------------------------  -------  -----------
    Microsoft Azure                       AzureCloud   0fb60ef2-03cc-4290-b595-e71108e8f4ce  Enabled  True
    

    複製 SubscriptionId 的值。

  2. 使用下列命令來切換至裝載 Log Analytics 工作區的訂用帳戶:

    az account set -s <subscriptionId of the workspace>
    
  3. 下列範例會以預設的 JSON 格式顯示訂用帳戶中的工作區清單:

    az resource list --resource-type Microsoft.OperationalInsights/workspaces -o json
    

    在輸出中,尋找工作區名稱。 然後在 [識別碼] 欄位下,複製該 Log Analytics 工作區的完整資源識別碼。

  4. 複製以下 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": {}
            }
         }
      ]
    }
    
  5. 將此檔案儲存為本機資料夾 containerSolution.json

  6. 將下列 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>"
      }
     }
    }
    
  7. 使用您在步驟 3 中複製的值,編輯 workspaceResourceId 的值。 針對workspaceRegion,在執行 Azure CLI 命令 az monitor log-analytics workspace show 之後,複製區域值。

  8. 將此檔案儲存為本機資料夾的 containerSolutionParams.json

  9. 您已準備好部署此範本。

    • 若要使用 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 執行命令來安裝代理程式。

  1. 執行下列命令來識別工作區識別碼:

    az monitor log-analytics workspace list --resource-group <resourceGroupName>

    在輸出中的 [名稱] 欄位底下,尋找工作區名稱。 然後將該 Log Analytics 工作區的工作區標識碼複製到 [customerID] 欄位底下。

  2. 執行下列命令來識別工作區的主索引鍵:

    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 端點一節。

  3. 執行下列命令,將 Azure Chart 存放庫新增至本機清單:

    helm repo add microsoft https://microsoft.github.io/charts/repo
    
  4. 執行下列命令以安裝 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 尋找 WorkspaceGUIDWorkspaceKey

如需 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:10250unsecure port: 10255 未在叢集中所有節點上開啟的情況。

若要使用 Azure PowerShell 執行,請在包含指令碼的資料夾中使用下列命令:

.\TroubleshootError_nonAzureK8s.ps1 - azureLogAnalyticsWorkspaceResourceId </subscriptions/<subscriptionId>/resourceGroups/<resourcegroupName>/providers/Microsoft.OperationalInsights/workspaces/<workspaceName> -kubeConfig <kubeConfigFile> -clusterContextInKubeconfig <clusterContext>

下一步

啟用監視功能以收集混合式 Kubernetes 叢集及其上執行的工作負載的健康情況和資源使用率之後,請了解如何使用容器深入解析。