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.
Analise os requisitos e limitações da visualização pública. De particular importância são os requisitos do cluster.
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 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.
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
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
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
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
Valide a conexão com o comando a seguir. Ele deve mostrar a
provisioningState
propriedade comoSucceeded
. 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.
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
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
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
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 é 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
oufalse
.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 chamadadefault
, 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. Aceita ReadWriteOnce
ouReadWriteMany
.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 deappsNamespace
.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
ounone
, escolher nenhum desativa os logs da plataforma.logProcessor.appLogs.logAnalyticsConfig.customerId
Necessário somente quando logProcessor.appLogs.destination
estiver definido comolog-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 comolog-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.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)
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.
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)
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.
Valide se o local personalizado foi criado com êxito com o comando a seguir. A saída deve mostrar a
provisioningState
propriedade comoSucceeded
. Caso contrário, execute-o novamente após um minuto.az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
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.
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
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 comoSucceeded
. Caso contrário, execute-o novamente após um minuto.az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME