Criar um cluster do Kubernetes compatível com o Azure Arc para executar o Serviço de Aplicações, as Funções e o Logic Apps (Pré-visualização)

Se você tiver um cluster Kubernetes habilitado para Azure Arc, poderá usá-lo para criar um local personalizado habilitado para o Serviço de Aplicativo e implantar aplicativos Web, aplicativos de função e aplicativos lógicos nele.

O Kubernetes habilitado para Azure Arc permite que você torne seu cluster Kubernetes local ou na nuvem visível para o Serviço de Aplicativo, Funções e Aplicativos Lógicos no Azure. Você pode criar um aplicativo e implantá-lo como outra região do Azure.

Pré-requisitos

Se você não tiver uma conta do Azure, inscreva-se hoje mesmo para obter uma conta gratuita.

Adicionar extensões da CLI do Azure

Inicie o ambiente Bash no Azure Cloud Shell.

Como esses comandos da CLI ainda não fazem parte do conjunto principal da CLI, adicione-os com os seguintes 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 --upgrade --yes --name appservice-kube

Criar um cluster conectado

Nota

Este tutorial usa o Serviço Kubernetes do Azure (AKS) para fornecer instruções concretas para configurar um ambiente do zero. No entanto, para uma carga de trabalho de produção, você provavelmente não desejará habilitar o Azure Arc em um cluster AKS, pois ele já é gerenciado no Azure. As etapas abaixo ajudarão você a começar a entender o serviço, mas para implantações de produção, elas devem ser vistas como ilustrativas, não prescritivas. Consulte Guia de início rápido: conectar um cluster Kubernetes existente ao Azure Arc para obter instruções gerais sobre como criar um cluster Kubernetes habilitado para Azure Arc.

  1. Crie um cluster no Serviço Kubernetes do Azure com um endereço IP público. Substitua <group-name> pelo nome do grupo de recursos desejado.

    AKS_CLUSTER_GROUP_NAME="<group-name>" # Name of resource group for the AKS cluster
    AKS_NAME="${aksClusterGroupName}-aks" # Name of the AKS cluster
    RESOURCE_LOCATION="eastus" # "eastus" or "westeurope"
    
    az group create -g $AKS_CLUSTER_GROUP_NAME -l $RESOURCE_LOCATION
    az aks create --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --enable-aad --generate-ssh-keys
    
  2. Obtenha o arquivo kubeconfig e teste sua conexão com o cluster. Por padrão, o arquivo kubeconfig é salvo no ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Crie um grupo de recursos para conter seus recursos do Azure Arc. Substitua <group-name> pelo nome do grupo de recursos desejado.

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_LOCATION
    
  4. Conecte o cluster que você criou ao 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 a conexão com o comando a seguir. Ele deve mostrar a provisioningState propriedade como Succeeded. Caso contrário, execute o comando novamente após um minuto.

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

Criar uma área de trabalho do Log Analytics

Embora um espaço de trabalho do Log Analytic não seja necessário para executar o Serviço de Aplicativo no Azure Arc, é como os desenvolvedores podem obter logs de aplicativos para seus aplicativos que estão sendo executados no cluster Kubernetes habilitado para Azure Arc.

  1. Para simplificar, crie o espaço de trabalho agora.

    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. Execute os comandos a seguir para obter o ID do espaço de trabalho codificado e a chave compartilhada para um espaço de trabalho existente do Log Analytics. Você precisa deles na próxima etapa.

    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
    

