Configurar um cluster do Kubernetes habilitado para o Azure Arc para executar o Serviço de Aplicativo, o Functions e os Aplicativos Lógicos (versão prévia)

Se você tem um cluster do Kubernetes habilitado para Azure Arc, use-o para criar uma localização personalizada habilitada para o Serviço de Aplicativo e implante aplicativos Web, aplicativos de funções e aplicativos lógicos nele.

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

Pré-requisitos

Caso você não tenha uma conta do Azure, inscreva-se hoje mesmo em 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 da CLI principal, adicione-os com os comandos a seguir.

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

Observação

Este tutorial usa o AKS (Serviço de Kubernetes do Azure) 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 irá querer habilitar o Azure Arc em um cluster do AKS, pois ele já é gerenciado no Azure. As etapas a seguir ajudarão você a começar a entender o serviço, mas para implantações de produção, elas devem ser interpretadas como ilustrativas, não prescritivas. Confira Guia de Início Rápido: Conectar um cluster existente do Kubernetes ao Azure Arc para obter instruções gerais sobre como criar um cluster do Kubernetes habilitado para Azure Arc.

  1. Crie um cluster no Serviço de 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 em ~/.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 os 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 criado 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. Ela mostrará a propriedade provisioningState como Succeeded. Caso contrário, execute o comando novamente após um minuto.

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

Criar um workspace do Log Analytics

Embora um workspace do Log Analytics não seja necessário para executar o Serviço de Aplicativo no Azure Arc, é assim que os desenvolvedores podem obter logs dos aplicativos em execução no cluster do Kubernetes habilitado para Azure Arc.

  1. Para simplificar, crie o workspace 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 a ID e a chave compartilhada codificadas de um workspace existente do Log Analytics. Você precisará 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 Aplicativo

  1. Defina as variáveis de ambiente a seguir 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 de 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 de 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 no cluster conectado ao Azure Arc, com o Log Analytics habilitado. Novamente, embora o Log Analytics não seja necessário, não será possível adicioná-lo à extensão posteriormente. Portanto, é mais fácil fazer isso 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}"
    

    Observação

    Para instalar a extensão sem a integração do Log Analytics, remova os três últimos parâmetros --configuration-settings do comando.

    A seguinte tabela descreve os vários parâmetros --configuration-settings durante a execução do comando:

    Parâmetro Descrição
    Microsoft.CustomLocation.ServiceAccount A conta de serviço que deve ser criada para a localização personalizada que será criada. Recomendamos que isso seja definido com o valor default.
    appsNamespace O namespace no qual as definições de aplicativo e os pods serão provisionados. Precisa corresponder àquele do namespace de versão da extensão.
    clusterName O nome do ambiente de Kubernetes do Serviço de Aplicativo que será criado nessa extensão.
    keda.enabled Indica se o KEDA deve ser instalado no cluster do Kubernetes. Aceita true ou false.
    buildService.storageClassName O nome da classe de armazenamento para que o serviço de build armazene artefatos de compilação. Um valor como default especifica uma classe chamada default, não qualquer classe marcada como padrão. O padrão é uma classe de armazenamento válida para o AKS e o HCI AKS, mas pode não ser para outras distrubtions/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ções que será definido pelo ambiente de Kubernetes do Serviço de Aplicativo. No momento, ele precisa 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 de Kubernetes do Azure reside. Válido e obrigatório somente quando o cluster subjacente for o Serviço de Kubernetes do Azure.
    logProcessor.appLogs.destination Opcional. Aceita log-analytics ou none, escolher nenhum desabilita os logs da plataforma.
    logProcessor.appLogs.logAnalyticsConfig.customerId Obrigatório somente quando logProcessor.appLogs.destination estiver definido como log-analytics. A ID do workspace do Log Analytics codificada em base64. Esse parâmetro deve ser definido como uma configuração protegida.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Obrigatório somente quando logProcessor.appLogs.destination estiver definido como log-analytics. A chave compartilhada do workspace do Log Analytics codificada em base64. Esse parâmetro deve ser definido como uma configuração protegida.
  3. Salve a propriedade id 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 instalada por completo antes de continuar. Você pode fazer com que a 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"
    

Use kubectl para ver os pods que foram criados no cluster do Kubernetes:

kubectl get pods -n $NAMESPACE

Saiba mais sobre esses pods e a função deles no sistema em Pods criado pela extensão do Serviço de Aplicativo.

Criar uma localização personalizada

A localização personalizada no Azure é usada para atribuir o ambiente de Kubernetes do Serviço de Aplicativo.

  1. Defina as variáveis de ambiente a seguir para o nome desejado da localização personalizada e para a ID do cluster conectado do 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 a localização 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
    

    Observação

    Se você tiver problemas ao criar um local personalizado em seu cluster, talvez seja necessário habilitar o recurso de localização personalizada em seu cluster. Isso será necessário se você fizer logon na 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 a localização personalizada foi criada com êxito com o comando a seguir. A saída deverá mostrar a propriedade provisioningState como Succeeded. Caso contrário, execute-a novamente após um minuto.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Salve a ID de localização 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 de Kubernetes do Serviço de Aplicativo

Para começar a criar aplicativos na localização personalizada, você precisa ter um ambiente de Kubernetes do Serviço de Aplicativo.

  1. Crie o ambiente de 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 de Kubernetes do Serviço de Aplicativo foi criado com êxito com o comando a seguir. A saída deverá mostrar a propriedade provisioningState como Succeeded. Caso contrário, execute-a novamente após um minuto.

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

Próximas etapas