Configuración de clústeres híbridos de Kubernetes con Container Insights

Container Insights proporciona una experiencia de supervisión enriquecida para Azure Kubernetes Service (AKS). En este artículo se describe cómo habilitar la supervisión de clústeres de Kubernetes hospedados fuera de Azure y lograr una experiencia de supervisión similar.

Configuraciones admitidas

Las siguientes configuraciones se admiten oficialmente con Container Insights. Si tiene versiones diferente de Kubernetes y de sistema operativo, abra una incidencia de soporte técnico.

  • Entornos:
    • Kubernetes en un entorno local.
    • OpenShift versión 4 y posteriores, en el entorno local o en otros entornos en la nube.
  • Las versiones de Kubernetes y de la directiva de soporte son las mismas que las versiones de AKS compatibles.
  • Se admiten los siguientes entornos de ejecución de contenedores: Moby y entornos de ejecución compatibles con CRI, como CRI-O y ContainerD.
  • La versión del sistema operativo Linux admitida para los nodos principales y de trabajo es Ubuntu (18.04 LTS y 16.04 LTS) y Red Hat Enterprise Linux CoreOS 43.81.
  • Servicio de Azure Access Control compatible: control de acceso basado en roles (RBAC) de Kubernetes, así como no habilitado para RBAC.

Requisitos previos

Antes de empezar, asegúrese de que cumple estos requisitos previos:

  • Tiene un área de trabajo de Log Analytics. Container Insights admite un área de trabajo de Log Analytics en las regiones enumeradas en los productos por región de Azure. Puede usar Azure Resource Manager, PowerShell o Azure Portal para crear su propia área de trabajo.

    Nota

    No se admite la supervisión de varios clústeres con el mismo nombre de clúster en la misma área de trabajo de Log Analytics. Los nombres de clúster deben ser únicos.

  • Es miembro del rol de colaborador de Log Analytics para habilitar la supervisión de contenedores. Para más información sobre cómo controlar el acceso a un área de trabajo de Log Analytics, consulte Administración del acceso a las áreas de trabajo y los datos de registro.

  • Para ver los datos de supervisión, debe tener el rol Lector de Log Analytics en el área de trabajo de Log Analytics configurada con Container Insights.

  • Tiene un cliente de Helm para incorporar el gráfico de Container Insights para el clúster de Kubernetes especificado.

  • La información de la tabla siguiente muestra la configuración de proxy y firewall requerida para que la versión en contenedor del agente de Log Analytics para Linux se comunique con Azure Monitor:

    Recurso del agente Puertos
    *.ods.opinsights.azure.com Puerto 443
    *.oms.opinsights.azure.com Puerto 443
    *.dc.services.visualstudio.com Puerto 443
  • El agente contenedorizado requiere que el puerto cAdvisor secure port: 10250 o unsecure port :10255 de Kubelet esté abierto en todos los nodos del clúster para recopilar las métricas de rendimiento. Se recomienda configurar secure port: 10250 en cAdvisor de Kubelet si aún no está configurado.

  • El agente contenedorizado requiere que se especifiquen las siguientes variables de entorno en el contenedor para comunicarse con el servicio de API de Kubernetes en el clúster para recopilar datos de inventario: KUBERNETES_SERVICE_HOST y KUBERNETES_PORT_443_TCP_PORT.

Importante

La versión de agente mínima admitida para la supervisión de clústeres híbridos de Kubernetes es ciprod10182019 o posterior.

Habilitar supervisión

Para habilitar Container Insights para el clúster híbrido de Kubernetes:

  1. Configure el área de trabajo de Log Analytics con la solución Container Insights.

  2. Habilite el gráfico de Helm de Container Insights con un área de trabajo de Log Analytics.

Para obtener más información sobre las soluciones de supervisión de Azure Monitor, consulte Soluciones de supervisión de Azure Monitor.

Adición de la solución para contenedores de Azure Monitor

Puede implementar la solución con la plantilla de Azure Resource Manager proporcionada mediante el cmdlet New-AzResourceGroupDeployment de Azure PowerShell o la CLI de Azure.

Si no conoce el concepto de implementación de recursos mediante una plantilla, consulte:

Si decide usar la CLI de Azure, primero debe instalar y usar la CLI localmente. Debe ejecutar la versión 2.0.59 de la CLI de Azure, o cualquier versión posterior. Para identificar la versión, ejecute az --version. Si necesita instalar o actualizar la CLI de Azure, consulte Instalación de la CLI de Azure.

