Exercice - Créer une action GitHub pour déployer sur AKS
Dans cet exercice, vous allez effectuer les tâches suivantes :
- Améliorez l’action GitHub existante pour inclure une tâche de déploiement.
- Vérifier que les changements se déploient sur le cluster Azure Kubernetes Service (AKS).
- Restaurer 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 qu’il pointe vers le registre ACR (Azure Container Registry) que vous avez utilisé dans l’unité précédente.
Dans votre dépôt dupliqué, sélectionnez code tab, puis le fichier product.yml.
Pour modifier le fichier, sélectionnez l’icône d’édition (crayon).
Modifiez la ligne :
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
remplacez
[replace with your ACR name]
par le 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 qui :
dispose d’une étape qui déploie de nouvelles images. Voici les étapes d’un exécuteur ubuntu-latest
:
- extrait le référentiel 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éployer l’application 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 d’édition (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: false
En haut à droite, sélectionnez Commiter les modifications..., puis dans la boîte de dialogue, sélectionnez Commiter les modifications.
Déclencher un déploiement
La mise à jour du fichier azure-kubernetes-service.yml et la validation des modifications déclenche automatiquement un autre déploiement. Découvrez maintenant comment apporter 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 d’édition (crayon).
En bas du fichier, ajoutez un nouveau produit au tableau 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.
Surveillance du déploiement
Pour monitorer la progression du déploiement, sélectionnez l’onglet Actions.
Sélectionnez l'exécution la plus récente répertoriée pour le workflow 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 la tâche deploy pour afficher les détails de cette exécution de flux de travail.
Dans le terminal, exécutez la commande suivante pour monitorer les pods du service de coupons dans votre cluster AKS. L’indicateur
--selector
filtre la liste uniquement sur les pods du service de coupons, et l’indicateur--watch
indique àkubectl
de surveiller les changements.kubectl get pods --selector=app=productservice --watch
Pendant 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 19m
Dans la sortie précédente, notez qu’un nouveau pod productservice est créé. Quand le nouveau pod est prêt, l’ancien est mis hors service. Grâce à ce processus, la transition vers la nouvelle version est relativement fluide.
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 ci-dessus 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
En cas de problème de production, l’atténuation courante est de rétablir un déploiement connu qui fonctionne. 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 de build dans plusieurs environnements. Par exemple, vous disposerez peut-être d'environnements de développement, de test et de préparation. 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.