Comment monter une CI/CD avec GitLab sur Google Kubernetes Engine ? Par Bassem Ben Lazreg, Aymen Lamara et Alexis Morelle

Comment monter une CI/CD avec GitLab sur Google Kubernetes Engine ? Par Bassem Ben Lazreg, Aymen Lamara et Alexis Morelle

Au programme de cette nouvelle session des #WeSpeakCloud...

"Comment monter une CI/CD avec GitLab sur Google Kubernetes Engine ?"

Nous verrons en détails comment mettre en place GitLab sur GCP dans le cadre d’une architecture de CI/CD résiliente, hautement disponible et scalable.
Nous ferons ensuite un point sur la mise en oeuvre de runners GitLab dans Kubernetes.

Pour finir nous détaillerons un exemple de pipeline de déploiement continue pour construire, packager, tester et déployer une application conteneurisée dans GKE.

Quelques pré-requis pour profiter pleinement de ce rdv :

- Notions de base GCP (ou autre cloud provider)
- Une idée de ce qu’est un conteneur et Kubernetes
- Intérêts d’une CI/CD

Mais les #WeSpeakCloud by WeScale késako ?
La transmission et le partage des connaissances font intégralement partie de nos valeurs chez WeScale.
C’est pour cela que nous avons décidé d'organiser les #WeSpeakCloud "et si nous parlions Cloud ?", une série d'évènements gratuits où nous pourrons apprendre et discuter ensemble sur des sujets actuels qui constituent les technologies et l'environnement Cloud.

78605f82de8b2ea497603533d022f1e0?s=128

WeScale

May 28, 2019
Tweet

Transcript

  1. 2.

    Présentation Comment mettre en place une CI/CD avec Gitlab et

    GKE - WeSpeakCloud La transmission et le partage des connaissances font intégralement partie des valeurs de WeScale. C’est pour cela que nous avons décidé d'organiser, les #WeSpeakCloud, une série d'événements gratuits où nous pourrons apprendre et discuter ensemble sur des sujets actuels qui constituent les technologies et l'environnement Cloud.
  2. 3.

    Alexis Morelle Les speakers Comment mettre en place une CI/CD

    avec Gitlab et GKE - WeSpeakCloud Bassem Ben Lazreg Aymen Lamara
  3. 4.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Objectif de cette conférence Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé. Je partagerai mon expérience avec la communauté qui m’a formé.
  4. 5.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Disclaimer notice
  5. 6.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Disclaimer Pourquoi k8s ? • Scalabilité • Simplicité • Observabilité • Portabilité • Isolation des ressources
  6. 8.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Google Cloud Provider • GKE • Cloud DNS • Regional IP • Équilibrage de charge • Compute Engine: VM et disque https://cloud.google.com/
  7. 9.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Google Kubernetes Engine • Kubernetes managé par google. • Branché avec les services GCP : ◦ Autoscaling automatique. ◦ Provisionning des disques. ◦ Provisionning des load balancers. ◦ ... https://cloud.google.com/kubernetes-engine/
  8. 10.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Kubernetes https://kubernetes.io/
  9. 11.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab • Gestionnaire de repo git • Registry Intégrée • Pipelines CI/CD intégrés ◦ VM ◦ Docker ◦ Kubernetes https://about.gitlab.com/ https://gitlab.com/charts/gitlab
  10. 12.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Terraform • Standard de l’infrastructure as Code • HCL langage déclaratifs • Modifier, Tester, Versionner, partager… • TF-state • Workspace • Utilisé pour construire l’infrastructure https://www.terraform.io/
  11. 13.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Helm • Package manager pour Kubernetes • Maintenu par la CNCF • Gère les mises-à-jour et les rollback • Basé sur les “Charts” • Les charts peuvent être publiés, partagés et versionnés • Utilise le “Tiller” https://helm.sh/
  12. 14.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Helm https://helm.sh/
  13. 15.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Minio • Stockage Objet • Compatible AWS S3 • Conteneurisé • Erasure Code • Compression • Fédération https://www.min.io/
  14. 16.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Minio https://www.min.io/
  15. 18.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab Zone 1 eu-west 1-a Instance Group Compute Engine Gitlab Zone 2 eu-west 1-b Instance Group Compute Engine Gitlab Architecture: Gitlab Cloud Load Balancing Cloud DNS Kubernetes Cluster Kubernetes Engine Multiple Instances Backups Cloud Storage Architecture (v1)
  16. 19.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab • Avantages : ◦ Gitlab ne dépend pas de la vie du cluster k8s ◦ Haute disponibilité ◦ Autoscaling Architecture (v1)
  17. 20.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab • Inconvénients : ◦ Implémentation (1 ~2 semaines). ▪ Load Balancers avec des certifs ▪ Cache dans k8s ▪ Instance profiles ▪ ….. ◦ Maintenance pas très standard Architecture (v1)
  18. 21.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab Hold on !! Faisons les choses simple !! KISS
  19. 22.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab HELM Chart
  20. 23.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab HELM Chart • NGINX • Redis • Minio • Registry • GitLab/sidekiq • GitLab/gitlab-shell • GitLab/gitaly • GitLab/unicorn • GitLab/migrations
  21. 24.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab Architecture (v2) Zone 1 eu-west 1-a Zone 2 eu-west 1-b Architecture: Gitlab Cloud Load Balancing Cloud DNS Kubernetes Cluster Kubernetes Engine Multiple Instances Backups Cloud Storage Persistent Disk Persistent Disk
  22. 25.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Architecture (v2) Gitlab • Avantages : ◦ Haute disponibilité ◦ Autoscaling: Pods, VMs ◦ Maintenance très simple ◦ + Sur GCP, Avec GKE la vie est belle :)
  23. 26.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Architecture (v2) Gitlab
  24. 27.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab Gitlab dans GKE Cloud Load Balancing Kubernetes cluster Prometheus Pod Registry Pod Postgresql Pod Cert-manager Pod Ingress-Controller Pod Nginx Pod Redis Pod Minio Pod Runner Pods Gitlab Processes Pods Cloud DNS
  25. 29.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Gitlab Backup Gitlab
  26. 30.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Backup Gitlab Gitlab • Vous permet à récupérer votre instance Gitlab • Outil gitlab “backup-utility” => TAR • Possibilité d’exporter les backups sur S3
  27. 31.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Backup Gitlab Gitlab • Base de données • Attachments / Secrets... • Repositories Git • Logs des jobs CI/CD • Artifacts des jobs CI/CD • Objets LFS • Images de la Container Registry • Pages GitLab Kubernetes cluster Minio Pod task-runner Pod gitlab-backup Pod CronJob Pod 1 2 3 Persistent Disk
  28. 33.
  29. 34.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu
  30. 35.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines
  31. 36.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines
  32. 37.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines
  33. 38.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines
  34. 39.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines
  35. 40.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu Gitlab runners
  36. 42.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu • Un serveur web en python flask représentant le menu d’un restaurant • Les éléments du menu sont stockés dans une base de donnée SQLite • Les manifests Kubernetes sont packagés dans un chart Helm : ◦ Un deployment ◦ Un service ClusterIP ◦ Un Ingress qui route vers la page /menu Applicatif déployé
  37. 43.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu - Gitflow à 2 branches: dev et master (3 pipelines) : - Pipeline sur la branche dev : - Tests unitaires - si les tests sont ok: build et push de l’image docker dans GCR - Déploiement dans GKE dans un environnement staging - Possibilité de détruire l’environnement de staging ( action manuelle) Étapes de déploiement 1
  38. 44.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu - Gitflow à 2 branches: dev et master (3 pipelines) : - Pipeline sur la branche master : - Tests unitaires - si les tests sont ok : - build et push de l’image docker dans GCR - tag de l’image en latest et push dans GCR Étapes de déploiement 2
  39. 45.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Intégration / déploiement continu - Gitflow à 2 branches: dev et master (3 pipelines) : - Pipeline à la création de tag : - Récupérer l’image latest taguée avec la version du tag et push dans GCR - Déploiement dans l’environnement de production (action manuelle) - Possibilité de fallback à la version précédente (action manuelle) Étapes de déploiement 3
  40. 48.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Limitations • GitLab Pages (issue #37) • GitLab Geo (issue #8) • Pas de HA sur la base de donnée dans le cluster (issue #48) • Authentification Smartcard (issue #988)
  41. 50.

    Comment mettre en place une CI/CD avec Gitlab et GKE

    - WeSpeakCloud Recommendations • Spécifier les quotas des namespaces • Spécifier les requests/limits des pods • Attention aux droits du “Tiller” de déploiement • Gestion de secrets et droits entre environnements • Plusieurs cluster pour les environnements de déploiement • Utiliser des solutions de déploiements autres que Helm
  42. 53.

    Paris - Nantes www.wescale.fr | blog.wescale.fr Alexis Morelle Cloud Builder

    @almorelle alexis.morelle@wescale.fr Bassem Benlazreg Cloud Builder @BassemLazreg bassem.benlazreg@wescale.fr Aymen Lamara Cloud Builder @Aymenlamara aymen.lamara@wescale.fr