Este método incluye dos plantillas JSON. Una plantilla especifica la configuración para habilitar la supervisión. La otra contiene valores de parámetro que deben configurarse para especificar lo siguiente:

  • workspaceResourceId: identificador de recurso completo del área de trabajo de Log Analytics.
  • workspaceRegion: región en la que se crea el área de trabajo, que también se conoce como Ubicación en las propiedades del área de trabajo cuando se visualizan desde Azure Portal.

Para localizar primero el identificador de recurso completo del área de trabajo de Log Analytics necesario para el valor del parámetro workspaceResourceId en el archivo containerSolutionParams.json, lleve a cabo los pasos siguientes. Después, ejecute el cmdlet de PowerShell o el comando de la CLI de Azure para agregar la solución.

  1. Muestre todas las suscripciones a las que tiene acceso con el comando siguiente:

    az account list --all -o table
    

    La salida será similar al ejemplo siguiente:

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

    Copie el valor de SubscriptionId.

  2. Cambie a la suscripción que hospeda el área de trabajo de Log Analytics con el comando siguiente:

    az account set -s <subscriptionId of the workspace>
    
  3. En el ejemplo siguiente se muestra la lista de áreas de trabajo de sus suscripciones en el formato JSON predeterminado:

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

    En la salida, busque el nombre del área de trabajo. Después, copie el identificador de recurso completo de esa área de trabajo de Log Analytics en el campo ID.

  4. Copie y pegue la siguiente sintaxis JSON en el archivo:

    {
    "$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. Guarde este archivo como containerSolution.json en una carpeta local.

  6. Pegue la siguiente sintaxis de JSON en el archivo:

    {
      "$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 los valores de workspaceResourceId con el valor que copió en el paso 3. En workspaceRegion, copie el valor Region después de ejecutar el comando de la CLI de Azure az monitor log-analytics workspace show.

  8. Guarde este archivo como containerSolutionParams.json en una carpeta local.

  9. Ya está listo para implementar esta plantilla.

    • Para implementar con Azure PowerShell, use los siguientes comandos en la carpeta que contiene la plantilla:

      # 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
      

      El cambio de configuración puede tardar unos minutos en finalizar. Cuando finalice, este resultado se incluye en un mensaje similar al ejemplo siguiente:

      provisioningState       : Succeeded
      
    • Para realizar la implementación con la CLI de Azure, ejecute los comandos siguientes:

      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
      

      El cambio de configuración puede tardar unos minutos en finalizar. Cuando finalice, este resultado se incluye en un mensaje similar al ejemplo siguiente:

      provisioningState       : Succeeded
      

      Después de habilitar la supervisión, pueden pasar unos 15 minutos hasta que pueda ver la métrica de estado del clúster.

Instalación del gráfico de Helm

En esta sección, instalará el agente contenedorizado para Container Insights. Antes de continuar, determine el identificador del área de trabajo necesario para el parámetro amalogsagent.secret.wsid y la clave principal necesaria para el parámetro amalogsagent.secret.key. Para identificar esta información, siga los pasos que se indican a continuación y, luego, ejecute los comandos para instalar el agente mediante el gráfico de Helm.

  1. Ejecute el siguiente comando para identificar el identificador del área de trabajo:

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

    En la salida, busque el nombre del área de trabajo en el campo name. Después, copie el identificador de esa área de trabajo de Log Analytics en el campo ID.

  2. Ejecute el siguiente comando para identificar la clave principal del área de trabajo:

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

    En la salida, busque la clave principal en el campo primarySharedKey y, después, copie el valor.

    Nota

    Los siguientes comandos solo se aplican a la versión 2 de Helm. El uso del parámetro --name no es aplicable a la versión 3 de Helm.

    Si el clúster de Kubernetes se comunica mediante un servidor proxy, configure el parámetro amalogsagent.proxy con la dirección URL del servidor proxy. Si el clúster no se comunica mediante un servidor proxy, no es necesario especificar este parámetro. Para obtener más información, consulte la sección Configuración del punto de conexión proxy más adelante en este artículo.

  3. Agregue el repositorio de gráficos de Azure a la lista local mediante la ejecución del siguiente comando:

    helm repo add microsoft https://microsoft.github.io/charts/repo
    
  4. Instale el gráfico ejecutando el comando siguiente:

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

    Si el área de trabajo de Log Analytics está en Azure China 21Vianet, ejecute el siguiente 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
    

    Si el área de trabajo de Log Analytics está en Azure Gobierno de EE. UU, ejecute el siguiente 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
    

Habilitación del gráfico de Helm mediante el modelo de API

Puede especificar un complemento en el archivo JSON de especificaciones del clúster del motor de AKS, también conocido como "modelo de API". En este complemento, proporcione la versión codificada en Base 64 de WorkspaceGUID y WorkspaceKey del área de trabajo de Log Analytics donde se almacenan los datos de supervisión recopilados. Para encontrar el valor de WorkspaceGUID y WorkspaceKey, siga los pasos 1 y 2 de la sección anterior.

Las definiciones de API admitidas para el clúster de Azure Stack Hub se pueden encontrar en este ejemplo: kubernetes-container-monitoring_existing_workspace_id_and_key.json. En concreto, busque la propiedad addons en 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>"
             }
           }
         ]
       }

