Настройка гибридных кластеров Kubernetes с помощью Container Insights

Аналитика контейнеров предоставляет широкий интерфейс мониторинга для Служба Azure Kubernetes (AKS). В данной статье описывается, как включить мониторинг кластеров Kubernetes, размещенных за пределами Azure, и обеспечить аналогичный процесс мониторинга.

Поддерживаемые конфигурации

В службе Container Insights официально поддерживаются следующие конфигурации. Если у вас есть другая версия Kubernetes и версии операционной системы, откройте запрос в службу поддержки..

  • Средах:
    • Локальная среда Kubernetes.
    • OpenShift версии 4 и выше, локальной или в других облачных средах.
  • Версии Kubernetes и политики поддержки совпадают с поддерживаемыми версиями AKS.
  • Поддерживаются следующие среды выполнения контейнеров: Moby и CRI совместимые среды выполнения, такие как CRI-O и ContainerD.
  • Поддерживается выпуск ОС Linux для основных и рабочих узлов Ubuntu (18.04 LTS и 16.04 LTS) и Red Hat Enterprise Linux CoreOS 43.81.
  • Поддерживаемая служба Azure контроль доступа: управление доступом на основе ролей Kubernetes (RBAC) и не RBAC.

Необходимые компоненты

Перед началом работы убедитесь, что выполнены следующие предварительные требования:

  • У вас есть рабочая область Log Analytics. Служба Container Insights поддерживает рабочую область Log Analytics в регионах, перечисленных в списке Продукты Azure по регионам. Вы можете создать собственную рабочую область с помощью Azure Resource Manager, PowerShell или портал Azure.

    Примечание.

    Включение мониторинга нескольких кластеров с одинаковым именем кластера в одной рабочей области Log Analytics не поддерживается. Имена кластеров должны быть уникальными.

  • Вы являетесь членом роли Log Analytics участник, чтобы включить мониторинг контейнеров. Дополнительные сведения о том, как управлять доступом к рабочей области Log Analytics, см. в статье Управление доступом к рабочей области и данными журналов.

  • Чтобы просмотреть данные мониторинга, необходимо иметь роль читателя Log Analytics в рабочей области Log Analytics, настроенную с помощью аналитики контейнеров.

  • У вас есть клиент Helm для подключения диаграммы аналитики контейнеров для указанного кластера Kubernetes.

  • Ниже приводятся сведения о конфигурации прокси-сервера и брандмауэра, необходимые для того, чтобы контейнерная версия агента Log Analytics для Linux могла взаимодействовать с Azure Monitor:

    Ресурс агента Порты
    *.ods.opinsights.azure.com Порт 443
    *.oms.opinsights.azure.com Порт 443
    *.dc.services.visualstudio.com Порт 443
  • Контейнеризованный агент требует, чтобы Kubelet cAdvisor secure port: 10250 или unsecure port :10255 был открыт на всех узлах в кластере для сбора метрик производительности. Рекомендуется настроить secure port: 10250 на Kubelet cAdvisor, если он еще не настроен.

  • Контейнеризованный агент требует, чтобы в контейнере были указаны следующие переменные среды для взаимодействия со службой API Kubernetes в кластере для сбора данных инвентаризации: KUBERNETES_SERVICE_HOST и KUBERNETES_PORT_443_TCP_PORT.

Важно!

Минимальная версия агента, поддерживаемая для мониторинга гибридных кластеров Kubernetes, — ciprod10182019 или более поздней версии.

Включение мониторинга

Чтобы включить аналитику контейнеров для гибридного кластера Kubernetes, выполните следующие действия.

  1. Настройте рабочую область Log Analytics с помощью решения аналитики контейнеров.

  2. Включите диаграмму Helm аналитики контейнеров с рабочей областью Log Analytics.

Дополнительные сведения о решениях мониторинга в Azure Monitor см. в статье "Мониторинг решений" в Azure Monitor.

Добавление решения контейнеров Azure Monitor

Решение можно развернуть с помощью предоставленного шаблона Azure Resource Manager с помощью командлета New-AzResourceGroupDeployment Azure PowerShell или Azure CLI.

Если вы не знакомы с концепцией развертывания ресурсов с помощью шаблона, ознакомьтесь со статьями:

Если вы решили использовать Azure CLI, необходимо сначала установить интерфейс командной строки и использовать его локально. Требуется Azure CLI 2.0.59 или более поздней версии. Для определения версии выполните az --version. Если вам необходимо установить или обновить Azure CLI, ознакомьтесь со статьей Установка Azure CLI 2.0.

В этом методе используются два шаблона JSON. Один шаблон указывает конфигурацию для включения мониторинга. Другой шаблон содержит значения параметров, настроенные для указания:

  • workspaceResourceId: полный идентификатор ресурса рабочей области Log Analytics.
  • workspaceRegion: регион, в котором создается рабочая область, которая также называется расположением в свойствах рабочей области при просмотре их из портал Azure.

