Tutorial: Maak een container-app op Azure Arc-enabled Kubernetes

In deze tutorial deploy je een container-app naar een bestaande Container Apps-verbonden omgeving op een Kubernetes-cluster met Azure Arc. Vervolgens verifieer je provisioning, DNS, ingress, applicatierespons en logs.

  • Haal een specifieke gekoppelde omgeving op naam op.
  • Maak een container-app met externe ingang.
  • Controleer de revisie van de applicatie en de volledig gekwalificeerde domeinnaam.
  • Stuur een verzoek naar de applicatie.
  • Bekijk applicatielogs in Log Analytics, indien geconfigureerd.
  • Verwijder de tutorialapplicatie.

Vereisten

Controleer voordat u begint, de volgende vereisten:

  • Een verbonden omgeving die wordt gecreëerd door Enable Azure Container Apps te voltooien op Azure Arc-enabled Kubernetes.
  • Azure CLI-toegang tot het abonnement dat de verbonden omgeving bevat.
  • Azure-toestemming om container-apps te maken in de doelresourcegroep en verbonden omgeving.
  • De resourcegroep en de naam van de verbonden omgeving.
  • Netwerk- en DNS-toegang van je werkstation naar het ingangsadres van de verbonden omgeving.
  • Optionele toestemming om de Log Analytics-werkruimte te bevragen die tijdens de installatie van extensies is geconfigureerd.

Voordat je een productieapplicatie uitrolt, raadpleeg Azure Container Apps op Azure Arc. Als de applicatie niet kan worden ingericht of niet bereikbaar wordt, raadpleeg je Problemen met Azure Container Apps op Kubernetes met Azure Arc oplossen.

Voeg de Azure CLI-extensie toe

Start de Bash-omgeving in Azure Cloud Shell.

Start Cloud Shell in een nieuw venster.

Voeg vervolgens de vereiste Azure CLI-extensie toe.

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

Maak een resourcegroep aan voor de applicatie

De container-app kan een andere resourcegroep gebruiken dan de verbonden omgeving. Stel de applicatieresourcegroep en de Azure-regio in die wordt gebruikt om de resource metadata op te slaan. De applicatiecontainer draait in de Kubernetes-cluster die is gekoppeld aan de verbonden omgeving.

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

Krijg de verbonden omgeving

Stel de resourcegroep en naam van de verbonden omgeving in:

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

Haal die specifieke verbonden omgeving op en controleer of deze klaar is:

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

Ga alleen verder wanneer StateSucceeded is.

Maak de app aan en verifieer deze

Maak de voorbeeldtoepassing:

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

Wacht tot de provisioning slaagt:

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)

Ga alleen door wanneer State is Succeeded, Revision niet leeg is, en FQDN het domein van de verbonden omgeving bevat. Test DNS en de applicatierespons van een netwerk dat het ingangsadres van de verbonden omgeving kan bereiken:

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

Je kunt de applicatie ook openen in een browser:

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

Als DNS niet wordt opgelost, er een time-out optreedt voor de aanvraag of het antwoord niet succesvol is, raadpleeg Application ingress isn't reachable.

Diagnostische logboeken ophalen met Log Analytics

Notitie

Deze sectie is alleen van toepassing wanneer je Log Analytics configureert tijdens de installatie van de Container Apps-extensie. Als je Log Analytics niet hebt geconfigureerd, sla dan deze sectie over.

Open de Log Analytics-werkruimte die is geconfigureerd voor de Container Apps-extensie en selecteer Logs. Voer de volgende query uit om logs van de afgelopen 72 uur te tonen. De eerste inname kan 10–15 minuten duren.

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

De toepassingslogboeken voor alle apps die in uw Kubernetes-cluster worden gehost, worden vastgelegd in de Log Analytics-werkruimte in de aangepaste logboektabel met de naam ContainerAppConsoleLogs_CL.

  • Log_s bevat applicatielogberichten en containerlevenscyclusberichten.
  • ContainerAppName_s identificeert de container-app. Dit veld wordt gebruikt door de voorgaande query.

Meer informatie over logboekquery's vindt u in aan de slag met Kusto.

Maak de tutorialapplicatie schoon

Verwijder de voorbeeldcontainer-app:

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

Als je de applicatieresourcegroep alleen voor deze tutorial hebt aangemaakt en die bevat geen andere bronnen, verwijder hem dan.

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

Verwijder de verbonden omgeving, aangepaste locatie, extensie of verbonden cluster niet, want andere applicaties kunnen deze bronnen delen.

Volgende stappen