Déploiement multicloud pour GitOps à l'aide de GitLab : suivez notre démo
Découvrez comment la compatibilité multicloud permet d'accompagner les workflows GitOps. Dans cette démo, nous allons déployer des applications sur trois serveurs Kubernetes à l'aide d'un workflow commun.
Les workflows GitOps utilisent un dépôt Git comme source unique de vérité pour faciliter la collaboration, et réunir les équipes d'infrastructure en vue d'accélérer le développement et la livraison de logiciels. Lorsque les équipes des opérations utilisent des workflows GitOps, l'utilisation de GitLab comme dépôt central présente des avantages qui vont au-delà du contrôle de version. Les équipes de développement apprécient GitLab pour sa plateforme collaborative, sa simplicité de déploiement d'infrastructure et sa compatibilité multicloud.
Dans cette démo, nous allons vous montrer comment déployer des applications sur trois serveurs Kubernetes à l'aide d'un workflow commun. Vous apprendrez ainsi comment déployer avec succès des applications à l'aide de GitLab Auto DevOps, optimisé par le système d'intégration continue (CI) de GitLab, avec Helm et Kubernetes.
La première étape consiste à ouvrir le fichier README.md du groupe gitops-demo, qui présente la structure du groupe gitops-demo. On y trouve quelques projets et deux sous-groupes : infrastructure et applications.
Quatre applications sont disponibles pour cette démo : my-asp-net-app1 ; my-spring-app2 ; my-ruby-app3 ; my-python-app4 et trois clusters Kubernetes, chacun correspondant à un environnement cloud différent : Microsoft Azure (AKS), Amazon (EKS) et Google Cloud (GKE).
En cliquant sur le bouton Kubernetes dans le coin gauche, vous pouvez constater que tous les clusters sont enregistrés dans GitLab. Les portées des environnements vous indiquent précisément quelle application est déployée dans chaque cloud.
Auto DevOps à l'œuvre
Le premier exemple consiste en une application ASP.NET, qui est l'équivalent d'une application « Hello, World! ». Certaines modifications spécifiques qui affectent la manière dont l'application est déployée sont définies dans le fichier CI de l'application.
La première étape consiste à importer le modèle GitLab Auto DevOps principal en définissant quelques variables. Tout d'abord, il est important de remplacer certaines commandes dans les étapes du processus de déploiement pour qu'elles soient davantage adaptées au code .net. Puis, vous devez configurer automatiquement l'environnement pour le déploiement en production dans AKS.
include:
- template: Auto-DevOps.gitlab-ci.yml
variables:
DEPENDENCY_SCANNING_DISABLED: "true"
test:
stage: test
image: microsoft/dotnet:latest
script:
- 'dotnet test --no-restore'
license_management:
stage: test
before_script:
- sudo apt-get update
- sudo apt-get install -y dotnet-runtime-2.2 dotnet-sdk-2.2
production:
environment:
name: aks/production
url: http://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN
Le pipeline s'exécutera automatiquement et se déploiera avec succès. Vous pouvez consulter le pipeline pour vérifier comment se déroule le déploiement.
Vous découvrez les étapes par lesquelles passe le pipeline, de la compilation à la production, pour l'application ASP.NET.
Un rapide coup d'œil au pipeline révèle que tous les jobs ont été exécutés avec succès. La fonctionnalité GitLab Auto DevOps a lancé l'étape de compilation, qui crée un conteneur Docker et le transfère dans le registre Docker intégré. La phase de test est complète et comprend l'analyse des conteneurs, la gestion des licences, les tests SAST et unitaires. Pour approfondir les résultats des tests, cliquez sur les onglets relatifs à la sécurité et la licence. L'application se déploie en production à l'étape finale du pipeline.
Contenu du cluster AKS
L'application ASP.NET est en cours de déploiement sur le cluster AKS. Accédez à Opérations > Environnements pour voir l'environnement configuré pour cette application. Des indicateurs tels que les taux d'erreur HTTP, les taux de latence et le débit du pipeline sont disponibles, car Prometheus est déjà intégré aux clusters Kubernetes de GitLab.
L'environnement peut être lancé directement en cliquant sur l'URL active pour voir l'application s'exécuter en temps réel sur AKS. Il n'y a pas de code supplémentaire nécessaire au-delà de ce qui est déjà configuré dans GitLab pour indiquer à l'application comment se déployer. La fonctionnalité GitLab Auto DevOps crée un chart Helm et le déploie sur Kubernetes et AKS.
Dans la démo, vous apprendrez à configurer l'application Spring de la même manière que l'application ASP.NET en utilisant un Dockerfile. Le Dockerfile est placé dans le répertoire racine du dépôt.
ROM maven:3-jdk-8-alpine
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN mvn package
ENV PORT 5000
EXPOSE $PORT
CMD [ "sh", "-c", "mvn -Dserver.port=${PORT} spring-boot:run" ]
Le déploiement de l'application Spring diffère de celui de l'application ASP.NET sur un point : il ne nécessite aucune modification du modèle Auto DevOps, car il utilise le modèle par défaut et se déploie sur GKE au lieu d'AKS. Le workflow de déploiement de l'application est identique, quel que soit l'environnement cloud sur lequel l'application est déployée. Cela facilite le multicloud.
Il est important de produire une compilation, un test et une production similaires dans cet environnement. En procédant de la sorte, les équipes peuvent comparer les mêmes indicateurs : taux d'erreur, temps de latence et débits du pipeline. Dans ce cas, l'application s'exécute automatiquement dans un conteneur sur Kubernetes dans le cluster GKE.
Le dernier exemple est une application Python qui se déploie sur Amazon EKS. Les composants sont similaires aux exemples précédents, et utilisent gitlab-ci.yml pour changer l'environnement de production vers Amazon EKS, et un Dockerfile pour préparer le chart Helm. Il existe également quelques ajustements.
comprend :
- modèle : Auto-DevOps.gitlab-ci.yml
test :
image : python:3.7
script :
- pip install -r requirements.txt
- pip install pylint
- pylint main.py
production :
environnement :
nom : eks/production
url : http://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN
Le fichier du système d'intégration continue (CI) de GitLab indique à l'application de se déployer sur Amazon EKS.
FROM python:3.7
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "/app/main.py"
Le Dockerfile prépare le chart Helm.
Comme dans les exemples précédents, le pipeline fonctionne de la même manière que dans les autres applications avec des phases de compilation, de test et de production. Une fois l'application déployée sur Amazon EKS, vous pouvez ouvrir le lien en actif et voir en temps réel l'application Python dans la fenêtre de votre navigateur.
GitLab est une véritable solution multicloud qui permet aux entreprises de décider du fournisseur de cloud qu'elles souhaitent utiliser, sans workflow disparates, tout en conservant de bonnes pratiques GitOps. Tout cela dans une interface cohérente avec le même workflow, ce qui simplifie le déploiement pour tout fournisseur de cloud qui utilise Kubernetes intégré à GitLab.
Une bonne pratique GitOps consiste à faire d'un dépôt Git la source unique de vérité (SSOT) pour l'ensemble du code. Bien que n'importe quel dépôt Git puisse suffire à une bonne procédure GitOps, il existe peu d'outils DevOps qui englobent réellement les piliers fondamentaux de GitOps : collaboration, traçabilité des processus et contrôle de version.
Des outils comme les epics, les tickets et les merge requests, qui sont au cœur de GitLab, favorisent la communication et la transparence au sein des équipes. Les équipes responsables des infrastructures peuvent compiler leur code à l'aide de modèles Terraform ou de modèles Ansible dans GitLab et le déployer dans le cloud à l'aide du système d'intégration continue (CI) de GitLab. GitLab est la véritable solution multicloud qui permet aux équipes de déployer une application le service cloud de leur choix, à l'aide du système d'intégration continue (CI) de GitLab et de Kubernetes sans avoir à augmenter considérablement leurs workflows.
Lancez-vous dès maintenant
Découvrez comment la plateforme DevSecOps unifiée de GitLab peut aider votre équipe.