Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Neste artigo, você aprenderá como implantar um ContainerApp habilitado para Arc em uma zona estendida. Consulte O que é o Azure Extended Zones? | Serviços para cargas de trabalho PaaS atualmente suportadas. Sinta-se à vontade para explorar Aplicativos de Contêiner no Azure Arc Visão geral | Microsoft Learn para se familiarizar com Aplicativos de Contêiner no Azure Arc.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa.
- Instale a CLI do Azure.
- Acesso a um registo de contentores público ou privado, como o Azure Container Registry.
- Um cluster Kubernetes com Azure Arc configurado em Zonas Estendidas.
Observação
Use o Local Estendido pretendido como sua variável de localização.
Como Começar
Se você já está familiarizado com o assunto, você pode pular este parágrafo. Aqui estão tópicos importantes que você pode querer ler antes de prosseguir com a criação:
- Requisitos e limitações da pré-visualização pública. De particular importância são os requisitos do cluster.
- Visão geral dos serviços de dados habilitados para Azure Arc
- Modos e requisitos de conectividade
- Configuração de armazenamento e conceitos de armazenamento do Kubernetes
- Modelo de recursos do Kubernetes
Criar aplicativos de contêiner no AKS habilitado para Arc em zonas estendidas
Agora que o cluster AKS habilitado para Arc foi criado, podemos continuar a utilizar o seguinte script PowerShell para criar a nossa Aplicação de Contêiner num cluster AKS em uma Zona Estendida e conectá-la ao Kubernetes habilitado para Azure Arc.
Observação
Certifique-se de transferir corretamente os parâmetros das etapas do AKS com suporte para o Arc para o script.
# . "./CreateArcEnabledAksOnEZ.ps1"
# Create a container app on an AKS cluster in an edge zone and connect it to Azure Arc-enabled Kubernetes
function CreateContainerAppOnArcEnabledAksEz {
param(
[string] $AKSClusterResourceGroupName,
[string] $location = "westus",
[string] $AKSName,
[string] $edgeZone,
[int] $nodeCount = 2,
[string] $vmSize = "standard_nv12ads_a10_v5",
[string] $ArcResourceGroupName,
[string] $CONNECTED_ENVIRONMENT_NAME,
[string] $CUSTOM_LOCATION_NAME,
[string] $SubscriptionId,
[string] $ACRName,
[string] $imageName,
[switch] $Debug
)
try {
# Set the subscription
az account set --subscription $SubscriptionId
# Create the Arc-enabled EZ AKS cluster
createArcEnabledAksOnEz -SubscriptionId $SubscriptionId -AKSClusterResourceGroupName $AKSClusterResourceGroupName -location $location -AKSName $AKSName -edgeZone $edgeZone -nodeCount $nodeCount -vmSize $vmSize -ArcResourceGroupName $ArcResourceGroupName -Debug:$Debug
# Install container apps extension
$CLUSTER_NAME = "$ArcResourceGroupName-cluster" # Name of the connected cluster resource
$EXTENSION_NAME="appenv-ext"
$NAMESPACE="app-ns"
az k8s-extension create `
--resource-group $ArcResourceGroupName `
--name $EXTENSION_NAME `
--cluster-type connectedClusters `
--cluster-name $CLUSTER_NAME `
--extension-type 'Microsoft.App.Environment' `
--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=${CONNECTED_ENVIRONMENT_NAME}" `
--configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${AKSClusterResourceGroupName}"
# Save id property of the Container Apps extension for later
$EXTENSION_ID=$(az k8s-extension show `
--cluster-type connectedClusters `
--cluster-name $CLUSTER_NAME `
--resource-group $ArcResourceGroupName `
--name $EXTENSION_NAME `
--query id `
--output tsv)
# Wait for extension to fully install before proceeding
az resource wait --ids $EXTENSION_ID --custom "properties.provisioningState!='Pending'" --api-version "2020-07-01-preview"
$CONNECTED_CLUSTER_ID=$(az connectedk8s show --resource-group $ArcResourceGroupName --name $CLUSTER_NAME --query id --output tsv)
az customlocation create `
--resource-group $ArcResourceGroupName `
--name $CUSTOM_LOCATION_NAME `
--host-resource-id $CONNECTED_CLUSTER_ID `
--namespace $NAMESPACE `
--cluster-extension-ids $EXTENSION_ID
# DEBUG: Test custom location creation
if ($Debug) {
Write-Debug az customlocation show --resource-group $ArcResourceGroupName --name $CUSTOM_LOCATION_NAME
}
# Save id property of the custom location for later
$CUSTOM_LOCATION_ID=$(az customlocation show `
--resource-group $ArcResourceGroupName `
--name $CUSTOM_LOCATION_NAME `
--query id `
--output tsv)
# Create container Apps connected environment
az containerapp connected-env create `
--resource-group $ArcResourceGroupName `
--name $CONNECTED_ENVIRONMENT_NAME `
--custom-location $CUSTOM_LOCATION_ID `
--location eastus
# DEBUG: validate that the connected environment is successfully created
if ($Debug) {
Write-Debug az containerapp connected-env show --resource-group $ArcResourceGroupName --name $CONNECTED_ENVIRONMENT_NAME
}
# Create a new resource group for the container app
$myResourceGroup="${imageName}-resource-group"
az group create --name $myResourceGroup --location eastus
# Get the custom location id
$customLocationId=$(az customlocation show --resource-group $ArcResourceGroupName --name $CUSTOM_LOCATION_NAME --query id --output tsv)
# Get info about the connected environment
$myContainerApp="${imageName}-container-app"
$myConnectedEnvironment=$(az containerapp connected-env list --custom-location $customLocationId -o tsv --query '[].id')
# create acr and group
az group create --name $ArcResourceGroupName --location eastus
az acr create --resource-group $ArcResourceGroupName --name $ACRName --sku Basic
# Wait for the ACR to be created
Start-Sleep -Seconds 10
# login to acr and get login server
az acr login --name $ACRName
$ACRLoginServer = $(az acr show --name $ACRName --query loginServer --output tsv)
# DEBUG: Test ACR login
if ($Debug) {
Write-Debug az acr show --name $ACRName
Write-Debug az acr repository list --name $ACRName --output table
}
# Build and push docker image
cd .\DemoApp
docker build -t ${imageName} .
docker tag ${imageName} ${ACRLoginServer}/${imageName}:latest
docker push ${ACRLoginServer}/${imageName}:latest
cd ..
# Enable admin user in ACR and get password
az acr update -n $ACRName --admin-enabled true
$password = $(az acr credential show --name ${ACRName} --query passwords[0].value --output tsv)
# Create container app
az containerapp create `
--resource-group $myResourceGroup `
--name $myContainerApp `
--environment $myConnectedEnvironment `
--environment-type connected `
--registry-server ${ACRLoginServer} `
--registry-username ${ACRName} `
--registry-password $password `
--image "${ACRLoginServer}/${imageName}:latest" `
--target-port 80 `
--ingress 'external' `
# Open the container app in a browser
az containerapp browse --resource-group $myResourceGroup --name $myContainerApp
}
catch {
# Catch any error
Write-Error "An error occurred"
Write-Error $Error[0]
}
}
CreateContainerAppOnArcEnabledAksEz -AKSClusterResourceGroupName "my-aks-cluster-group" `
-location "westus" `
-AKSName "my-aks-cluster"`
-edgeZone "losangeles" `
-nodeCount 2 `
-vmSize "standard_nv12ads_a10_v5" `
-ArcResourceGroupName "myArcResourceGroup" `
-CONNECTED_ENVIRONMENT_NAME "myConnectedEnvironment" `
-CUSTOM_LOCATION_NAME "myCustomLocation" `
-SubscriptionId "<your subscription>"`
-ACRName "containerappezacr" `
-imageName "myimage"
Limpeza de recursos
Quando não for mais necessário, exclua o grupo de recursos my-aks-cluster-group e todos os recursos que ele contém usando o comando az group delete .
az group delete --name my-aks-cluster-group
Conteúdo relacionado
- Criar um cluster AKS com suporte para Arc numa Zona Expandida
- Implantar cargas de trabalho habilitadas para Arc em uma zona estendida: PostgreSQL
- Implantar cargas de trabalho habilitadas para Arc em uma zona estendida: ManagedSQL
- Implantar um cluster AKS em uma Zona Estendida
- Implantar uma conta de armazenamento em uma zona estendida
- Perguntas mais frequentes