Compartilhar via


Configurar clusters Kubernetes híbridos com Insights de contêiner

Os insights de contêiner fornecem uma experiência de monitoramento personalizada para o Serviço de Kubernetes do Azure (AKS). Este artigo descreve como habilitar o monitoramento de clusters Kubernetes hospedados fora do Azure e obter uma experiência de monitoramento semelhante.

Configurações com suporte

As configurações a seguir são oficialmente suportadas com Insights de contêiner. Se você tiver uma versão diferente do Kubernetes e das versões do sistema operacional, abra um tíquete de suporte.

  • Ambientes:
    • Kubernetes local.
    • OpenShift versão 4 e superior, locais ou em outros ambientes de nuvem.
  • As versões do Kubernetes e da política de suporte são as mesmas que as versões do AKS com suporte.
  • Há suporte para os tempos de execução de contêiner a seguir: tempos de execução compatíveis com Moby e com CRI, como CRI-O e ContainerD.
  • A versão do SO do Linux para nós principais e de trabalho com suporte são: Ubuntu (18.04 LTS e 16.04 LTS) e Red Hat Enterprise Linux CoreOS 43.81.
  • Serviço de Controle de Acesso do Azure com suporte: RBAC (controle de acesso baseado em função) do Kubernetes e não RBAC.

Pré-requisitos

Antes de começar, atenda a os seguintes prerrequisitos:

  • Você tem um workspace do Log Analytics. O Insights de contêiner dá suporte a um espaço de trabalho do Log Analytics nas regiões listadas em Produtos por região do Azure. Você pode criar seu próprio espaço de trabalho por meio do Azure Resource Manager, do PowerShell ou do portal do Azure.

    Observação

    Não há suporte para a habilitação do monitoramento de vários clusters com o mesmo nome de cluster para o mesmo espaço de trabalho do Log Analytics. Os nomes de cluster devem ser exclusivos.

  • Você é membro da função de contribuidor do Log Analytics para habilitar o monitoramento de contêiner. Para obter mais informações sobre como controlar o acesso a um espaço de trabalho do Log Analytics, veja Gerenciar acesso a espaços de trabalho e dados de registro.

  • Para exibir os dados de monitoramento, você deve ter a função Leitor de Log Analytics no Workspace do Log Analytics configurado com os insights de contêiner.

  • Você tem o Helm Client para carregar o gráfico do insights de contêiner para o cluster Kubernetes especificado.

  • As seguintes informações de configuração de proxy e firewall são necessárias para que a versão em contêiner do agente do Log Analytics para Linux se comunique com o Azure Monitor:

    recurso de agente Portas
    *.ods.opinsights.azure.com Porta 443
    *.oms.opinsights.azure.com Porta 443
    *.dc.services.visualstudio.com Porta 443
  • O agente em contêineres requer o Kubelet cAdvisor secure port: 10250 ou unsecure port :10255 seja aberto em todos os nós no cluster para coletar métricas de desempenho. Recomendamos que você configure secure port: 10250 no cAdvisor do Kubelet se ele ainda não estiver configurado.

  • O agente em contêiner requer que as seguintes variáveis de ambiente sejam especificadas no contêiner para se comunicar com o serviço de API do Kubernetes no cluster para coletar dados de inventário: KUBERNETES_SERVICE_HOST e KUBERNETES_PORT_443_TCP_PORT.

Importante

A versão mínima do agente com suporte para monitorar clusters Kubernetes híbridos é ciprod10182019 ou posterior.

Habilitar o monitoramento

Para habilitar os insights de contêiner para o cluster Kubernetes híbrido:

  1. Configurar seu espaço de trabalho do Log Analytics com a solução de insights de contêiner.

  2. Habilite o gráfico Helm de insights de contêiner com o espaço de trabalho de um Log Analytics.

Para saber mais sobre soluções de monitoramento no Azure Monitor, confira Soluções de monitoramento no Azure Monitor.

Adicionar a solução de Contêineres do Azure Monitor

Você pode implantar a solução com o modelo do Azure Resource Manager fornecido usando o cmdlet do Azure PowerShell New-AzResourceGroupDeployment ou com a CLI do Azure.

Se você não estiver familiarizado com o conceito de implantação de recursos usando um modelo, veja:

Se você optar por usar a CLI do Azure, primeiro precisará instalar e usar a CLI localmente. Você deve estar executando a CLI do Azure versão 2.0.59 ou posterior. Para identificar sua versão, execute az --version. Caso precise instalar ou atualizar a CLI do Azure, veja Instalar a CLI do Azure.

Esse método inclui dois modelos JSON. Um modelo especifica a configuração para habilitar o monitoramento. O outro modelo contém valores de parâmetro que você configura para especificar:

  • workspaceResourceId: a ID do recurso completo do seu espaço de trabalho do Log Analytics.
  • workspaceRegion: a região em que o espaço de trabalho é criado, que também é conhecido como Local nas propriedades do espaço de trabalho quando você as exibe do portal do Azure.

Para identificar primeiro a ID de recurso completo do seu espaço de trabalho do Log Analytics que é necessário para o valor do parâmetro workspaceResourceId no arquivo containerSolutionParams.json, siga as etapas a seguir. Em seguida, execute o cmdlet do PowerShell ou o comando da CLI do Azure para adicionar a solução.

  1. Liste todas as assinaturas às quais você tem acesso usando o seguinte comando:

    az account list --all -o table
    

    A saída será semelhante ao exemplo a seguir:

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

    Copie o valor para SubscriptionId.

  2. Alterne para a assinatura que hospeda o espaço de trabalho do Log Analytics usando o seguinte comando:

    az account set -s <subscriptionId of the workspace>
    
  3. O exemplo a seguir exibe a lista de espaços de trabalho em suas assinaturas no formato JSON padrão:

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

    Na saída, localize o nome do espaço de trabalho. Em seguida, copie a ID de recurso completo do espaço de trabalho do Log Analytics sob a ID do campo.

  4. Copie e cole a seguinte sintaxe JSON em seu arquivo:

    {
    "$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. Salve esse arquivo como containerSolution.json em uma pasta local.

  6. Cole a seguinte sintaxe JSON em seu arquivo:

    {
      "$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. Edite os valores de workspaceResourceId usando o valor copiado na etapa 3. Para workspaceRegion, copie o valor Region após executar o comando az monitor log-analytics workspace show da CLI do Azure.

  8. Salve esse arquivo como containerSolutionParams.json em uma pasta local.

  9. Você está pronto para implantar esse modelo.

    • Para implantar com o Azure PowerShell, use os seguintes comandos na pasta que contém o modelo:

      # 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
      

      A alteração da configuração pode levar alguns minutos para ser concluída. Quando terminar, uma mensagem semelhante ao seguinte exemplo incluirá este resultado:

      provisioningState       : Succeeded
      
    • Para implantar com a CLI do Azure, use os seguintes comandos:

      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
      

      A alteração da configuração pode levar alguns minutos para ser concluída. Quando terminar, uma mensagem semelhante ao seguinte exemplo incluirá este resultado:

      provisioningState       : Succeeded
      

      Depois de habilitar o monitoramento, poderão ser necessários cerca de 15 minutos antes de exibir as métricas de integridade para o cluster.

Instalar o gráfico Helm

Nesta seção, você instalará o agente em contêineres para insights de contêiner. Antes de continuar, identifique a ID do espaço de trabalho necessária para o parâmetro amalogsagent.secret.wsid e a chave primária necessária para o parâmetroamalogsagent.secret.key. Para identificar essas informações, siga estas etapas e, em seguida, executar os comandos para instalar o agente usando o gráfico Helm.

  1. Execute o comando a seguir para identificar a ID do espaço de trabalho:

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

    Na saída, localize o nome do workspace no nome do campo. Em seguida, copie a ID do espaço de trabalho desse workspace do Log Analytics no campo customerID.

  2. Execute o seguinte comando para identificar a chave primária para o espaço de trabalho:

    az monitor log-analytics workspace get-shared-keys --resource-group <resourceGroupName> --workspace-name <logAnalyticsWorkspaceName>

    Na saída, localize a chave primária no campo primarySharedKeye, em seguida, copie o valor.

    Observação

    Os comandos a seguir são aplicáveis somente para a versão 2 do Helm. O uso do parâmetro --name não é aplicável com a versão 3 do Helm.

    Se o cluster Kubernetes se comunicar por meio de um servidor proxy, configure o parâmetro amalogsagent.proxy com a URL do servidor proxy. Se o cluster não se comunicar por meio de um servidor proxy, você não precisará especificar esse parâmetro. Para obter mais informações, confira a seção Configurar o ponto de extremidade de proxy mais adiante neste artigo.

  3. Adicione o repositório de gráficos do Azure à lista local executando o seguinte comando:

    helm repo add microsoft https://microsoft.github.io/charts/repo
    
  4. Execute o comando a seguir para instalar o gráfico:

    $ helm install --name myrelease-1 \
    --set amalogsagent.secret.wsid=<logAnalyticsWorkspaceId>,amalogsagent.secret.key=<logAnalyticsWorkspaceKey>,amalogsagent.env.clusterName=<my_prod_cluster> microsoft/azuremonitor-containers
    

    Se o espaço de trabalho do Log Analytics estiver no Azure China 21Vianet, execute o seguinte comando:

    $ 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
    

    Se o workspace do Log Analytics estiver no Azure US Government, execute o seguinte comando:

    $ 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
    

Habilitar o gráfico Helm usando o modelo de API

Você pode especificar um complemento no arquivo JSON de especificação de cluster do mecanismo AKS, que também é conhecido como modelo de API. Nesse complemento, forneça a versão codificada em base64 de WorkspaceGUID e WorkspaceKey do espaço de trabalho do Log Analytics em que os dados de monitoramento coletados são armazenados. Você pode encontrar WorkspaceGUID e WorkspaceKey usando as etapas 1 e 2 na seção anterior.

As definições de API com suporte para o cluster do Azure Stack Hub podem ser encontradas no exemplo kubernetes-container-monitoring_existing_workspace_id_and_key.json. Especificamente, localize a propriedade addons em 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>"
             }
           }
         ]
       }

