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]
naam van uw ACR, bijvoorbeeld acseshop186748394.Selecteer wijzigingen doorvoeren in de rechterbovenhoek. Selecteer vervolgens in het dialoogvenster Wijzigingen doorvoeren.
De implementatie-actie maken
De YAML-code voegt een GitHub-stap toe die:
Heeft één stap 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-aanmelding meldt zich aan bij Azure met de referenties 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 het .github/workflows tabblad in de geforkte opslagplaats op het code tabtabblad.
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 uw geforkte opslagplaats op de code tabmap.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 wijzigingen doorvoeren in de rechterbovenhoek. Selecteer vervolgens in het dialoogvenster Wijzigingen doorvoeren.
De implementatie bewaken
Als u de voortgang van de implementatie wilt controleren, selecteert u het Actions tabblad.
Selecteer de meest recente uitvoering van de werkstroom die wordt weergegeven voor de werkstroom Build and deploy an app to AKS. 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. De
--selector
vlag filtertkubectl
de lijst op alleen pods voor de couponservice en de--watch
vlag geeft aan om te kijken naar 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 productservicepod wordt gemaakt. Wanneer de nieuwe pod gereed is, wordt de oude beëindigd. Dit proces zorgt ervoor dat de overgang naar de nieuwe versie zo soepel mogelijk gaat.
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 pagina producten om de nieuwe tent onder aan de pagina weer te geven.
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
Dit consolebericht wordt weergegeven:
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 kunt bijvoorbeeld ontwikkel-, test- en faseringsomgevingen hebben. U kunt implementatiewerkstromen activeren op gebeurtenissen zoals het samenvoegen van PULL's. U kunt kwaliteits- of goedkeuringspoorten, zoals de goedkeuring van een belanghebbende, toevoegen om onverwachte implementaties naar productie te voorkomen.