Partilhar via


Configurar um cluster Kubernetes habilitado para Azure Arc para executar o Serviço de Aplicativo, Funções e Aplicativos Lógicos (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.

Prerequisites

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

Note

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 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.

Para criar um cluster conectado:

  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 um espaço 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 Aplicativo

Para instalar a extensão do Serviço de Aplicativo:

  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 faz 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}"
    

    Note

    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:

    Parameter Description
    Microsoft.CustomLocation.ServiceAccount A conta de serviço que deve ser criada para o local personalizado que é 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 criado nessa 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 no Azure Local, mas pode não ser para outras distribuições/plataformas.
    buildService.storageAccessMode O modo de acesso a ser usado com a classe de armazenamento nomeada. 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.
    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 Optional. 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 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
    

    Note

    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