Tutorial: Habilitar Azure Container Apps en Kubernetes habilitado para Azure Arc (versión preliminar)


Los clústeres de Kubernetes habilitados para Azure Arc permiten crear una ubicación personalizada habilitada para Container Apps en el clúster de Kubernetes (local o en la nube), donde implementar las aplicaciones de Azure Container Apps como haría en cualquier otra región.

En este tutorial se explica cómo habilitar Azure Container Apps en un clúster de Kubernetes habilitado para Arc. En este tutorial, aprenderá lo siguiente:

  • Crear un clúster conectado
  • Cree un área de trabajo de Log Analytics.
  • Instalar la extensión de Container Apps
  • Crear una ubicación personalizada.
  • Crear el entorno conectado de Azure Container Apps

Nota

Durante la versión preliminar, Azure Container Apps en Arc no se puede usar en configuraciones de producción. En este artículo se proporciona una configuración de ejemplo solo con fines de evaluación.

En este tutorial se usa Azure Kubernetes Service (AKS) para proporcionar instrucciones concretas para configurar un entorno desde cero. Sin embargo, en una carga de trabajo de producción, lo mejor es no habilitar Azure Arc en un clúster de AKS, porque ya está administrado en Azure.

Requisitos previos

Configurar

Instale las siguientes extensiones de la CLI de Azure.

az extension add --name connectedk8s  --upgrade --yes
az extension add --name k8s-extension --upgrade --yes
az extension add --name customlocation --upgrade --yes
az extension remove --name containerapp
az extension add --source https://aka.ms/acaarccli/containerapp-latest-py2.py3-none-any.whl --yes

Registre los espacios de nombres necesarios.

az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az provider register --namespace Microsoft.App --wait
az provider register --namespace Microsoft.OperationalInsights --wait

Establezca variables de entorno según su implementación de clúster de Kubernetes.

GROUP_NAME="my-arc-cluster-group"
AKS_CLUSTER_GROUP_NAME="my-aks-cluster-group"
AKS_NAME="my-aks-cluster"
LOCATION="eastus"

Creación de un clúster conectado

Los siguientes pasos le ayudarán a empezar a conocer el servicio, pero en el caso de las implementaciones de producción, deben considerarse ilustrativos, no prescriptivos. Consulte Inicio rápido: Conexión de un clúster de Kubernetes existente a Azure Arc para instrucciones generales sobre cómo crear un clúster de Kubernetes habilitado para Azure Arc.

  1. Cree un clúster en Azure Kubernetes Service.

    az group create --name $AKS_CLUSTER_GROUP_NAME --location $LOCATION
    az aks create \
       --resource-group $AKS_CLUSTER_GROUP_NAME \
       --name $AKS_NAME \
       --enable-aad \
       --generate-ssh-keys
    
  2. Obtenga el archivo kubeconfig y pruebe la conexión al clúster. De manera predeterminada, el archivo kubeconfig se guarda en ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Cree un grupo de recursos que contenga los recursos de Azure Arc.

    az group create --name $GROUP_NAME --location $LOCATION
    
  4. Conecte el clúster que creó a Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Valide la conexión con el comando siguiente. Debe mostrar la propiedad provisioningState como Succeeded. Si no es así, vuelva a ejecutar el comando después de un minuto.

    az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
    

Creación de un área de trabajo de Log Analytics

Un área de trabajo de Log Analytics proporciona acceso a los registros de las aplicaciones de Container Apps que se ejecutan en el clúster de Kubernetes habilitado para Azure Arc. Usar un área de trabajo de Log Analytics es opcional, si bien recomendable.

  1. Cree un área de trabajo de Log Analytics.

    WORKSPACE_NAME="$GROUP_NAME-workspace" # Name of the Log Analytics workspace
    
    az monitor log-analytics workspace create \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME
    
  2. Ejecute los siguientes comandos para obtener el identificador del área de trabajo codificada y la clave compartida para un área de trabajo de Log Analytics existente. Los necesitará en el paso siguiente.

    LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query customerId \
        --output tsv)
    LOG_ANALYTICS_WORKSPACE_ID_ENC=$(printf %s $LOG_ANALYTICS_WORKSPACE_ID | base64 -w0) # Needed for the next step
    LOG_ANALYTICS_KEY=$(az monitor log-analytics workspace get-shared-keys \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query primarySharedKey \
        --output tsv)
    LOG_ANALYTICS_KEY_ENC=$(printf %s $LOG_ANALYTICS_KEY | base64 -w0) # Needed for the next step
    

