Udrul din oprindelige cloudapp manuelt i Azure Kubernetes Service
Før du kan automatisere udrulningen af dit websted, skal du udrulle den eksisterende eShop-app manuelt til Azure Kubernetes Service (AKS). Du opretter Azure-ressourcerne og udruller appen til AKS ved hjælp af Azure CLI-kommandoer og bash-scripts. Endelig opretter du en Azure Active Directory-tjenesteprincipal (Azure AD) for at tillade, at GitHub-handlinger udrulles i AKS og Azure Container Registry.
Kommandoerne opretter følgende ressourcer for at installere en opdateret version af appen eShop.
- Klargør en Azure Container Registry (ACR), og send derefter billeder til registreringsdatabasen.
- Klargør en AKS-klynge, og udrul derefter objektbeholderne i klyngen.
- Test udrulningen.
- Opret tjenesteprincipaler for at tillade, at GitHub-handlinger udrulles til AKS og Azure Container Registry.
Important
Sørg for, at du har opfyldt forudsætningerne , før du begynder.
Åbn udviklingsmiljøet
Du kan vælge at bruge et GitHub-kodeområde, der er vært for øvelsen, eller fuldføre øvelsen lokalt i Visual Studio Code.
Konfiguration af GitHub Codespaces
Kopiér det https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops lager til din egen GitHub-konto. Derefter på din nye kopi:
- Vælg Kode.
- Vælg fanen Codespaces .
- Vælg ikonet + for at oprette dit kodeområde.
GitHub tager flere minutter at oprette og konfigurere kodeområdet. Når processen er fuldført, kan du se kodefilerne til øvelsen.
Valgfrit: Konfiguration af Visual Studio Code
Hvis du vil bruge Visual Studio Code, skal du kopiere det https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops lager til din egen GitHub-konto og klone det lokalt. Then:
- Installer eventuelle systemkrav for at køre Dev Container i Visual Studio Code.
- Kontrollér, at Docker kører.
- Åbn mappen med det klonede lager i et nyt Visual Studio Code-vindue
- Tryk på Ctrl+Shift+P for at åbne kommandopaletten.
- Søg efter: >udviklerobjektbeholdere: Genopbyg og genåbn i objektbeholder
- Visual Studio Code opretter din udviklingsobjektbeholder lokalt.
Byg containere
Kør denne kommando for kommandolinjegrænsefladen dotnet i terminalruden:
dotnet publish /p:PublishProfile=DefaultContainer
Opret Azure-ressourcerne
Log på Azure med denne Kommandolinjegrænseflade i Azure i terminalruden:
az login --use-device-codeFå vist det valgte Azure-abonnement.
az account show -o tableHvis det forkerte abonnement er valgt, skal du bruge kommandoen az-konto, der er angivet kommando, til at vælge den korrekte.
Kør følgende Azure CLI-kommando for at få vist en liste over Azure-områder og det navn, der er knyttet til det:
az account list-locations -o tableFind et område, der er tættest på dig, og brug det i næste trin ved at erstatte
[Closest Azure region]Kør disse bash-sætninger:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CLUSTER_NAME=aks-eshop export ACR_NAME=acseshop$SRANDOMDe tidligere kommandoer opretter miljøvariabler, som du skal bruge i de næste Azure CLI-kommandoer. Du skal ændre PLACERING til et Azure-område tæt på dig, f.eks. eastus. Hvis du vil have et andet navn til din ressourcegruppe, AKS-klynge eller ACR, skal du ændre disse værdier. Hvis du vil have vist dine nye lagre på Azure Portal, skal du tildele dig selv som administrator af App Compliance Automation i Access Control (IAM) af objektbeholderregistreringsdatabasen.
Kør disse Azure CLI-kommandoer:
az group create --name $RESOURCE_GROUP --location $LOCATION az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic az acr login --name $ACR_NAMEHvis du modtager en godkendelsesfejl, når
az acr login --name $ACR_Nameden køres, skal du aktivere Administratorbruger i det nyoprettede containerregister i Azure under Indstillinger – Adgangsnøgler. Azure beder dig om at angive disse legitimationsoplysninger for at fortsætte. Du skal muligvis også godkende igen medaz login --use-device-code.Disse kommandoer opretter en ressourcegruppe, der indeholder Azure-ressourcerne, en ACR til dine billeder og logger derefter på ACR'en. Det kan tage et par minutter, indtil du ser dette output:
... }, "status": null, "systemData": { "createdAt": "2023-10-19T09:11:51.389157+00:00", "createdBy": "", "createdByType": "User", "lastModifiedAt": "2023-10-19T09:11:51.389157+00:00", "lastModifiedBy": "", "lastModifiedByType": "User" }, "tags": {}, "type": "Microsoft.ContainerRegistry/registries", "zoneRedundancy": "Disabled" } Login SucceededHvis du vil mærke dine billeder og sende dem til den ACR, du har oprettet, skal du køre disse kommandoer:
docker tag store $ACR_NAME.azurecr.io/storeimage:v1 docker tag products $ACR_NAME.azurecr.io/productservice:v1 docker push $ACR_NAME.azurecr.io/storeimage:v1 docker push $ACR_NAME.azurecr.io/productservice:v1Du kan kontrollere, om push af billederne er fuldført med denne kommando:
az acr repository list --name $ACR_NAME --output tableOpret din AKS, og opret forbindelse til ACR med disse kommandoer:
az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 1 --generate-ssh-keys --node-vm-size Standard_B2s --network-plugin azure --attach-acr $ACR_NAME az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPKommandoerne opretter en enkelt node AKS-klynge, forbinder den med ACR og derefter forbinder din lokale computer med AKS-klyngen. Kommandoerne kan tage et par minutter at fuldføre.
Kontrollér, at den nye AKS kan hente billeder fra ACR med denne kommando:
az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPDu får vist samme output som følgende meddelelser:
[2023-10-19T13:33:09Z] Loading azure.json file from /etc/kubernetes/azure.json [2023-10-19T13:33:09Z] Checking managed identity... [2023-10-19T13:33:09Z] Cluster cloud name: AzurePublicCloud [2023-10-19T13:33:09Z] Kubelet managed identity client ID: 00001111-aaaa-2222-bbbb-3333cccc4444 [2023-10-19T13:33:09Z] Validating managed identity existance: SUCCEEDED [2023-10-19T13:33:09Z] Validating image pull permission: SUCCEEDED [2023-10-19T13:33:09Z] Your cluster can pull images from acseshop1251599299.azurecr.io!Du kan nu køre kubectl-kommandoer mod din nye AKS-klynge. Kopiér den fulde ACR-URL fra outputtet; Over URL-adressen er f.eks. acseshop1251599299.
Kontrollér status for din AKS-klynge:
kubectl get nodes -ADu får vist samme output som følgende meddelelser:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37200563-vmss000000 Ready agent 3h44m v1.26.6
Konfigurer Kubernetes-installationsmanifestet
Nu er eShop-afbildningerne i ACR'en, som du kan opdatere AKS-installationsmanifestet for at bruge disse nye billeder.
I Visual Studio Code eller Codespaces skal du vælge den deployment.yml fil i roden af projektet i panelet EXPLORER.
Erstat på linje 17:
- image: [replace with your ACR name].azurecr.io/storeimage:v1Indsæt det kopierede ACR-navn fra det forrige trin – linjen skal ligne følgende yaml:
- image: acseshop1251599299.azurecr.io/storeimage:v1Gentag disse trin for linje 65:
- image: [replace with your ACR name].azurecr.io/productservice:v1Gem filen med CTRL+S.
I terminalruden skal du installere en NGINX-ingresscontroller med følgende kubernetes-kommando:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yamlKommandoen
kubectltilføjer tjenester og komponenter for at tillade indtrængen i AKS-klyngen. Kontrollér, at indgående data er klar til at køre ved hjælp af følgende kubernetes-kommando:kubectl get services --namespace ingress-nginxDu får vist samme output som følgende meddelelser:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.0.135.51 20.26.154.64 80:32115/TCP,443:32254/TCP 58s ingress-nginx-controller-admission ClusterIP 10.0.137.137 <none> 443/TCP 58sInstallér eShop-appen med denne kommando:
kubectl apply -f deployment.ymlKommandoen
kubectlapply installerer eShop-appen, en frontend-Blazor-webapp og back-end REST API-produkttjenesten og en indgående regel for at dirigere trafik til de korrekte tjenester til din AKS-klynge. Kør denne kommando igen, hvis du får vist en fejl i installationer.Du får vist samme output som følgende meddelelser:
deployment.apps/storeimage created service/eshop-website created deployment.apps/productservice created service/eshop-backend created ingress.networking.k8s.io/eshop-ingress createdKontrollér, at de to mikrotjenester er installeret med denne kommando:
kubectl get pods -ADu får vist samme output som følgende meddelelser:
NAMESPACE NAME READY STATUS RESTARTS AGE default productservice-7569b8c64-vfbfz 1/1 Running 0 3m56s default storeimage-6c7c999d7c-zsnxd 1/1 Running 0 3m56s ingress-nginx ingress-nginx-admission-create-szb8l 0/1 Completed 0 4m4s ingress-nginx ingress-nginx-admission-patch-czdbv 0/1 Completed 0 4m4s ingress-nginx ingress-nginx-controller-58bf5bf7dc-nwtsr 1/1 Running 0 4m4sFå vist den installerede eShop med denne kommando:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"Kommandoen returnerer den eksterne IP-adresse for webappen. Hold CTRL nede, og klik på linket for at åbne appen i en ny fane.
Opret en tjenesteprincipal til udrulning fra GitHub
GitHub-handlinger kan publicere objektbeholderbilleder til en Azure Container Registry. GitHub-løberen skal derfor have tilladelse til at oprette forbindelse til Azure. Følgende trin opretter en Azure AD-tjenesteprincipal for at fungere som GitHub Actions-identiteten i Azure.
Hvis du vil gemme dit abonnements-id i en miljøvariabel, skal du køre følgende kommando i terminalen:
export SUBS=$(az account show --query 'id' --output tsv)Hvis du vil oprette en Azure AD-tjenesteprincipal for at give adgang fra GitHub, skal du køre følgende kommando:
az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-authDer vises en variation af følgende output:
Creating 'Contributor' role assignment under scope '/subscriptions/ffffffff-aaaa-bbbb-6666-777777777777' The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "clientSecret": "abc1A~abc123ABC123abc123ABC123abc123ABC1", "subscriptionId": "00000000-0000-0000-0000-000000000000", "tenantId": "00000000-0000-0000-0000-000000000000", "activeDirectoryEndpointUrl": "https://login.microsoftonline.com", "resourceManagerEndpointUrl": "https://management.azure.com/", "activeDirectoryGraphResourceId": "https://graph.windows.net/", "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/", "galleryEndpointUrl": "https://gallery.azure.com/", "managementEndpointUrl": "https://management.core.windows.net/" }Kopiér JSON-outputtet og kantede parenteser, der skal bruges i næste trin.
Opret GitHub-hemmelighederne
GitHub Actions-løberen bruger legitimationsoplysninger til at interagere med Container Registry og AKS. Tjenesteprincipalen og legitimationsoplysningerne for objektbeholderregistreringsdatabasen er følsomme oplysninger. Det er bedst at gemme følsomme oplysninger som krypterede hemmeligheder på et sikkert sted. GitHub har en indbygget placering til lagring af hemmeligheder og andre variabler.
Udfør følgende trin for sikkert at gemme de følsomme oplysninger som miljøvariabler i dit lager. Lageradministratorer skal administrere de hemmeligheder, som Løberen af GitHub-handlinger har adgang til.
Gå til Settings>Secrets and variables>Actionsi dit GitHub-lager.
Vælg Actions secrets and variablespå siden New repository secret .
På New secret siden, under Name, indtast AZURE_CREDENTIALS, og under Secret, indtast det JSON-output, du kopierede fra terminalen.
Indstillingerne skal ligne følgende skærmbillede:
Vælg Add secret.
Du skal bruge denne GitHub-hemmelighed i næste afsnit til at oprette en GitHub-handling til at oprette objektbeholderbilledet.