Övning – Skapa en GitHub-åtgärd för att distribuera till AKS

Slutförd

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.

  1. I den förgrenade lagringsplatsen väljer du code taboch väljer product.yml sedan filen.

  2. Om du vill redigera filen väljer du redigeringsikonen (penna).

  3. 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.

  4. 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:

  1. Checkar ut lagringsplatsen som filen finns i.
  2. Azure Login loggar in på Azure med autentiseringsuppgifterna för tjänstens huvudnamn.
  3. Konfigurera kubelogin för icke-interaktiv inloggning konfigurerar kubeconfig-filen för Azure-autentisering.
  4. Kontexten Hämta K8s-kontextuppsättning anger autentiseringsuppgifterna för Azure Kubernetes Service (AKS) i löparens .kube/config fil.
  5. 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:

  1. Välj .github/workflows fliken på code tabden förgrenade lagringsplatsen.

  2. Välj azure-kubernetes-service.yml.

  3. Om du vill redigera filen väljer du redigeringsikonen (penna).

  4. 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
    
    
  5. 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.

  1. Välj Products mappen på code tabden förgrenade lagringsplatsen.

  2. Välj mappen Data.

  3. ProductDataContext.c Välj filen.

  4. Om du vill redigera filen väljer du redigeringsikonen (penna).

  5. 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" },
    
  6. Längst upp till höger väljer du Checka in ändringar... och i dialogrutan väljer du Sedan Genomför ändringar.

Övervaka distributionen

  1. Om du vill övervaka distributionens förlopp väljer du fliken Actions .

  2. 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.

  3. Välj jobbet deploy för att se information om den här arbetsflödeskörningen.

    Screenshot that shows the deploy job selected with a list of all the steps.

  4. 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 instruerar kubectl 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.

Kontrollera dina kunskaper

1.

Vilket är det bästa stället för att lagra känslig information, till exempel autentiseringsuppgifter, för GitHub Actions?

2.

Vad är syftet med att skapa ett Azure Active Directory-tjänstens huvudnamn för GitHub Actions att använda?

3.

Varför skapar AKS en ny container medan den gamla fortfarande körs under uppgraderingsdistributionen?