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.
Examine os requisitos e as 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 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 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.
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
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
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
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
Valide a conexão com o comando a seguir. Ela mostrará a propriedade
provisioningState
comoSucceeded
. 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.
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
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
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 faz 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
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 o local personalizado que é criado. 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 é criado nessa extensão. keda.enabled
Indica se o KEDA deve ser instalado no cluster do Kubernetes. Aceita true
oufalse
.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 chamadadefault
, não qualquer classe marcada como padrão. O padrão é uma classe de armazenamento válida para AKS e AKS HCI, mas é possível que não seja para outras distribuiçõ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çõ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 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 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
ounone
, escolher nenhum desabilita os logs da plataforma.logProcessor.appLogs.logAnalyticsConfig.customerId
Obrigatório somente quando logProcessor.appLogs.destination
estiver definido comolog-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 comolog-analytics
. A chave compartilhada do workspace do Log Analytics codificada em base64. Esse parâmetro deve ser definido como uma configuração protegida.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)
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 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.
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)
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.
Valide se a localização personalizada foi criada com êxito com o comando a seguir. A saída deverá mostrar a propriedade
provisioningState
comoSucceeded
. Caso contrário, execute-a novamente após um minuto.az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
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.
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
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
comoSucceeded
. Caso contrário, execute-a novamente após um minuto.az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME