Compartir a través de


Registro administrado multiinquilino en Container Insights (versión preliminar)

El registro multicliente en Container Insights es útil para los clientes que gestionan plataformas compartidas de clústeres con AKS. Es posible que necesite la capacidad de configurar la recopilación de registros de la consola de contenedor de manera que separe los registros de los diferentes equipos para que cada uno tenga acceso a los registros de los contenedores que se ejecutan en los espacios de nombres K8s que poseen y la capacidad de acceder a la facturación y la administración asociados al área de trabajo de Azure Log Analytics. Por ejemplo, los registros de contenedor de los espacios de nombres de la infraestructura, como kube-system, se pueden dirigir a un área de trabajo de Log Analytics específica del equipo de infraestructura, mientras que los registros de contenedor de cada equipo de la aplicación se pueden enviar a sus respectivas áreas de trabajo.

En este artículo se describe cómo funciona el registro multiinquilino en Container Insights, los escenarios que admite y cómo incorporar el clúster para usar esta característica.

Escenarios

La función de registro en un entorno multiinquilino de Container Insights admite los siguientes escenarios:

  • Multiinquilinato. Envía registros de contenedor (stdout & stderr) desde uno o varios espacios de nombres K8s al área de trabajo de Log Analytics correspondiente.

    Diagrama que ilustra el multiinquilinato de Container Insights.

  • Hospedaje múltiple: Envía el mismo conjunto de registros de contenedor (stdout & stderr) desde uno o varios espacios de nombres K8s a varias áreas de trabajo de Log Analytics.

    Diagrama que ilustra el hospedaje múltiple de Container Insights.

Cómo funciona

Container Insights usa una regla de recopilación de datos (DCR) para definir la configuración de recopilación de datos para el clúster de AKS. Al habilitar Container insights, se crea automáticamente un DCR de extensión ContainerInsights predeterminado. Este DCR es un singleton, lo que significa que hay un DCR por clúster de Kubernetes.

Para el registro multiinquilino, Container Insights agrega compatibilidad con las DCR ContainerLogV2Extension, las cuales se usan para definir la recopilación de registros de contenedor de los espacios de nombre K8s. Se pueden crear múltiples ContainerLogV2Extension DCR con diferentes configuraciones para distintos espacios de nombres y todos asociados al mismo clúster de AKS.

Cuando habilitas la funcionalidad de multitenencia a través de un ConfigMap, el agente de Container Insights obtiene periódicamente tanto las DCR de la extensión ContainerInsights predeterminada como las DCR ContainerLogV2Extension asociadas al clúster AKS. Esta recuperación se realiza cada 5 minutos a partir del momento en que se inicia el contenedor. Si se agregan DCR ContainerLogV2Extension adicionales, se reconocerán la próxima vez que se realice la recuperación de cambios. Todos los flujos configurados en el DCR predeterminado, aparte de los registros de contenedor, se siguen enviando al área de trabajo de Log Analytics en el DCR de ContainerInsights predeterminado como de costumbre.

La siguiente lógica se usa para determinar cómo procesar cada entrada de registro:

  • Si hay una DCR ContainerLogV2Extension para el espacio de nombres de la entrada de registro, se usará esa DCR para procesar la entrada. Esto incluye el destino del espacio de trabajo de Log Analytics y cualquier transformación en el momento de la ingesta.
  • Si no hay una DCR ContainerLogV2Extension para el espacio de nombres de la entrada de registro, la DCR ContainerInsights predeterminada se usa para procesar la entrada.

Limitaciones

Prerrequisitos

Habilitar el multiinquilinato para el clúster

  1. Siga las instrucciones de Configuración e implementación de ConfigMap para descargar y actualizar ConfigMap para el clúster.

  2. Habilite el modo de escalado alto cambiando la configuración de enabled bajo agent_settings.high_log_scale de la siguiente manera.

    agent-settings: |-
        [agent_settings.high_log_scale]
            enabled = true
    
  3. Para habilitar el multiinquilinato, cambie la opción enabled de log_collection_settings.multi_tenancy de la siguiente manera.

    log-data-collection-settings: |-
        [log_collection_settings]
           [log_collection_settings.multi_tenancy]
            enabled = true 
    
    
  4. Aplique ConfigMap al clúster con los siguientes comandos.

    kubectl config set-context <cluster-name>
    kubectl apply -f <configmap_yaml_file.yaml>
    

