Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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.

Slide 3

Slide 3 text

Alexis Morelle Les speakers Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Bassem Ben Lazreg Aymen Lamara

Slide 4

Slide 4 text

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é.

Slide 5

Slide 5 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Disclaimer notice

Slide 6

Slide 6 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Disclaimer Pourquoi k8s ? ● Scalabilité ● Simplicité ● Observabilité ● Portabilité ● Isolation des ressources

Slide 7

Slide 7 text

Outillage

Slide 8

Slide 8 text

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/

Slide 9

Slide 9 text

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/

Slide 10

Slide 10 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Kubernetes https://kubernetes.io/

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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/

Slide 13

Slide 13 text

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/

Slide 14

Slide 14 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Helm https://helm.sh/

Slide 15

Slide 15 text

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/

Slide 16

Slide 16 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Minio https://www.min.io/

Slide 17

Slide 17 text

Architecture

Slide 18

Slide 18 text

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)

Slide 19

Slide 19 text

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)

Slide 20

Slide 20 text

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)

Slide 21

Slide 21 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Gitlab Hold on !! Faisons les choses simple !! KISS

Slide 22

Slide 22 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Gitlab HELM Chart

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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 :)

Slide 26

Slide 26 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Architecture (v2) Gitlab

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

CI / CD

Slide 34

Slide 34 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Intégration / déploiement continu

Slide 35

Slide 35 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines

Slide 36

Slide 36 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines

Slide 37

Slide 37 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines

Slide 38

Slide 38 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines

Slide 39

Slide 39 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Intégration / déploiement continu Gitlab pipelines

Slide 40

Slide 40 text

Comment mettre en place une CI/CD avec Gitlab et GKE - WeSpeakCloud Intégration / déploiement continu Gitlab runners

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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é

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

Limitations

Slide 48

Slide 48 text

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)

Slide 49

Slide 49 text

Recommandations

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

One last thing !!

Slide 52

Slide 52 text

Des questions ?

Slide 53

Slide 53 text

Paris - Nantes www.wescale.fr | blog.wescale.fr Alexis Morelle Cloud Builder @almorelle [email protected] Bassem Benlazreg Cloud Builder @BassemLazreg [email protected] Aymen Lamara Cloud Builder @Aymenlamara [email protected]