Oefening: een GitHub-actie maken om te implementeren in AKS
In deze oefening voert u de volgende taken uit:
- Verbeter de bestaande GitHub-actie om een implementatietaak op te nemen.
- Controleer of de wijzigingen worden geïmplementeerd in het AKS-cluster (Azure Kubernetes Service).
- De implementatie terugdraaien.
Het Kubernetes-manifest voor de productservice bijwerken
Als u nieuwe versies van de eShop-productservice wilt implementeren, bewerkt u het product.yml-bestand om te verwijzen naar de Azure Container Registry (ACR) die u in de vorige les hebt gebruikt.
Selecteer in de geforkte opslagplaats de code taben selecteer vervolgens het product.yml-bestand.
Als u het bestand wilt bewerken, selecteert u het bewerkingspictogram (potlood).
Bewerk de regel:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
Vervang de
[replace with your ACR name]
door de naam van uw ACR; bijvoorbeeld acseshop186748394.Selecteer rechtsboven Wijzigingen doorvoeren... en selecteer vervolgens in het dialoogvenster Wijzigingen doorvoeren.
De implementatieactie maken
De YAML-code voegt een GitHub-stap toe die:
Heeft één stap die nieuwe afbeeldingen uitvoert. Dit zijn de stappen in een ubuntu-latest
-runner:
- Controleert de opslagplaats waarin dit bestand zich bevindt.
- Azure Login meldt zich aan bij Azure met de referenties van de service-principal.
- Kubelogin instellen voor niet-interactieve aanmelding het kubeconfig-bestand configureert voor Azure-verificatie.
- K8s-context ophalen context instelt, worden de AKS-referenties (Azure Kubernetes Service) ingesteld in het .kube/config-bestand van de runner.
- Implementeert de toepassing de toepassing implementeert in AKS, met behulp van de installatiekopie die in de vorige stap is gebouwd en het Kubernetes-manifestbestand dat u eerder hebt bewerkt.
Voer de volgende stappen uit om een GitHub-actie te maken waarmee de couponservice wordt geïmplementeerd:
Selecteer in de geforkte opslagplaats op de code tabhet tabblad .github/workflows.
Selecteer azure-kubernetes-service.yml.
Als u het bestand wilt bewerken, selecteert u het bewerkingspictogram (potlood).
Plak onderaan het bestand de volgende YAML-code in de editor:
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
Selecteer in de rechterbovenhoek Wijzigingen doorvoeren...en selecteer vervolgens in het dialoogvenster Wijzigingen doorvoeren.
Een implementatie activeren
Als u het azure-kubernetes-service.yml-bestand bijwerkt en de wijzigingen doorvoert, wordt automatisch een andere implementatie geactiveerd. Bekijk nu hoe het maken van een codewijziging een andere implementatie activeert.
U hebt een nieuw product dat uw marketingteam aan de catalogus wil toevoegen.
Selecteer in de geforkte opslagplaats op het code tabde map Products.
Selecteer de map Data.
Selecteer het bestand ProductDataContext.c.
Als u het bestand wilt bewerken, selecteert u het bewerkingspictogram (potlood).
Voeg onderaan het bestand een nieuw product toe aan de producten matrix:
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" },
Selecteer in de rechterbovenhoek Wijzigingen doorvoeren... selecteer vervolgens in het dialoogvenster Wijzigingen doorvoeren.
De implementatie bewaken
Als u de voortgang van de implementatie wilt controleren, selecteert u het tabblad Actions.
Selecteer de meest recente werkstroomuitvoering die wordt vermeld voor de Build and deploy an app to AKS werkstroom. De naam van de uitvoering is het doorvoerbericht dat u in de vorige stap hebt gebruikt.
Selecteer de deploy taak om details voor deze werkstroomuitvoering weer te geven.
Voer in de terminal de volgende opdracht uit om de couponservicepods in uw AKS-cluster te bewaken. Met de vlag
--selector
wordt de lijst gefilterd zodat alleen pods voor de couponservice worden weergegeven, en de vlag--watch
geeftkubectl
de opdracht om te controleren op wijzigingen.kubectl get pods --selector=app=productservice --watch
Tijdens de implementatie wordt een variatie van de volgende uitvoer weergegeven:
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
In de voorgaande uitvoer ziet u dat er een nieuwe productservice pod wordt gemaakt. Wanneer de nieuwe pod gereed is, wordt de oude beëindigd. Dit proces maakt de overgang naar de nieuwe versie zo soepel mogelijk.
De app controleren
Voer de volgende stappen uit om te controleren of uw app nog steeds werkt:
Bekijk de geïmplementeerde eShop door deze opdracht uit te voeren in de terminal:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Met de bovenstaande opdracht wordt het externe IP-adres voor de web-app geretourneerd. Houd Ctrl- ingedrukt en selecteer de koppeling om de app op een nieuw tabblad te openen.
Ga naar de productpagina om de nieuwe tent onderaan de pagina te bekijken.
De implementatie terugdraaien
Een veelvoorkomende oplossing voor productieproblemen is om terug te keren naar een bekende goede implementatie. Kubernetes onderhoudt een implementatiegeschiedenis die u kunt gebruiken om terug te keren naar een eerdere versie van uw app.
Voer in uw terminal deze opdracht uit om de nieuwe tent te verwijderen die u zojuist hebt toegevoegd aan de website:
kubectl rollout undo deployment/productservice
U zou dit consolebericht moeten zien:
deployment.apps/productservice rolled back
Vernieuw de pagina producten in uw browser en de nieuwe tent mag niet meer worden vermeld.
Notitie
In een praktijkscenario implementeert u de artefacten van de build in meerdere omgevingen. U hebt bijvoorbeeld ontwikkel-, test- en faseringsomgevingen. U kunt implementatiewerkstromen activeren door gebeurtenissen zoals het samenvoegen van pull-aanvragen. U kunt kwaliteitscontrole- of goedkeuringspoorten toevoegen, zoals de goedkeuring van een belanghebbende, om onverwachte implementaties naar productie te voorkomen.