Creación de DCR para cada aplicación o equipo de infraestructura

Repita los pasos siguientes para crear un DCR independiente para cada aplicación o equipo de infraestructura. Cada uno incluirá un conjunto de espacios de nombres K8s y un destino de área de trabajo de Log Analytics.

Sugerencia

Para el hospedaje múltiple, implemente una plantilla de DCR independiente y un archivo de parámetros para cada área de trabajo de Log Analytics e incluya el mismo conjunto de espacios de nombres K8s. Esto permitirá enviar los mismos registros a varias áreas de trabajo. Por ejemplo, si desea enviar registros para app-team-1, app-team-2 a LAW1 y LAW2,

  • Cree DCR1 e incluya LAW1 para los espacios de nombres app-team-1 y app-team-2
  • Cree DCR2 e incluya LAW2 para los espacios de nombres app-team-1 y app-team-2
  1. Recupere la siguiente plantilla de ARM y el archivo de parámetros.

    Plantilla: https://aka.ms/aks-enable-monitoring-multitenancy-onboarding-template-file
    Parámetro: https://aka.ms/aks-enable-monitoring-multitenancy-onboarding-template-parameter-file

  2. Edite el archivo de parámetros con valores para los valores siguientes.

    Nombre de parámetro Descripción
    aksResourceId Identificador de recurso de Azure del clúster de AKS
    aksResourceLocation Región de Azure del clúster de AKS
    workspaceResourceId Identificador de recurso de Azure del área de trabajo de Log Analytics
    workspaceRegion Región de Azure del área de trabajo de Log Analytics
    K8sNamespaces Lista de espacios de nombres K8s para enviar los registros al área de trabajo de Log Analytics definida en este archivo de parámetros.
    resourceTagValues Etiquetas de recursos de Azure para usar en AKS, reglas de recopilación de datos (DCR) y puntos de conexión de recopilación de datos (DCE).
    transformKql Filtro KQL para el filtrado avanzado mediante la transformación en tiempo de ingesta. Por ejemplo, para excluir los registros de un pod específico, use source \| where PodName != '<podName>'. Consulte Transformaciones en Azure Monitor para más información.
    useAzureMonitorPrivateLinkScope Indica si se va a configurar el ámbito de Private Link de Azure Monitor.
    azureMonitorPrivateLinkScopeResourceId Identificador de recurso del ámbito de Private Link de Azure Monitor.
  3. Implemente la plantilla mediante el archivo de parámetros con el comando siguiente.

    az deployment group create --name AzureMonitorDeployment --resource-group <aksClusterResourceGroup> --template-file existingClusterOnboarding.json --parameters existingClusterParam.json
    

Deshabilitación del registro multiinquilino

Nota:

Consulte Deshabilitación de la supervisión del clúster de Kubernetes si desea deshabilitar completamente Container Insights para el clúster.

Siga estos pasos para deshabilitar el registro de múltiples inquilinos en un clúster.

  1. Use el siguiente comando para enumerar todas las asociaciones dcR del clúster.

    az monitor data-collection rule association list-by-resource --resource /subscriptions/<subId>/resourcegroups/<rgName>/providers/Microsoft.ContainerService/managedClusters/<clusterName>
    
  2. Use el siguiente comando para eliminar todas las asociaciones dcR de la extensión ContainerLogV2.

    az monitor data-collection rule association delete --association-name <ContainerLogV2ExtensionDCRA> --resource /subscriptions/<subId>/resourcegroups/<rgName>/providers/Microsoft.ContainerService/managedClusters/<clusterName>
    
  3. Elimine ContainerLogV2Extension DCR.

    az monitor data-collection rule delete --name <ContainerLogV2Extension DCR> --resource-group <rgName>
    
  4. Edite container-azm-ms-agentconfig y cambie el valor de enabled en [log_collection_settings.multi_tenancy] de true a false.

    kubectl edit cm container-azm-ms-agentconfig -n kube-system -o yaml
    