Configuración del agente de la recopilación de datos

Al iniciarse con la versión 1.0.0 del gráfico, la configuración de la recopilación de datos del agente se controla desde ConfigMap. Para obtener más información sobre la configuración de recopilación de datos del agente, consulte Configuración de la recopilación de datos del agente de Container Insights.

Después de implementar correctamente el gráfico, puede revisar los datos de su clúster híbrido de Kubernetes en Container Insights desde Azure Portal.

Nota

La latencia de ingesta de datos es de entre cinco y diez minutos hasta que el agente la confirme en el área de trabajo de Log Analytics. El estado del clúster mostrará el valor Sin datos o Desconocido hasta que todos los datos de supervisión necesarios estén disponibles en Azure Monitor.

Configuración del punto de conexión proxy

A partir de la versión 2.7.1 del gráfico, este admitirá la especificación del punto de conexión proxy con el parámetro amalogsagent.proxy del gráfico. De este modo, puede comunicarse a través del servidor proxy. La comunicación entre el agente de Container Insights y Azure Monitor puede ser un servidor proxy HTTP o HTTPS. Se admiten la autenticación anónima y básica con un nombre de usuario y contraseña.

El valor de configuración del proxy tiene la sintaxis [protocol://][user:password@]proxyhost[:port].

Nota

Si el servidor proxy no requiere autenticación, tendrá que especificar un nombre de usuario y una contraseña ficticios. Puede ser cualquier nombre de usuario o contraseña.

Propiedad Descripción
protocol HTTP o HTTPS
usuario Nombre de usuario opcional para la autenticación de proxy
password Contraseña opcional para la autenticación de proxy
proxyhost Dirección o FQDN del servidor proxy
port Número de puerto opcional para el servidor proxy

Un ejemplo es amalogsagent.proxy=http://user01:password@proxy01.contoso.com:8080.

Si especifica el protocolo como http, las solicitudes HTTP se crean mediante una conexión segura SSL/TLS. El servidor proxy debe admitir los protocolos SSL y TLS.

Solución de problemas

Si se produce un error al intentar habilitar la supervisión del clúster de Kubernetes híbrido, use el script de PowerShell TroubleshootError_nonAzureK8s.ps1 para ayudarle a detectar y corregir los problemas que encuentre. Se ha diseñado para detectar e intentar corregir las incidencias siguientes:

  • El área de trabajo de Log Analytics especificada es válida.
  • El área de trabajo Log Analytics se configura con la solución Container Insights. Si no es así, configure el área de trabajo.
  • Los pods de replicaset del agente de Azure Monitor están en ejecución.
  • Los pods de daemonset del agente de Azure Monitor están en ejecución.
  • El servicio Agent Health de Azure Monitor está en ejecución.
  • El identificador y la clave del área de trabajo de Log Analytics configurados en el agente contenedorizado coinciden con el área de trabajo con la que se está configurada la información.
  • Valide que todos los nodos de trabajo de Linux tienen la etiqueta kubernetes.io/role=agent para el pod de schedulers. Si no existe, agréguela.
  • Identifique las condiciones que pueden indicar cAdvisor secure port:10250 o unsecure port: 10255 no se abren en todos los nodos del clúster.

Para realizar la ejecución con Azure PowerShell, use los siguientes comandos en la carpeta que contiene el script:

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

Pasos siguientes

Ahora que la supervisión está habilitada para recopilar el estado y el uso de recursos de sus clústeres híbridos de Kubernetes y que las cargas de trabajo se ejecutan en ellos, aprenda cómo usar Container Insights.