Instalar a extensão do Serviço de Aplicações

  1. Defina as seguintes variáveis de ambiente para o nome desejado da extensão do Serviço de Aplicativo, o namespace do cluster no qual os recursos devem ser provisionados e o nome do ambiente Kubernetes do Serviço de Aplicativo. Escolha um nome exclusivo para <kube-environment-name>, porque ele fará parte do nome de domínio do aplicativo criado no ambiente Kubernetes do Serviço de Aplicativo.

    EXTENSION_NAME="appservice-ext" # Name of the App Service extension
    NAMESPACE="appservice-ns" # Namespace in your cluster to install the extension and provision resources
    KUBE_ENVIRONMENT_NAME="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
    
  2. Instale a extensão do Serviço de Aplicativo em seu cluster conectado ao Azure Arc, com o Log Analytics habilitado. Novamente, embora o Log Analytics não seja necessário, você não pode adicioná-lo à extensão mais tarde, portanto, é mais fácil fazê-lo agora.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --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=${KUBE_ENVIRONMENT_NAME}" \
        --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" \
        --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 a extensão sem integração com o Log Analytics, remova os três --configuration-settings últimos parâmetros do comando.

    A tabela a seguir descreve os vários --configuration-settings parâmetros ao executar o comando:

    Parâmetro Description
    Microsoft.CustomLocation.ServiceAccount A conta de serviço que deve ser criada para o local personalizado que será criado. Recomenda-se que isso seja definido como o valor default.
    appsNamespace O namespace para provisionar as definições e pods do aplicativo. Deve corresponder ao namespace da versão de extensão.
    clusterName O nome do ambiente Kubernetes do Serviço de Aplicativo que será criado em relação a essa extensão.
    keda.enabled Se o KEDA deve ser instalado no cluster do Kubernetes. Aceita true ou false.
    buildService.storageClassName O nome da classe de armazenamento para o serviço de compilação para armazenar artefatos de compilação. Um valor como default especifica uma classe chamada default, e não qualquer classe marcada como padrão. O padrão é uma classe de armazenamento válida para AKS e AKS HCI, mas pode não ser para outras disrubções/plataformas.
    buildService.storageAccessMode O modo de acesso a ser usado com a classe de armazenamento nomeada acima. Aceita ReadWriteOnce ou ReadWriteMany.
    customConfigMap O nome do mapa de configuração que será definido pelo ambiente Kubernetes do Serviço de Aplicativo. Atualmente, deve ser <namespace>/kube-environment-config, substituindo <namespace> pelo valor de appsNamespace acima.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group O nome do grupo de recursos no qual o cluster do Serviço Kubernetes do Azure reside. Válido e necessário somente quando o cluster subjacente é o Serviço Kubernetes do Azure.
    logProcessor.appLogs.destination Opcional. Aceita log-analytics ou none, escolher nenhum desativa os logs da plataforma.
    logProcessor.appLogs.logAnalyticsConfig.customerId Necessário somente quando logProcessor.appLogs.destination estiver definido como log-analytics. O ID do espaço de trabalho de análise de log codificado em base64. Este parâmetro deve ser configurado como uma configuração protegida.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Necessário somente quando logProcessor.appLogs.destination estiver definido como log-analytics. A chave compartilhada do espaço de trabalho de análise de log codificado em base64. Este parâmetro deve ser configurado como uma configuração protegida.
  3. Salve a id propriedade da extensão do Serviço de Aplicativo para mais tarde.

    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. Aguarde até que a extensão seja totalmente instalada antes de continuar. Você pode fazer com que sua sessão de terminal aguarde até que isso seja concluído executando o seguinte comando:

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

Você pode usar kubectl para ver os pods que foram criados em seu cluster Kubernetes:

kubectl get pods -n $NAMESPACE

Você pode saber mais sobre esses pods e sua função no sistema em Pods criados pela extensão do Serviço de Aplicativo.

Criar um local personalizado

O local personalizado no Azure é usado para atribuir o ambiente Kubernetes do Serviço de Aplicativo.

  1. Defina as seguintes variáveis de ambiente para o nome desejado do local personalizado e para a ID do cluster conectado ao 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. Crie o local personalizado:

    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

    Se você tiver problemas ao criar um local personalizado no cluster, talvez seja necessário habilitar o recurso de local personalizado no cluster. Isso é necessário se estiver conectado à CLI usando uma entidade de serviço ou se você estiver conectado com um usuário do Microsoft Entra com permissões restritas no recurso de cluster.

  3. Valide se o local personalizado foi criado com êxito com o comando a seguir. A saída deve mostrar a provisioningState propriedade como Succeeded. Caso contrário, execute-o novamente após um minuto.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Salve a ID de local personalizada para a próxima etapa.

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

Criar o ambiente Kubernetes do Serviço de Aplicativo

Antes de começar a criar aplicativos no local personalizado, você precisa de um ambiente Kubernetes do Serviço de Aplicativo.

  1. Crie o ambiente Kubernetes do Serviço de Aplicativo:

    az appservice kube create \
        --resource-group $GROUP_NAME \
        --name $KUBE_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID 
    
  2. Valide se o ambiente Kubernetes do Serviço de Aplicativo foi criado com êxito com o comando a seguir. A saída deve mostrar a provisioningState propriedade como Succeeded. Caso contrário, execute-o novamente após um minuto.

    az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME
    

Próximos passos