Instalación de la extensión de Container Apps

  1. Establezca las siguientes variables de entorno en el nombre que quiera de la extensión de Container Apps, el espacio de nombres del clúster en el que se deben aprovisionar los recursos y el nombre del entorno de Azure Container Apps conectado. Use un nombre único para <connected-environment-name>. El nombre del entorno conectado formará parte del nombre de dominio de la aplicación que creará en el entorno conectado de Azure Container Apps.

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. Instale la extensión de Container Apps en el clúster conectado a Azure Arc con Log Analytics habilitado. Log Analytics no se podrá agregar a la extensión más adelante.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --extension-type 'Microsoft.App.Environment' \
        --release-train stable \
        --auto-upgrade-minor-version true \
        --scope cluster \
        --release-namespace $NAMESPACE \
        --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" \
        --configuration-settings "appsNamespace=${NAMESPACE}" \
        --configuration-settings "clusterName=${CONNECTED_ENVIRONMENT_NAME}" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${AKS_CLUSTER_GROUP_NAME}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
    

    Nota

    Para instalar la extensión sin la integración de Log Analytics, quite los tres últimos parámetros --configuration-settings del comando.

    En la siguiente tabla se describen los diferentes parámetros --configuration-settings al ejecutar el comando:

    Parámetro Descripción
    Microsoft.CustomLocation.ServiceAccount Cuenta de servicio creada para la ubicación personalizada. Se recomienda establecerla en el valor default.
    appsNamespace Espacio de nombres que se usa para crear las definiciones y revisiones de la aplicación. Debe coincidir con el espacio de nombres de la versión de la extensión.
    clusterName Nombre del entorno de Kubernetes de la extensión de Container Apps que se creará con esta extensión.
    logProcessor.appLogs.destination Opcional. Destino de los registros de la aplicación. Acepta log-analytics o none, si no se elije ninguno se deshabilitan los registros de la plataforma.
    logProcessor.appLogs.logAnalyticsConfig.customerId Necesario solo cuando logProcessor.appLogs.destination se establece en log-analytics. Identificador del área de trabajo de Log Analytics codificada en base64. Este parámetro debe configurarse como una configuración protegida.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Necesario solo cuando logProcessor.appLogs.destination se establece en log-analytics. Clave compartida del área de trabajo de Log Analytics codificada en base64. Este parámetro debe configurarse como una configuración protegida.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Nombre del grupo de recursos en el que reside el clúster de Azure Kubernetes Service. Válido y necesario solo cuando el clúster subyacente es Azure Kubernetes Service.
  3. Guarde la propiedad id de la extensión de Container Apps para más adelante.

    EXTENSION_ID=$(az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --query id \
        --output tsv)
    
  4. Espere a que la extensión se instale por completo antes de continuar. Ejecute el siguiente comando para hacer que la sesión de terminal espere hasta que se complete:

    az resource wait --ids $EXTENSION_ID --custom "properties.provisioningState!='Pending'" --api-version "2020-07-01-preview"
    

Puede usar kubectl para ver los pods que se han creado en el clúster de Kubernetes:

kubectl get pods -n $NAMESPACE

Para obtener más información sobre estos pods y su rol en el sistema, vea Introducción a Azure Arc.

Creación de una ubicación personalizada

La ubicación personalizada es una ubicación de Azure que se asigna al entorno conectado de Azure Container Apps.

  1. Establezca las siguientes variables de entorno en el nombre que quiera de la ubicación personalizada y en el identificador del clúster conectado a Azure Arc.

    CUSTOM_LOCATION_NAME="my-custom-location" # Name of the custom location
    CONNECTED_CLUSTER_ID=$(az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME --query id --output tsv)
    
  2. Cree la ubicación personalizada:

    az customlocation create \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --host-resource-id $CONNECTED_CLUSTER_ID \
        --namespace $NAMESPACE \
        --cluster-extension-ids $EXTENSION_ID
    

    Nota

    Si experimentase problemas al crear una ubicación personalizada en el clúster, es posible que tenga que habilitar la característica de ubicación personalizada en el clúster. Esto será necesario si ha iniciado sesión en la CLI mediante una entidad de servicio o si ha iniciado sesión con un usuario de Microsoft Entra con permisos restringidos en el recurso de clúster.

  3. Valide que la ubicación personalizada se ha creado correctamente con el siguiente comando. La salida debe mostrar la propiedad provisioningState como Succeeded. Si no es así, vuelva a ejecutar el comando transcurrido un minuto.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Guarde el identificador de la ubicación personalizada para el paso siguiente.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    

Creación del entorno conectado de Azure Container Apps

Para poder empezar a crear aplicaciones en la ubicación personalizada, se necesita un entorno conectado de Azure Container Apps.

  1. Cree el entorno conectado de Container Apps:

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. Valide con el siguiente comando que el entorno conectado de Container Apps se ha creado correctamente. La salida debe mostrar la propiedad provisioningState como Succeeded. Si no es así, vuelva a ejecutarla después de un minuto.

    az containerapp connected-env show --resource-group $GROUP_NAME --name $CONNECTED_ENVIRONMENT_NAME
    

Pasos siguientes