Configuración de un clúster de Kubernetes habilitado para Azure Arc para ejecutar App Service, Functions y Logic Apps (versión preliminar)

Si tiene un clúster de Kubernetes habilitado para Azure Arc, puede usarlo para crear una ubicación personalizada habilitada para App Service e implementar aplicaciones web, aplicaciones de funciones y aplicaciones lógicas en él.

Kubernetes habilitado para Azure Arc le permite hacer que el clúster de Kubernetes local o en la nube sea visible para App Service, Functions y Logic Apps en Azure. Puede crear una aplicación e implementarla como en otra región de Azure.

Requisitos previos

Si no tiene una cuenta de Azure, regístrese hoy mismo para obtener una cuenta gratuita.

Adición de extensiones de la CLI de Azure

Inicie el entorno de Bash en Azure Cloud Shell.

Iniciar Cloud Shell en una nueva ventana

Dado que estos comandos de la CLI aún no forman parte del conjunto de la CLI principal, agréguelos con los siguientes comandos.

az extension add --upgrade --yes --name connectedk8s
az extension add --upgrade --yes --name k8s-extension
az extension add --upgrade --yes --name customlocation
az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az extension remove --name appservice-kube
az extension add --yes --source "https://aka.ms/appsvc/appservice_kube-latest-py2.py3-none-any.whl"

Creación de un clúster conectado

Nota

En este tutorial se usa Azure Kubernetes Service (AKS) para proporcionar instrucciones concretas para configurar un entorno desde cero. Sin embargo, para una carga de trabajo de producción, es probable que no quiera habilitar Azure Arc en un clúster de AKS, ya que ya está administrado en Azure. Los pasos siguientes le ayudarán a empezar a comprender 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 con una dirección IP pública. Sustituya <group-name> por el nombre del grupo de recursos que desee.

    aksClusterGroupName="<group-name>" # Name of resource group for the AKS cluster
    aksName="${aksClusterGroupName}-aks" # Name of the AKS cluster
    resourceLocation="eastus" # "eastus" or "westeurope"
    
    az group create -g $aksClusterGroupName -l $resourceLocation
    az aks create --resource-group $aksClusterGroupName --name $aksName --enable-aad --generate-ssh-keys
    infra_rg=$(az aks show --resource-group $aksClusterGroupName --name $aksName --output tsv --query nodeResourceGroup)
    az network public-ip create --resource-group $infra_rg --name MyPublicIP --sku STANDARD
    staticIp=$(az network public-ip show --resource-group $infra_rg --name MyPublicIP --output tsv --query ipAddress)
    
  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 $aksClusterGroupName --name $aksName --admin
    
    kubectl get ns
    
  3. Cree un grupo de recursos que contenga los recursos de Azure Arc. Sustituya <group-name> por el nombre del grupo de recursos que desee.

    groupName="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $groupName -l $resourceLocation
    
  4. Conecte el clúster que creó a Azure Arc.

    clusterName="${groupName}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $groupName --name $clusterName
    
  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 $groupName --name $clusterName
    

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

Aunque no se necesita un área de trabajo de Log Analytics para ejecutar App Service en Azure Arc, es cómo los desarrolladores pueden obtener registros de aplicaciones para sus aplicaciones que se ejecutan en el clúster de Kubernetes habilitado para Azure Arc.

  1. Para simplificar, cree el área de trabajo ahora.

    workspaceName="$groupName-workspace" # Name of the Log Analytics workspace
    
    az monitor log-analytics workspace create \
        --resource-group $groupName \
        --workspace-name $workspaceName
    
  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.

    logAnalyticsWorkspaceId=$(az monitor log-analytics workspace show \
        --resource-group $groupName \
        --workspace-name $workspaceName \
        --query customerId \
        --output tsv)
    logAnalyticsWorkspaceIdEnc=$(printf %s $logAnalyticsWorkspaceId | base64 -w0) # Needed for the next step
    logAnalyticsKey=$(az monitor log-analytics workspace get-shared-keys \
        --resource-group $groupName \
        --workspace-name $workspaceName \
        --query primarySharedKey \
        --output tsv)
    logAnalyticsKeyEnc=$(printf %s $logAnalyticsKey | base64 -w0) # Needed for the next step
    

