Tutorial: Stwórz aplikację kontenerową na Kubernetes obsługującym Azure Arc

W tym tutorialu wdrażasz aplikację kontenerową do istniejącego środowiska Container Apps connected na klastrze Kubernetes z obsługą Azure Arc. Następnie weryfikujesz proces udostępniania, DNS, ruch przychodzący, odpowiedź aplikacji i dzienniki.

  • Pobierz konkretne połączone środowisko po nazwie.
  • Stwórz aplikację kontenerową z zewnętrznym wejściem.
  • Zweryfikowaj wersję aplikacji i w pełni kwalifikowaną nazwę domeny.
  • Wyślij zapytanie do aplikacji.
  • Przeglądaj logi aplikacji w Log Analytics, jeśli są skonfigurowane.
  • Usuń aplikację tutorialową.

Wymagania wstępne

Zanim zaczniesz, sprawdź następujące wymagania:

  • Połączone środowisko utworzone przez wykonanie Włączanie usługi Azure Container Apps w klastrze Kubernetes z obsługą usługi Azure Arc.
  • Dostęp za pomocą interfejsu wiersza polecenia platformy Azure do subskrypcji zawierającej połączone środowisko.
  • Uprawnienie platformy Azure do tworzenia aplikacji kontenerowych w docelowej grupie zasobów i połączonym środowisku.
  • Grupa zasobów i nazwa środowiska połączonego.
  • Dostęp do sieci i systemu DNS ze stacji roboczej do adresu wejściowego połączonego środowiska.
  • Opcjonalne uprawnienia do zapytań w przestrzeni roboczej Log Analytics skonfigurowanej podczas instalacji rozszerzenia.

Przed wdrożeniem aplikacji produkcyjnej zapoznaj się z usługą Azure Container Apps w usłudze Azure Arc. Jeśli aplikacja nie zostanie aprowizowana lub nie będzie dostępna, zobacz Rozwiązywanie problemów z usługą Azure Container Apps w klastrze Kubernetes z obsługą usługi Azure Arc.

Dodaj rozszerzenie Azure CLI

Uruchom środowisko powłoki Bash w usłudze Azure Cloud Shell.

Uruchom usługę Cloud Shell w nowym oknie.

Następnie dodaj wymagane rozszerzenie Azure CLI.

az extension add --name containerapp --upgrade --yes

Stwórz grupę zasobów dla aplikacji

Aplikacja kontenerowa może korzystać z innej grupy zasobów niż środowisko połączone. Ustaw grupę zasobów aplikacji oraz region Azure używany do przechowywania metadanych zasobów. Kontener aplikacji działa w klastrze Kubernetes powiązanym z połączonym środowiskiem.

APP_RESOURCE_GROUP="my-container-apps-resource-group"
AZURE_LOCATION="eastus"
az group create --name $APP_RESOURCE_GROUP --location $AZURE_LOCATION

Zdobądź środowisko połączone

Ustaw grupę zasobów oraz nazwę środowiska połączonego:

CONNECTED_ENVIRONMENT_RESOURCE_GROUP="<CONNECTED_ENVIRONMENT_RESOURCE_GROUP>"
CONNECTED_ENVIRONMENT_NAME="<CONNECTED_ENVIRONMENT_NAME>"

Pobierz to konkretne środowisko połączone i sprawdź, czy jest gotowe:

CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query id \
  --output tsv)

az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query "{Id:id,State:properties.provisioningState,Domain:properties.defaultDomain}" \
  --output yaml

Kontynuuj tylko wtedy, gdy State jest Succeeded.

Utwórz i zweryfikuj aplikację

Utwórz przykładową aplikację:

CONTAINER_APP_NAME="my-container-app"

az containerapp create \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --environment $CONNECTED_ENVIRONMENT_ID \
  --environment-type connected \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external

Poczekaj, aż proces aprowizacji zakończy się pomyślnie:

CONTAINER_APP_ID=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query id \
  --output tsv)

az resource wait --ids $CONTAINER_APP_ID --created --timeout 600

az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query "{State:properties.provisioningState,Revision:properties.latestReadyRevisionName,FQDN:properties.configuration.ingress.fqdn}" \
  --output yaml

APP_FQDN=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query properties.configuration.ingress.fqdn \
  --output tsv)

Kontynuuj tylko wtedy, gdy State jest Succeeded, Revision nie jest puste, a FQDN zawiera domenę połączonego środowiska. Testuj DNS oraz odpowiedź aplikacji z sieci, która może dotrzeć do adresu wejściowego środowiska połączonego:

nslookup $APP_FQDN
curl --fail --show-error "https://$APP_FQDN"

Możesz także otworzyć aplikację w przeglądarce:

az containerapp browse \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME

Jeśli DNS nie zostanie rozwiązany, żądanie się skończy lub odpowiedź nie jest pomyślna, zobacz: Wejście aplikacji nie jest osiągalne.

Pobieranie dzienników diagnostycznych przy użyciu usługi Log Analytics

Uwaga

Ta sekcja dotyczy tylko konfiguracji Log Analytics podczas instalacji rozszerzenia Container Apps. Jeśli nie konfigurowałeś Log Analytics, pomiń tę sekcję.

Otwórz przestrzeń roboczą Log Analytics skonfigurowaną dla rozszerzenia Container Apps i wybierz Logs. Uruchom następujące zapytanie, aby wyświetlić logi z ostatnich 72 godzin. Pierwsze spożycie może trwać 10–15 minut.

let StartTime = ago(72h);
let EndTime = now();
ContainerAppConsoleLogs_CL
| where TimeGenerated between (StartTime .. EndTime)
| where ContainerAppName_s =~ "my-container-app"

Dzienniki aplikacji dla wszystkich aplikacji hostowanych w klastrze Kubernetes są rejestrowane w obszarze roboczym usługi Log Analytics w niestandardowej tabeli dzienników o nazwie ContainerAppConsoleLogs_CL.

  • Log_s zawiera komunikaty dziennika aplikacji oraz komunikaty cyklu życia kontenera.
  • ContainerAppName_s identyfikuje aplikację kontenerową. To pole jest używane przez poprzednie zapytanie.

Więcej o zapytaniach dzienników można dowiedzieć się z przewodnika Rozpoczynanie pracy z Kusto.

Uporządkuj aplikację tutorialową

Usuń przykładową aplikację kontenerową:

az containerapp delete \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --yes

Jeśli utworzyłeś grupę zasobów aplikacji tylko dla tego tutoriala i nie zawiera ona żadnych innych zasobów, usuń ją.

az group delete --name $APP_RESOURCE_GROUP --yes --no-wait

Nie usuwaj środowiska połączonego, niestandardowej lokalizacji, rozszerzenia ani połączonego klastra, ponieważ inne aplikacje mogą dzielić te zasoby.

Następne kroki