Configurar uma coleta de dados do agente

Começando com a versão 1.0.0 do gráfico, as configurações de coleta de dados do agente são controladas por meio do ConfigMap. Para obter mais informações sobre as configurações de coleta de dados do agente, consulte Configurar coleta de dados do agente para insights de contêiner.

Depois de ter implantado com sucesso o gráfico, você pode revisar os dados para o cluster Kubernetes híbrido em insights de contêiner do portal do Azure.

Observação

A latência de ingestão é de cerca de cinco a dez minutos do agente para ser confirmada no espaço de trabalho do Log Analytics. O status do cluster mostra o valor Sem dados ou Desconhecido até que todos os dados de monitoramento necessários estejam disponíveis no Azure Monitor.

Configurar o ponto de extremidade de proxy

Começando com a versão do gráfico 2.7.1, o gráfico dará suporte à especificação do ponto de extremidade de proxy com o amalogsagent.proxy parâmetro de gráfico. Dessa forma, ele pode se comunicar por meio do servidor proxy. A comunicação entre o agente de insights de contêiner e o Azure Monitor pode ser um servidor proxy HTTP ou HTTPS. Há suporte para a autenticação anônima e básica com um nome de usuário e senha.

O valor de configuração de proxy tem a sintaxe [protocol://][user:password@]proxyhost[:port].

Observação

Se o servidor proxy não exigir autenticação, você ainda precisará especificar um pseudo nome de usuário e senha. Pode ser qualquer nome de usuário ou senha.

Propriedade Descrição
protocolo HTTP ou HTTPS
usuário Nome de usuário opcional para autenticação de proxy
password Senha opcional para autenticação de proxy
proxyhost Endereço ou FQDN do servidor proxy
porta Número da porta opcional para o servidor proxy

Um exemplo é amalogsagent.proxy=http://user01:password@proxy01.contoso.com:8080.

Se você especificar o protocolo como http, as solicitações HTTP serão criadas usando uma conexão segura SSL/TLS. O servidor proxy deve dar suporte a protocolos SSL/TLS.

Solução de problemas

Se você encontrar um erro ao tentar habilitar o monitoramento para o seu cluster híbrido Kubernetes, utilize o script do PowerShell TroubleshootError_nonAzureK8s.ps1 para ajudar a detectar e corrigir os problemas encontrados. Ele foi projetado para detectar e tentar corrigir seguintes problemas:

  • O espaço de trabalho do Log Analytics especificado é válido.
  • O espaço de trabalho do Log Analytics é configurado com a solução de Insights de contêiner. Caso contrário, configure o espaço de trabalho.
  • Os pods do conjunto de réplicas do Agente do Azure Monitor estão em execução.
  • Os pods do daemonset do Agente do Azure Monitor estão em execução.
  • O serviço de Integridade do Agente do Azure Monitor está em execução.
  • A ID e a chave do espaço de trabalho do Log Analytics configuradas no agente em contêiner correspondem ao espaço de trabalho com o qual o insight está configurado.
  • Valide que todos os nós de trabalho do Linux têm o rótulo kubernetes.io/role=agent para o pod de agendadores. Adicione um, se não existir.
  • Identifique as condições que podem indicar que cAdvisor secure port:10250 ou unsecure port: 10255 não estão abertos em todos os nós no cluster.

Para executar com Azure PowerShell, use os seguintes comandos na pasta que contém o script:

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

Próximas etapas

Agora que o monitoramento está habilitado para coletar dados sobre integridade e utilização de seus clusters Kubernetes híbridos e que as cargas de trabalho estão em execução neles, aprenda como usar insights de contêiner.