Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este tutorial prepara un clúster Kubernetes compatible para ejecutar Azure Container Apps. Crea un clúster Kubernetes habilitado para Azure Arc, instala la extensión Container Apps, crea una ubicación personalizada y crea un entorno conectado a Container Apps.
Completar este tutorial cambia tanto tu suscripción a Azure como tu clúster de Kubernetes. Necesitas permisos de Azure para crear los recursos listados y acceso de administrador de clúster al clúster de Kubernetes.
Este tutorial muestra cómo habilitar Azure Container Apps en un clúster Kubernetes habilitado para Azure Arc. En este tutorial, usted hará lo siguiente:
- Conecta un clúster de Kubernetes a Azure Arc, si no está ya conectado.
- Opcionalmente, crea un espacio de trabajo de Log Analytics.
- Instala y valida la extensión de Container Apps.
- Crea y valida una ubicación personalizada.
- Crea y valida un entorno conectado con Aplicaciones de Contenedores.
Antes de comenzar, revisa Azure Container Apps on Azure Arc. Si un recurso o componente en el clúster no está listo, consulta Troubleshoot Azure Container Apps on Azure Arc-enabled Kubernetes.
Requisitos previos
Antes de empezar, verifica los siguientes requisitos:
- Una cuenta de Azure con una suscripción activa. Si no tiene ninguna, cree una gratis.
- Permiso para registrar proveedores de recursos y crear grupos de recursos, un recurso Kubernetes habilitado para Azure Arc, una extensión de clúster, una ubicación personalizada, un entorno conectado a Contenedores Apps y, opcionalmente, un espacio de trabajo de Log Analytics.
- La CLI de Azure y sus requisitos previos.
- Una
kubectlversión compatible con tu clúster Kubernetes y el acceso a la red desde tu estación de trabajo al servidor API de Kubernetes. - Un clúster de Kubernetes compatible con nodos de trabajo Linux
amd64y acceso de administrador del clúster a través del contexto activokubectl. - Una implementación funcional de servicio Kubernetes
LoadBalancer. - Conectividad saliente a los endpoints requeridos por Azure Arc y Container Apps.
- CPU y memoria asignables suficientes para las cargas de extensión y aplicaciones.
Antes de cambiar un clúster de producción, revisa el despliegue de Plan a Container Apps en Kubernetes habilitado para Azure Arc.
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 add --name containerapp --upgrade --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.Web --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
Si ya tienes un clúster Kubernetes compatible con Azure Arc en $GROUP_NAME, no crees otro clúster. Establece CLUSTER_NAME el nombre del recurso existente del clúster conectado, verifica el acceso con kubectl get nodes, y continúa creando un espacio de trabajo de Log Analytics.
Los siguientes pasos crean un clúster AKS y conéctalo a Azure Arc. Esta ruta está pensada únicamente como un entorno de evaluación alojado en Azure para el tutorial. Para un clúster local o multicloud existente, sigue Quickstart: Conecta un clúster Kubernetes existente a Azure Arc y luego vuelve a este tutorial.
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-keysObtenga 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 nsCree un grupo de recursos que contenga los recursos de Azure Arc.
az group create --name $GROUP_NAME --location $LOCATIONConecte 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_NAMEEspera a que el clúster conectado termine de provisionarse.
CONNECTED_CLUSTER_ID=$(az connectedk8s show \ --resource-group $GROUP_NAME \ --name $CLUSTER_NAME \ --query id \ --output tsv) az resource wait --ids $CONNECTED_CLUSTER_ID --created --timeout 600 az connectedk8s show \ --resource-group $GROUP_NAME \ --name $CLUSTER_NAME \ --query "{State:provisioningState,Connectivity:connectivityStatus}" \ --output tableContinúa solo cuando
StateesSucceededyConnectivityesConnected. Si el comando se agota, mira Clúster conectado no está listo.
Creación de un área de trabajo de Log Analytics
Un espacio de trabajo de Log Analytics proporciona acceso a los registros de aplicaciones de Contenedores que se ejecutan en el clúster Kubernetes habilitado para Azure Arc. Un espacio de trabajo de Log Analytics es opcional pero recomendado para diagnósticos de aplicaciones.
Importante
Decide si usar Log Analytics antes de instalar la extensión Contenedores de Apps. Proporciona la configuración de Log Analytics durante la instalación de la extensión. No puedes añadir la configuración de Log Analytics a esa instancia de extensión más adelante.
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_NAMEEjecute 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.
Caution
La clave compartida del espacio de trabajo es una credencial. No lo imprimas, no lo envíes al control de código fuente, no lo guardes en el historial del shell ni lo incluyas en paquetes de soporte. Los siguientes comandos lo almacenan en una variable del shell y lo pasan a Azure como una configuración protegida de la extensión.
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
Revisa si hay una instalación KEDA existente
La extensión de Container Apps instala KEDA. Antes de instalar la extensión, comprueba el clúster en busca de componentes KEDA existentes:
kubectl get deployments -A -o custom-columns="NAMESPACE:.metadata.namespace,NAME:.metadata.name"
kubectl get crd scaledobjects.keda.sh
Inspecciona la lista de despliegue de componentes KEDA. Si alguno de los comandos identifica una instalación KEDA existente, detén y confirma la configuración de coexistencia soportada antes de continuar. No elimines la instalación existente del KEDA ni apliques configuraciones de extensiones no documentadas porque otras cargas de trabajo podrían depender de ello.
Instalación de la extensión de Container Apps
Importante
Si vas a desplegar en AKS en Azure Local, asegúrate de configurar HAProxy o un balanceador de carga personalizado antes de intentar instalar la extensión. También puedes usar az containerapp arc setup-core-dns --distro AksAzureLocal para configurar CoreDNS en contextos locales.
Asigne nombres a la extensión de Container Apps, su espacio de nombres de Kubernetes y el entorno conectado.
-
EXTENSION_NAMEidentifica el recurso de extensión de clúster de Azure. -
NAMESPACEse crea en el clúster Kubernetes y contiene componentes de extensión y recursos gestionados por Contenedores Apps. El parámetroappsNamespacedebe coincidir exactamente con el espacio de nombres de la versión de la extensión. -
CONNECTED_ENVIRONMENT_NAMEpasa a formar parte del dominio de aplicación por defecto. Utiliza un nombre compatible con DNS que sea único dentro del grupo de recursos.
No instales cargas de trabajo no relacionadas en el espacio de nombres de extensiones.
EXTENSION_NAME="appenv-ext" NAMESPACE="appplat-ns" CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"-
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 "logProcessor.appLogs.destination=log-analytics" \ --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \ --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"Nota:
Para instalar la extensión sin integración con Log Analytics, elimina los tres parámetros relacionados con el registro del comando.
En un clúster que usa un equilibrador de carga personalizado, establezca
loadBalancerIpen una dirección reservada para la entrada de Container Apps:--configuration-settings "loadBalancerIp=<LOAD_BALANCER_INGRESS_IP>"La dirección debe ser accesible por los clientes de la aplicación y no debe asignarse a otro servicio. Tras la instalación, usa
kubectl get service -n $NAMESPACE -o widepara verificar que el servicio de ingreso de la extensión muestre esta dirección. Configura el DNS con comodines solo después de que se haya asignado la dirección. Consulta los requisitos del DNS.En la siguiente tabla se describen los diferentes parámetros
--configuration-settingsal ejecutar el comando:Parámetro Descripción Microsoft.CustomLocation.ServiceAccountCuenta de servicio creada para la ubicación personalizada. Establezca el valor a default.appsNamespaceEspacio 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. clusterNameNombre del entorno de Kubernetes de la extensión Container Apps creado en esta extensión. logProcessor.appLogs.destinationOpcional. Destino de los registros de la aplicación. Acepta log-analyticsonone, si no se elije ninguno se deshabilitan los registros de la plataforma.logProcessor.appLogs.logAnalyticsConfig.customerIdNecesario solo cuando logProcessor.appLogs.destinationse establece enlog-analytics. El ID del espacio de trabajo de Log Analytics codificado en Base64. Este parámetro debe configurarse como una configuración protegida.logProcessor.appLogs.logAnalyticsConfig.sharedKeyNecesario solo cuando logProcessor.appLogs.destinationse establece enlog-analytics. La clave compartida del espacio de trabajo de Log Analytics codificada en base64. Este parámetro debe configurarse como una configuración protegida.loadBalancerIpDirección IP de entrada del equilibrador de carga. Guarde la propiedad
idde 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)Espere a que la extensión se instale por completo antes de continuar.
az resource wait --ids $EXTENSION_ID --created --timeout 1200 az k8s-extension show \ --cluster-type connectedClusters \ --cluster-name $CLUSTER_NAME \ --resource-group $GROUP_NAME \ --name $EXTENSION_NAME \ --query "{State:provisioningState,Version:currentVersion}" \ --output tableContinúa solo cuando
StateseaSucceeded. Si el comando expira o informa de un fallo, consulta Falla o expira la instalación de extensiones.Inspeccione las cargas de trabajo de la extensión, los servicios y los eventos recientes:
kubectl get pods -n $NAMESPACE kubectl get services -n $NAMESPACE -o wide kubectl get events -n $NAMESPACE --sort-by=.lastTimestampNo crees la ubicación personalizada mientras un pod de extensión está pendiente, se reinicia repetidamente o no está listo de forma inesperada. Para obtener más información sobre estos pods y su rol en el sistema, vea Introducción a Azure Arc.
Si configuraste Log Analytics, borra las variables locales que contienen la clave del espacio de trabajo.
unset LOG_ANALYTICS_KEY LOG_ANALYTICS_KEY_ENC
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.
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)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_IDNota:
Si tienes problemas para crear una ubicación personalizada en tu clúster, puede que necesites activar la función de ubicación personalizada en tu clúster. Activa esta función cuando inicies sesión en la CLI usando un principal de servicio o un usuario de Microsoft Entra con permisos restringidos en el recurso del clúster.
Espera a que la ubicación personalizada termine de aprovisionarse y guarda su ID de recurso.
CUSTOM_LOCATION_ID=$(az customlocation show \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --query id \ --output tsv) az resource wait --ids $CUSTOM_LOCATION_ID --created --timeout 600 az customlocation show \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --query "{State:provisioningState,Host:hostResourceId,Namespace:namespace}" \ --output tableComprueba que
StateesSucceeded, queHostidentifica el clúster conectado que deseas y queNamespacecoincide con$NAMESPACE. Si falla el aprovisionamiento, consulta Error al crear una ubicación personalizada.
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.
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 $LOCATIONEspera a que el entorno conectado termine de aprovisionarse.
CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \ --resource-group $GROUP_NAME \ --name $CONNECTED_ENVIRONMENT_NAME \ --query id \ --output tsv) az resource wait --ids $CONNECTED_ENVIRONMENT_ID --created --timeout 900 az containerapp connected-env show \ --resource-group $GROUP_NAME \ --name $CONNECTED_ENVIRONMENT_NAME \ --query "{State:properties.provisioningState,Location:location,CustomLocation:extendedLocation.name,Domain:properties.defaultDomain}" \ --output yamlContinúa solo cuando
StateesSucceededyCustomLocationcoincide con la ubicación personalizada que creaste en este tutorial. Guarda lo que se muestraDomainpara la configuración DNS de la aplicación. Si falla el aprovisionamiento, consulta Error al crear el entorno conectado.