Oefening: een GitHub-actie maken om te implementeren in AKS
- 10 minuten
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:latestVervang de
[replace with your ACR name]door de naam van uw ACR, zoals acseshop186748394.Selecteer rechtsboven Wijzigingen doorvoeren... en selecteer daarna in het dialoogvenster Wijzigingen doorvoeren.
De implementatieactie maken
De YAML-code voegt een GitHub-stap toe die één stap heeft, waarmee nieuwe installatiekopieën worden geïmplementeerd. 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 authenticatiegegevens van de service-principal.
- Kubelogin instellen voor niet-interactieve aanmelding configureert het kubeconfig-bestand voor Azure-verificatie.
- Met contextsetcontext van K8s worden de AKS-referenties (Azure Kubernetes Service) in het bestand van .kube/config de runner ingesteld.
- Hiermee wordt de toepassing geïmplementeerd 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: falseSelecteer rechtsboven Wijzigingen doorvoeren... en selecteer daarna 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 productmatrix :
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 rechtsboven Wijzigingen doorvoeren... en selecteer daarna 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
--selectorwordt de lijst gefilterd zodat alleen pods voor de couponservice worden weergegeven, en de vlag--watchgeeftkubectlde opdracht om te controleren op wijzigingen.kubectl get pods --selector=app=productservice --watchTijdens 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 19mIn de voorgaande uitvoer ziet u dat er een nieuwe productservicepod 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}')"De opdracht retourneert het externe IP-adres voor de web-app. 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.