Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule dowiesz się, jak wdrożyć aplikację kontenerową z obsługą Arc w strefie rozszerzonej. Zapoznaj się z tematem Co to są strefy rozszerzone platformy Azure? | Usługi dla obecnie obsługiwanych obciążeń PaaS. Zachęcamy do zapoznania się z Omówieniem Container Apps w Azure Arc | Microsoft Learn, aby lepiej zrozumieć usługi Container Apps w Azure Arc.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją.
- Zainstaluj interfejs wiersza polecenia platformy Azure.
- Dostęp do publicznego lub prywatnego rejestru kontenerów, takiego jak usługa Azure Container Registry.
- Klaster Kubernetes obsługujący Azure Arc, skonfigurowany w strefach rozległych.
Uwaga / Notatka
Użyj zamierzonej lokalizacji rozszerzonej jako zmiennej lokalizacji.
Wprowadzenie
Jeśli znasz już temat, możesz pominąć ten akapit. Poniżej przedstawiono ważne tematy, które warto przeczytać przed kontynuowaniem tworzenia:
- Wymagania i ograniczenia publicznej wersji zapoznawczej. Szczególnie ważne są wymagania dotyczące klastra.
- Omówienie usług danych z obsługą usługi Azure Arc
- Tryby łączności i wymagania
- Konfiguracja pamięci masowej i pojęcia dotyczące pamięci masowej w Kubernetes
- Model zasobów platformy Kubernetes
Tworzenie aplikacji kontenerowych na AKS z obsługą Arc w strefach rozszerzonych
Teraz, po utworzeniu klastra AKS obsługiwanego przez Azure Arc, możemy przejść do użycia następującego skryptu PowerShell, aby utworzyć aplikację kontenerową na klastrze AKS w strefie rozszerzonej i połączyć ją z platformą Kubernetes obsługiwaną przez Azure Arc.
Uwaga / Notatka
Upewnij się, że parametry z Arc-enabled AKS są poprawnie przenoszone do skryptu.
# . "./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"
Uprzątnij zasoby
Gdy grupa zasobów my-aks-cluster-group nie będzie już potrzebna, usuń ją i wszystkie zawarte w niej zasoby za pomocą polecenia az group delete .
az group delete --name my-aks-cluster-group
Treści powiązane
- Utwórz klaster AKS z obsługą Arc w strefie rozszerzonej
- Implementacja obciążeń z włączoną obsługą Arc w Rozszerzonej Strefie: PostgreSQL
- Wdrażanie obciążeń z obsługą Arc w strefie rozszerzonej: ManagedSQL
- Wdróż klaster usługi AKS w strefie rozszerzonej
- Wdrażanie konta magazynu w strefie rozszerzonej
- Często zadawane pytania