Övning – Skapa en GitHub-åtgärd för att distribuera till AKS
I den här övningen slutför du följande uppgifter:
- Förbättra den befintliga GitHub-åtgärden så att den innehåller ett distributionsjobb.
- Kontrollera att ändringarna distribueras till AKS-klustret (Azure Kubernetes Service).
- Återställ distributionen.
Uppdatera Kubernetes-manifestet för produkttjänsten
Om du vill distribuera nya versioner av eShop-produkttjänsten redigerar du den product.yml filen så att den pekar på Azure Container Registry (ACR) som du använde i föregående lektion.
I den förgrenade lagringsplatsen väljer du code taboch väljer product.yml sedan filen.
Om du vill redigera filen väljer du redigeringsikonen (penna).
Redigera raden:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
[replace with your ACR name]
Ersätt med namnet på din ACR, till exempel acseshop186748394.Längst upp till höger väljer du Checka in ändringar... och i dialogrutan väljer du Sedan Genomför ändringar.
Skapa distributionsåtgärden
YAML-koden lägger till ett GitHub-steg som:
Har ett steg som distribuerar nya avbildningar. Här är stegen i en ubuntu-latest
löpare:
- Checkar ut lagringsplatsen som filen finns i.
- Azure Login loggar in på Azure med autentiseringsuppgifterna för tjänstens huvudnamn.
- Konfigurera kubelogin för icke-interaktiv inloggning konfigurerar kubeconfig-filen för Azure-autentisering.
- Kontexten Hämta K8s-kontextuppsättning anger autentiseringsuppgifterna för Azure Kubernetes Service (AKS) i löparens .kube/config fil.
- Distribuerar programmet distribuerar programmet till AKS med hjälp av avbildningen som skapades i föregående steg och Kubernetes-manifestfilen som du redigerade tidigare.
Utför följande steg för att skapa en GitHub-åtgärd som distribuerar kupongtjänsten:
Välj .github/workflows fliken på code tabden förgrenade lagringsplatsen.
Välj azure-kubernetes-service.yml.
Om du vill redigera filen väljer du redigeringsikonen (penna).
Längst ned i filen klistrar du in följande YAML-kod i redigeraren:
deploy: permissions: actions: read contents: read id-token: write runs-on: ubuntu-latest needs: [buildImage] steps: # Checks out the repository this file is in - uses: actions/checkout@v3 # Logs in with your Azure credentials - name: Azure login uses: azure/login@v1.4.6 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' # Use kubelogin to configure your kubeconfig for Azure auth - name: Set up kubelogin for non-interactive login uses: azure/use-kubelogin@v1 with: kubelogin-version: 'v0.0.25' # Retrieves your Azure Kubernetes Service cluster's kubeconfig file - name: Get K8s context uses: azure/aks-set-context@v3 with: resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} admin: 'false' use-kubelogin: 'true' # Deploys application based on given manifest file - name: Deploys application uses: Azure/k8s-deploy@v4 with: action: deploy manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} pull-images: false
Längst upp till höger väljer du Checka in ändringar... och i dialogrutan väljer du Sedan Genomför ändringar.
Utlösa en distribution
azure-kubernetes-service.yml Om du uppdaterar filen och genomför ändringarna utlöses automatiskt en annan distribution. Se nu hur en kodändring utlöser en annan distribution.
Du har en ny produkt som marknadsföringsteamet vill lägga till i katalogen.
Välj Products mappen på code tabden förgrenade lagringsplatsen.
Välj mappen Data.
ProductDataContext.c Välj filen.
Om du vill redigera filen väljer du redigeringsikonen (penna).
Lägg till en ny produkt i produktmatrisen längst ned i filen:
new Product { Name = "Camping Tent 2", Description = "This updated tent is improved and cheaper, perfect for your next trip.", Price = 79.99m, ImageUrl = "product9.png" },
Längst upp till höger väljer du Checka in ändringar... och i dialogrutan väljer du Sedan Genomför ändringar.
Övervaka distributionen
Om du vill övervaka distributionens förlopp väljer du fliken Actions .
Välj den senaste arbetsflödeskörningen som visas för Build and deploy an app to AKS-arbetsflödet. Körningens namn är det incheckningsmeddelande som du använde i föregående steg.
Välj jobbet deploy för att se information om den här arbetsflödeskörningen.
I terminalen kör du följande kommando för att övervaka kupongtjänstpoddarna i AKS-klustret. Flaggan
--selector
filtrerar listan till endast poddar för kupongtjänsten, och--watch
flaggan instruerarkubectl
att hålla utkik efter ändringar.kubectl get pods --selector=app=productservice --watch
Under distributionen visas en variant av följande utdata:
NAME READY STATUS RESTARTS AGE productservice-7979d4c47-xlcrr 1/1 Running 0 17m productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 ContainerCreating 0 0s productservice-ff98b6d8d-7wmsh 1/1 Running 0 4s productservice-7979d4c47-xlcrr 1/1 Terminating 0 19m
Observera att en ny produkttjänstpodd skapas i föregående utdata. När den nya podden är klar avslutas den gamla. Den här processen gör övergången till den nya versionen så smidig som möjligt.
Verifiera appen
Slutför följande steg för att kontrollera att appen fortfarande fungerar:
Visa den distribuerade eShop genom att köra det här kommandot i terminalen:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Kommandot ovan returnerar den externa IP-adressen för webbappen. Håll ned CTRL och välj länken för att öppna appen på en ny flik.
Gå till produktsidan för att visa det nya tältet längst ned på sidan.
Återställa distributionen
En vanlig åtgärd för produktionsproblem är att återgå till en känd bra distribution. Kubernetes har en distributionshistorik som du kan använda för att återställa till en tidigare version av din app.
I terminalen kör du det här kommandot för att ta bort det nya tältet som du precis har lagt till på webbplatsen:
kubectl rollout undo deployment/productservice
Du bör se det här konsolmeddelandet:
deployment.apps/productservice rolled back
Uppdatera produktsidan i webbläsaren och det nya tältet bör inte längre visas.
Kommentar
I ett verkligt scenario distribuerar du byggets artefakter till flera miljöer. Du kanske till exempel har utvecklings-, testnings- och mellanlagringsmiljöer. Du kan utlösa distributionsarbetsflöden genom händelser som sammanslagning av PRs. Du kan lägga till kvalitets- eller godkännandegrindar, till exempel en intressents PR-godkännande, för att förhindra oväntade distributioner till produktion.