Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come distribuire un ContainerApp abilitato per Arc in una Zona Estesa. Per i carichi di lavoro PaaS attualmente supportati, vedere Servizi per Azure zone estese. Per acquisire familiarità con Container Apps su Azure Arc, esplorare App contenitore di Azure - Panoramica di Azure Arc.
Prerequisiti
- Un account Azure con una sottoscrizione attiva.
- Installare l'interfaccia della riga di comando di Azure.
- Accesso a un registro contenitori pubblico o privato, ad esempio Registro Azure Container.
- Un cluster Kubernetes abilitato per Azure Arc configurato nelle zone estese.
Annotazioni
Usare la posizione estesa prevista come variabile di posizione.
Come iniziare
Se si ha già familiarità con l'oggetto, è possibile ignorare questo paragrafo. Ecco alcuni argomenti importanti da leggere prima di procedere con la creazione:
- Requisiti e limitazioni dell'anteprima pubblica. I requisiti del cluster sono particolarmente importanti.
- Panoramica dei servizi dati abilitati per Azure Arc
- Modalità di connettività e requisiti
- Concetti relativi alla configurazione dell'archiviazione e all'archiviazione Kubernetes
- Modello di risorse Kubernetes
Creare App contenitore sl servizio Azure Kubernetes abilitato per Arc nelle zone estese
Dopo aver creato il cluster del servizio Azure Kubernetes abilitato per Arc, usare lo script di PowerShell seguente per creare l'app contenitore in un cluster del servizio Azure Kubernetes in una zona estesa e connetterla a Kubernetes abilitata per Azure Arc.
Annotazioni
Assicurarsi di trasferire correttamente i parametri dei passaggi del servizio Azure Kubernetes abilitato per Arc nello 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"
Pulire le risorse
Quando le risorse non sono più necessarie, eliminare il gruppo di risorse my-aks-cluster-group e tutte le risorse contenute usando il comando az group delete .
az group delete --name my-aks-cluster-group
Contenuti correlati
- Creare un cluster del servizio Azure Kubernetes abilitato per Arc in una zona estesa
- Distribuire carichi di lavoro abilitati per Arc in una zona estesa: ManagedSQL
- Distribuire un cluster del servizio Azure Kubernetes in una zona estesa
- Distribuire un account di archiviazione in una zona estesa
- Domande frequenti