Solución de problemas

Realice los pasos siguientes para solucionar problemas con el registro multiinquilino en Container Insights.

  1. Compruebe que el registro de gran escala está habilitado para el clúster.

      # get the list of ama-logs and these pods should be in Running state
      # If these are not in Running state, then this needs to be investigated
      kubectl get po -n kube-system | grep ama-logs
      # get the logs one of the ama-logs daemonset pod and check for log message indicating high scale enabled
      kubectl logs ama-logs-xxxxx -n kube-system -c ama-logs | grep high
      # output should be something like
       "Using config map value: enabled = true for high log scale config"
    
  2. Compruebe que el esquema ContainerLogV2 está habilitado para el clúster.

      # get the list of ama-logs and these pods should be in Running state
      # If these are not in Running state, then this needs to be investigated
      kubectl get po -n kube-system | grep ama-logs
      # exec into any one of the ama-logs daemonset pod and check for the environment variables
      kubectl exec -it  ama-logs-xxxxx -n kube-system -c ama-logs -- bash
      # check if the containerlog v2 schema enabled or not
      env | grep AZMON_CONTAINER_LOG_SCHEMA_VERSION
      # output should be v2. If not v2, then check whether this is being enabled through DCR
      AZMON_CONTAINER_LOG_SCHEMA_VERSION=v2
      # check if its enabled through DCR
      grep -r "enableContainerLogV2" /etc/mdsd.d/config-cache/configchunks/
      # validate the enableContainerLogV2 configured with true or not from JSON output
    
  3. Compruebe que el multiinquilinato esté habilitado para el clúster.

      # get the list of ama-logs and these pods should be in Running state
      # If these are not in Running state, then this needs to be investigated
      kubectl get po -n kube-system | grep ama-logs
      # get the logs one of the ama-logs daemonset pod and check for log message indicating high scale enabled
      kubectl logs ama-logs-xxxxx -n kube-system -c ama-logs | grep multi_tenancy
      # output should be something like
      "config::INFO: Using config map setting multi_tenancy enabled: true, advanced_mode_enabled: false and namespaces: [] for Multitenancy log collection"
    
  4. Compruebe que se crean las DCR y los DCE relacionados con ContainerInsightsExtension y ContainerLogV2Extension.

        az account set -s <clustersubscriptionId>
        az monitor data-collection rule association list-by-resource --resource "<clusterResourceId>"
        # output should list both ContainerInsightsExtension and ContainerLogV2Extension DCRs associated to the cluster
        # From the output, for each dataCollectionRuleId and check dataCollectionEndpoint associated or not
        az monitor data-collection rule show --ids <dataCollectionRuleId>
        # you can also check the extension settings for the K8s namespace configuration
    
  5. Compruebe que el agente está descargando todos los DCR asociados.

      # get the list of ama-logs and these pods should be in Running state
      # If these are not in Running state, then this needs to be investigated
      kubectl get po -n kube-system | grep ama-logs
      # exec into any one of the ama-logs daemonset pod and check for the environment variables
      kubectl exec -it  ama-logs-xxxxx -n kube-system -c ama-logs -- bash
      # check if its enabled through DCR
      grep -r "ContainerLogV2Extension" /etc/mdsd.d/config-cache/configchunks
      # output should list all the associated DCRs and configuration
      # if there are no DCRs downloaded then likely Agent has issues to pull associate DCRs and this could be missing network or firewall issue and check for errors in mdsd.err log file
      cat /var/opt/microsoft/linuxmonagent/log/mdsd.err
    
  6. Compruebe si hay algún error en fluent-bit-out-oms-runtime.log archivo

      # get the list of ama-logs and these pods should be in Running state
      # If these are not in Running state, then this needs to be investigated
      kubectl get po -n kube-system | grep ama-logs
      # exec into any one of the ama-logs daemonset pod and check for the environment variables
      kubectl exec -it ama-logs-xxxxx -n kube-system -c ama-logs -- bash
      # check for errors
      cat /var/opt/microsoft/docker-cimprov/log/fluent-bit-out-oms-runtime.log
    

Pasos siguientes