Чтобы сначала определить полный идентификатор ресурса рабочей области Log Analytics, необходимой для workspaceResourceId значения параметра в файле containerSolutionParams.json , выполните следующие действия. Затем выполните командлет PowerShell или команду 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. Измените значения для workspaceResourceId с помощью значения, скопированного на шаге 3. Для 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

В этом разделе описано, как установить контейнеризованный агент для аналитики контейнеров. Прежде чем продолжить, определите идентификатор рабочей области, необходимый для amalogsagent.secret.wsid параметра, и первичный ключ, необходимый для amalogsagent.secret.key параметра. Чтобы определить эти сведения, выполните следующие действия, а затем выполните команды для установки агента с помощью диаграммы Helm.

  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 применимы только следующие команды. --name Использование параметра не применимо к Helm версии 3.

    Если кластер Kubernetes обменивается данными через прокси-сервер, настройте параметр amalogsagent.proxy с URL-адресом прокси-сервера. Если кластер не взаимодействует через прокси-сервер, вам не нужно указывать этот параметр. Дополнительные сведения см. в разделе "Настройка конечной точки прокси-сервера" далее в этой статье.

  3. Добавьте репозиторий диаграмм Azure в локальный список, выполнив следующую команду.

    helm repo add microsoft https://microsoft.github.io/charts/repo
    
  4. Установите диаграмму, выполнив следующую команду.

    $ 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 для Китая (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
    

Включение диаграммы Helm с помощью модели API

Надстройку можно указать в JSON-файле спецификации кластера AKS Engine, который также называется моделью API. В этой надстройке укажите версию WorkspaceGUID в кодировке Base64 и WorkspaceKey рабочей области Log Analytics, в которой хранятся собранные данные мониторинга. Вы можете найти WorkspaceGUID и WorkspaceKey использовать шаги 1 и 2 в предыдущем разделе.

Поддерживаемые определения API для кластера Azure Stack Hub можно найти в примере kubernetes-container-monitoring_existing_workspace_id_and_key.json. В частности, найдите свойство addons в kubernetesConfig:

"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>"
             }
           }
         ]
       }

Настройка сбора данных коллекции

Начиная с версии 1.0.0 диаграммы параметров сбора данных агента контролируются из ConfigMap. Дополнительные сведения о параметрах сбора данных агента см. в разделе "Настройка сбора данных агента" для аналитики контейнеров.

После успешного развертывания диаграммы можно просмотреть данные гибридного кластера Kubernetes в аналитике контейнеров из портал Azure.

Примечание.

Задержка приема составляет около 5–10 минут от агента до фиксации в рабочей области Log Analytics. Состояние кластера показывает значение "Нет данных" или "Неизвестно", пока все необходимые данные мониторинга не будут доступны в Azure Monitor.

Настройка конечной точки прокси-сервера

Начиная с чарта версии 2.7.1 диаграмма будет поддерживать указание конечной точки прокси-сервера с параметром amalogsagent.proxy диаграммы. Таким образом, он может взаимодействовать через прокси-сервер. Обмен данными между агентом аналитики контейнеров и Azure Monitor может быть прокси-сервером HTTP или HTTPS. Поддерживается как анонимная, так и базовая проверка подлинности с использованием имени пользователя и пароля.

Значение конфигурации прокси-сервера имеет синтаксис [protocol://][user:password@]proxyhost[:port].

Примечание.

Если прокси-сервер не требует проверки подлинности, необходимо указать псевдозаверяемое имя пользователя и пароль. Это может быть любое имя пользователя или пароль.

Свойство Description
protocol HTTP или HTTPS
Пользователь Необязательное имя пользователя для аутентификации прокси-сервера
password Необязательный пароль для аутентификации прокси-сервера
proxyhost Адрес или FQDN прокси-сервера
port Номер дополнительного порта для прокси-сервера

Например, amalogsagent.proxy=http://user01:password@proxy01.contoso.com:8080.

Если указать протокол http, HTTP-запросы создаются с помощью безопасного подключения SSL/TLS. Прокси-сервер должен поддерживать протоколы SSL/TLS.

Устранение неполадок

Если при попытке включить мониторинг гибридного кластера Kubernetes возникает ошибка, используйте скрипт PowerShell TroubleshootError_nonAzureK8s.ps1 , чтобы помочь вам обнаружить и устранить возникающие проблемы. Он предназначен для обнаружения и попытки исправления следующих проблем:

  • Указанная рабочая область Log Analytics допустима.
  • Рабочая область Log Analytics настроена с помощью решения Container Insights. Если это не так, настройте рабочую область.
  • Запущены модули pod агента Azure Monitor реплика set.
  • Запущены модули pod управляющей программы агента Azure Monitor.
  • Служба работоспособности агента Azure Monitor запущена.
  • Идентификатор рабочей области Log Analytics и ключ, настроенный в контейнерном агенте, совпадают с рабочей областью, с которым настроена аналитика.
  • Убедитесь, что все рабочие узлы Linux имеют kubernetes.io/role=agent метку модуля pod планировщиков. Если метки нет, добавьте ее.
  • Определите условия, которые могут указывать 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 и рабочих нагрузок, узнайте , как использовать аналитику контейнеров.