Instalación de la extensión de App Service

  1. Establezca las siguientes variables de entorno para el nombre deseado de la extensión de App Service, el espacio de nombres del clúster en el que se deben aprovisionar los recursos y el nombre del entorno de Kubernetes de App Service. Elija un nombre único para <kube-environment-name>, ya que formará parte del nombre de dominio de la aplicación creada en el entorno de Kubernetes de App Service.

    extensionName="appservice-ext" # Name of the App Service extension
    namespace="appservice-ns" # Namespace in your cluster to install the extension and provision resources
    kubeEnvironmentName="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
    
  2. Instale la extensión de App Service en el clúster conectado a Azure Arc, con Log Analytics habilitado. De nuevo, aunque Log Analytics no es necesario, no se puede agregar a la extensión más adelante, por lo que es más fácil hacerlo ahora.

    az k8s-extension create \
        --resource-group $groupName \
        --name $extensionName \
        --cluster-type connectedClusters \
        --cluster-name $clusterName \
        --extension-type 'Microsoft.Web.Appservice' \
        --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=${kubeEnvironmentName}" \
        --configuration-settings "loadBalancerIp=${staticIp}" \
        --configuration-settings "keda.enabled=true" \
        --configuration-settings "buildService.storageClassName=default" \
        --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" \
        --configuration-settings "customConfigMap=${namespace}/kube-environment-config" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${aksClusterGroupName}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${logAnalyticsWorkspaceIdEnc}" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${logAnalyticsKeyEnc}"
    

    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 que se debe crear para la ubicación personalizada que se creará. Se recomienda que se establezca en el valor default.
    appsNamespace Espacio de nombres para aprovisionar las definiciones de la aplicación y los pods. Debe coincidir con el del espacio de nombres de la versión de la extensión.
    clusterName Nombre del entorno de Kubernetes de App Service que se creará con esta extensión.
    loadBalancerIp Dirección IP pública del clúster de Kubernetes. Las aplicaciones de App Service reciben tráfico en esta dirección IP. También informa de la asignación de DNS predeterminada.
    keda.enabled Si KEDA debe instalarse en el clúster de Kubernetes. Acepta true o false.
    buildService.storageClassName Nombre de la clase de almacenamiento para que el servicio de compilación almacene artefactos de compilación. Un valor como default especifica una clase denominada default, y no ninguna clase marcada como predeterminada.
    buildService.storageAccessMode Modo de acceso que se usará con la clase de almacenamiento con nombre anterior. Acepta ReadWriteOnce o ReadWriteMany.
    customConfigMap Nombre del mapa de configuración que establecerá el entorno de Kubernetes de App Service. Actualmente, debe ser <namespace>/kube-environment-config, reemplazando <namespace> por el valor de appsNamespace anterior.
    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.
    logProcessor.appLogs.destination Opcional. Acepta log-analytics.
    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.
  3. Guarde la propiedad id de la extensión de App Service para más adelante.

    extensionId=$(az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $clusterName \
        --resource-group $groupName \
        --name $extensionName \
        --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 $extensionId --custom "properties.installState!='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

Puede obtener más información sobre estos pods y su rol en el sistema de Pods creados por la extensión de App Service.

Creación de una ubicación personalizada

La ubicación personalizada en Azure se usa para asignar el entorno de Kubernetes de App Service.

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

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

    az customlocation create \
        --resource-group $groupName \
        --name $customLocationName \
        --host-resource-id $connectedClusterId \
        --namespace $namespace \
        --cluster-extension-ids $extensionId
    
  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 ejecutarla después de un minuto.

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

    customLocationId=$(az customlocation show \
        --resource-group $groupName \
        --name $customLocationName \
        --query id \
        --output tsv)
    

Creación del entorno de Kubernetes de App Service

Para poder empezar a crear aplicaciones en la ubicación personalizada, necesita un entorno de Kubernetes de App Service.

  1. Creación del entorno de Kubernetes de App Service:

    az appservice kube create \
        --resource-group $groupName \
        --name $kubeEnvironmentName \
        --custom-location $customLocationId \
        --static-ip $staticIp
    
  2. Valide que el entorno de Kubernetes de App Service se ha creado correctamente con el siguiente comando. La salida debe mostrar la propiedad provisioningState como Succeeded. Si no es así, vuelva a ejecutarla después de un minuto.

    az appservice kube show --resource-group $groupName --name $kubeEnvironmentName
    

Pasos siguientes