Exercice - Créer une action GitHub à déployer sur AKS
- 10 minutes
Dans cet exercice, vous allez effectuer les tâches suivantes :
- Améliorez l’action GitHub existante pour inclure un travail de déploiement.
- Vérifiez que les modifications sont déployées sur le cluster Azure Kubernetes Service (AKS).
- Restaurez le déploiement.
Mettre à jour le manifeste Kubernetes pour le service de produit
Pour déployer de nouvelles versions du service de produit eShop, modifiez le fichier product.yml pour pointer vers Azure Container Registry (ACR) que vous avez utilisé dans l’unité précédente.
Dans votre dépôt forké, sélectionnez le code tab fichier, puis sélectionnez le product.yml fichier.
Pour modifier le fichier, sélectionnez l’icône de modification (crayon).
Modifiez la ligne :
containers: - image: [replace with your ACR name].azurecr.io/productservice:latestRemplacez le
[replace with your ACR name]nom de votre ACR, par exemple acseshop186748394.En haut à droite, sélectionnez Valider les modifications..., puis dans la boîte de dialogue, sélectionnez Valider les modifications.
Créer l’action de déploiement
Le code YAML ajoute une étape GitHub unique qui déploie de nouvelles images. Voici les étapes d’un exécuteur ubuntu-latest :
- Vérifie le dépôt dans lequel se trouve ce fichier.
- Azure Login se connecte à Azure avec les informations d’identification du principal de service.
- Configurer kubelogin pour la connexion non interactive configure le fichier kubeconfig pour l’authentification Azure.
- Obtenir le contexte K8s définit les informations d’identification Azure Kubernetes Service (AKS) dans le fichier .kube/config de l’exécuteur.
- Déploie l’application sur AKS à l’aide de l’image générée à l’étape précédente et du fichier manifeste Kubernetes que vous avez modifié précédemment.
Effectuez les étapes suivantes pour créer une action GitHub qui déploie le service de coupons :
Dans votre référentiel dupliqué, dans le code tab, sélectionnez l’onglet .github/workflows.
Sélectionnez azure-kubernetes-service.yml.
Pour modifier le fichier, sélectionnez l’icône de modification (crayon).
En bas du fichier, collez le code YAML suivant dans l’éditeur :
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: falseEn haut à droite, sélectionnez Valider les modifications..., puis dans la boîte de dialogue, sélectionnez Valider les modifications.
Déclencher un déploiement
La mise à jour du azure-kubernetes-service.yml fichier et la validation des modifications déclenche automatiquement un autre déploiement. Découvrez maintenant comment effectuer une modification de code déclenche un autre déploiement.
Vous avez un nouveau produit que votre équipe marketing souhaite ajouter au catalogue.
Dans votre référentiel dupliqué, dans le fichier code tab, sélectionnez le dossier Products.
Sélectionnez le dossier Data.
Sélectionnez le fichier ProductDataContext.c.
Pour modifier le fichier, sélectionnez l’icône de modification (crayon).
En bas du fichier, ajoutez un nouveau produit au tableau de produits :
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" },En haut à droite, sélectionnez Valider les modifications..., puis dans la boîte de dialogue, sélectionnez Valider les modifications.
Monitorer le déploiement
Pour surveiller la progression du déploiement, sélectionnez l’onglet Actions .
Sélectionnez la dernière exécution répertoriée pour le flux de travail Build and deploy an app to AKS. Le nom de l’exécution est le message de commit utilisé à l’étape précédente.
Sélectionnez le deploy job afin d'afficher les détails de cette exécution du flux de travail.
Dans le terminal, exécutez la commande suivante pour surveiller les pods de service de coupons dans votre cluster AKS. L'option
--selectorfiltre la liste pour n'afficher que les pods du service de coupons, et l'option--watchdemande àkubectlde veiller aux modifications.kubectl get pods --selector=app=productservice --watchPendant le déploiement, une variante de la sortie suivante s’affiche :
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 19mDans la sortie précédente, notez qu’un nouveau pod productservice est créé. Lorsque le nouveau pod est prêt, l’ancien est supprimé. Ce processus rend la transition vers la nouvelle version aussi fluide que possible.
Vérifier l’application
Effectuez les étapes suivantes pour vérifier que votre application fonctionne toujours :
Affichez l’eShop déployé en exécutant cette commande dans le terminal :
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"La commande retourne l’adresse IP externe de l’application web. Maintenez la touche Ctrl enfoncée et sélectionnez le lien pour ouvrir l’application dans un nouvel onglet.
Accédez à la page des produits pour afficher la nouvelle tente répertoriée en bas de la page.
Restaurer le déploiement
Une atténuation courante des problèmes de production consiste à revenir à un déploiement correct connu. Kubernetes gère un historique de déploiement que vous pouvez utiliser pour restaurer une version précédente de votre application.
Dans votre terminal, exécutez cette commande pour supprimer la nouvelle tente que vous venez d’ajouter au site web :
kubectl rollout undo deployment/productservice
Ce message de console doit s’afficher :
deployment.apps/productservice rolled back
Actualisez la page des produits dans votre navigateur, et la nouvelle tente ne doit plus être répertoriée.
Remarque
Dans un scénario réel, vous déployez les artefacts du build dans plusieurs environnements. Par exemple, vous pouvez avoir des environnements de développement, de test et de préproduction. Vous pouvez déclencher des workflows de déploiement en fonction d’événements comme la fusion des PR. Vous pouvez ajouter des portes d’approbation, comme l’approbation des PR par une partie prenante, pour éviter les déploiements inattendus en production.
