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

O Container insights fornece uma experiência de monitoramento avançada para o Serviço 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 suportadas

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

  • Ambientes:
    • Kubernetes no local.
    • OpenShift versão 4 e superior, no local ou em outros ambientes de nuvem.
  • As versões do Kubernetes e a política de suporte são as mesmas que as versões do AKS suportadas.
  • Os seguintes tempos de execução de contêiner são suportados: Tempos de execução compatíveis com Moby e CRI, como CRI-O e ContainerD.
  • A versão do sistema operacional Linux para nós principais e de trabalho suportados 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, certifique-se de que cumpre os seguintes pré-requisitos:

  • Você tem um espaço de trabalho do Log Analytics. O Container insights dá suporte a um espaço de trabalho do Log Analytics nas regiões listadas nos Produtos do Azure por região. Você pode criar seu próprio espaço de trabalho por meio do Gerenciador de Recursos do Azure, do PowerShell ou do portal do Azure.

    Nota

    Não há suporte para habilitar o 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 colaborador do Log Analytics para habilitar o monitoramento de contêineres. Para obter mais informações sobre como controlar o acesso a um espaço de trabalho do Log Analytics, consulte Gerenciar o acesso ao espaço de trabalho e aos dados de log.

  • Para exibir os dados de monitoramento, você deve ter a função de leitor do Log Analytics no espaço de trabalho do Log Analytics, configurado com informações de contêiner.

  • Você tem um cliente Helm para integrar o gráfico de 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:

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

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

Importante

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

Ativar monitorização

Para habilitar o Container insights para o cluster híbrido do Kubernetes:

  1. Configure seu espaço de trabalho do Log Analytics com a solução Container insights.

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

Para obter mais informações sobre soluções de monitoramento no Azure Monitor, consulte Monitorando soluções no Azure Monitor.

Adicionar a solução Azure Monitor Containers

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

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

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. Se você precisar instalar ou atualizar a CLI do Azure, consulte Instalar a CLI do Azure.

Este 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: O ID de recurso completo do seu espaço de trabalho do Log Analytics.
  • workspaceRegion: A região na qual o espaço de trabalho é criado, que também é chamada de Local nas propriedades do espaço de trabalho quando você as exibe no portal do Azure.

Para primeiro identificar o ID de recurso completo do espaço de trabalho do Log Analytics necessário para o valor do workspaceResourceId parâmetro no arquivo containerSolutionParams.json , execute 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 seguinte exemplo:

    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 o ID de recurso completo desse espaço de trabalho do Log Analytics sob o ID do campo.

  4. Copie e cole a seguinte sintaxe JSON no seu ficheiro:

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

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

  9. Está pronto para implementar este 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 de configuração pode levar alguns minutos para ser concluída. Quando terminar, uma mensagem semelhante ao exemplo a seguir inclui esse resultado:

      provisioningState       : Succeeded
      
    • Para implantar com a CLI do Azure, execute 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 de configuração pode levar alguns minutos para ser concluída. Quando terminar, uma mensagem semelhante ao exemplo a seguir inclui esse resultado:

      provisioningState       : Succeeded
      

      Depois de habilitar o monitoramento, pode levar cerca de 15 minutos até que você possa exibir as métricas de integridade do cluster.

Instalar o gráfico Helm

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

  1. Execute o seguinte comando 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 espaço de trabalho sob o nome do campo. Em seguida, copie o ID do espaço de trabalho 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 sob o campo primarySharedKey e copie o valor.

    Nota

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

    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, não será necessário especificar esse parâmetro. Para obter mais informações, consulte a seção Configurar o ponto de extremidade proxy mais adiante neste artigo.

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

    helm repo add microsoft https://microsoft.github.io/charts/repo
    
  4. Instale o gráfico executando o seguinte comando:

    $ 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 espaço de trabalho 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. Neste complemento, forneça a versão codificada em base64 do e WorkspaceKey do espaço de trabalho do Log Analytics onde os dados de WorkspaceGUID monitoramento coletados são armazenados. Você pode encontrar WorkspaceGUID e usando as etapas 1 e WorkspaceKey 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, encontre 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 a coleta de dados do agente

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

Depois de implantar o gráfico com êxito, você pode revisar os dados do cluster Kubernetes híbrido no Container insights do portal do Azure.

Nota

A latência de ingestão é de cerca de 5 a 10 minutos do agente para confirmar 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 proxy

A partir da versão 2.7.1 do gráfico, o gráfico suportará a especificação do ponto de extremidade proxy com o amalogsagent.proxy parâmetro chart. Desta forma, ele pode se comunicar através do seu servidor proxy. A comunicação entre o agente do Container insights e o Azure Monitor pode ser um servidor proxy HTTP ou HTTPS. A autenticação anónima e básica com um nome de utilizador e palavra-passe são suportados.

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

Nota

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

Property Description
protocolo HTTP ou HTTPS
Utilizador 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 de 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. Seu servidor proxy deve suportar protocolos SSL/TLS.

Resolução de Problemas

Se você encontrar um erro ao tentar habilitar o monitoramento para seu cluster Kubernetes híbrido, use o script do PowerShell TroubleshootError_nonAzureK8s.ps1 para ajudá-lo a detetar e corrigir os problemas encontrados. Ele foi projetado para detetar e tentar corrigir os 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 Container insights. Caso contrário, configure o espaço de trabalho.
  • Os pods replicaset do Azure Monitor Agent estão em execução.
  • Os pods daemonset do Azure Monitor Agent estão em execução.
  • O serviço Azure Monitor Agent Health está em execução.
  • O ID e a chave do espaço de trabalho do Log Analytics configurados no agente em contêiner correspondem ao espaço de trabalho com o qual o insight está configurado.
  • Valide se todos os nós de trabalho do Linux têm o rótulo para o kubernetes.io/role=agent pod dos agendadores. Se não existir, adicione-o.
  • Identifique as condições que podem indicar cAdvisor secure port:10250 ou unsecure port: 10255 não está aberto em todos os nós do cluster.

Para executar com o 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óximos passos

Agora que o monitoramento está habilitado para coletar a integridade e a utilização de recursos de seus clusters híbridos do Kubernetes e as cargas de trabalho estão sendo executadas neles, saiba como usar o Container insights.