gitops pour openshift - red...
TRANSCRIPT
![Page 1: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/1.jpg)
1
GitOps pour OpenShift
Martin Sauvé
Architecte principal
Mai 2020
![Page 2: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/2.jpg)
2
GitOps: l’état des applications et de l’infrastructure est en tout temps représenté dans un dépôt Git. Tout changement au dépôt est reflété
dans l’infrastructure et les applications correspondance par des procédures complètement automatisées.
GitOps est une évolution naturelle au DevOps et aux méthodologies agiles
GitOps
![Page 3: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/3.jpg)
3
● Tous les changements sont vérifiables et traçables.
● Processus standardisé pour retour en arrière ou déploiement d’une certaine version au besoin.
● Reprise en cas de désastre: Appliquer de nouveau tous les manifestes.
● Expérience utilisateur: Push et Pull Requests
Pourquoi GitOps ?
![Page 4: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/4.jpg)
Kubernetes Cluster
Node
1
Kubernetes (K8s) est un ensemble de projets du logiciel libre pour automatiser, déployer et gérer les applications conteneurisées.
En gros…. C’est un céduleur de ressources….
KUBERNETES 101
4
Node Node
Node Node Node
Node Node Node
1
1
2
2
2
2
3
33
4
4
Applications
![Page 5: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/5.jpg)
OpenShift 4 - Une plateforme Kubernetes intelligente
Installation complète et automatisé: de la plateforme de gestion de conteneurs aux services applicatifs et opérations.
Déploiement automatisé de ressources Kubernetes: pour tous les clouds et dans vos centres de données.
Auto Scaling: des ressources infonuagique
Mise-à-jour avec un bouton: pour la plateforme, les services et applications
![Page 6: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/6.jpg)
OpenShift et GitOps
● OpenShift est un environnement déclaratif○ La configuration est déclarée et les Operators
l’appliquent○ Les déploiements d’applications sont déclarés et
le céduleur Kubernetes applique les déploiements.
● GitOps dans un environnement traditionnel demande du scripting. La nature déclarative d’OpenShift élimine ce requis.
● Les configurations pour les Operators sont de fichiers YAML facilement stockés et gérés par Git.
● Infrastructure-as-code, pipeline-as-code, configuration-as-code……..
![Page 7: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/7.jpg)
Principes GitOps pour OpenShift
● Separation: des manifestes (yaml) et du code source (Java/.Net/etc). Le comment et le quoi.
● Les manifestes sont des manifestes standards Kubernetes● Éviter la duplication des fichiers yaml par environment.● Les manifestes doivent être appliqués par un outillage standard
Openshift et Kubernetes
![Page 8: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/8.jpg)
Opérations (Jour 2) : Tous les changements à partir de Git
![Page 9: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/9.jpg)
Outils
https://argoproj.github.io/argo-cdhttps://kustomize.io/
Argo CD Kustomize
![Page 10: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/10.jpg)
Argo CD - Aperçu
Argo CD est un outil de livraison continue (CD) pour Kubernetes.
● Ressources Argo (Applications, Projets, Clusters) sont des ressources declarative Kubernetes
● Argo synchronize le cluster OpenShift avec des dépôt Git
● Compatible avec plusieurs outils Kubernetes
○ Helm○ Kustomize○ Ksonnet/Jsonnet○ Directories of yaml
● Pas un outil d’intégration continue (CI)
![Page 11: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/11.jpg)
Qu’est-ce qu’une application Argo ?
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: product-catalog-dev namespace: argocdspec: destination: namespace: argocd server: https://kubernetes.default.svc project: product-catalog source: path: manifests/app/overlays/dev-quay repoURL: https://github.com/gnunn-gitops/product-catalog.git targetRevision: master syncPolicy: automated: prune: false selfHeal: false
● Une configuration déclarative de type “Custom Resource” (CR) décrivant une application
● La configuration inclus:○ Nom○ Cluster○ Dépôt Git ○ Politique de synchro.
● CLI ou interface utilisateur
![Page 12: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/12.jpg)
Argo CD - Synchronisation
Poll/Push
Changement dans Git
Réconcilliation Synchronisation
![Page 13: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/13.jpg)
Approche 1: Dépôts multiples/taxi-config-stage.git /taxi-config-test.git
/taxi-config-prod.git /taxi-config-dev.git
/taxi.git
![Page 14: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/14.jpg)
Approche 2 : Dépôt unique├── apps│ └── app-1│ ├── base│ │ └── kustomization.yaml│ └── dev│ ├── deployment.yaml│ └── kustomization.yaml├── envs│ ├── base│ │ ├── 205-serviceaccount.yaml│ │ └── kustomization.yaml│ └── dev│ └── kustomization.yaml└── services └── service-a ├── base │ ├── config │ │ ├── 300-deployment.yaml │ │ ├── 310-service.yaml │ │ └── kustomization.yaml │ └── kustomization.yaml └── dev ├── dev-deployment.yaml ├── dev-service.yaml └── kustomization.yaml
├── base│ ├── deployment.yaml│ ├── kustomization.yaml│ └── service.yaml└── overlays ├── development │ ├── kustomization.yaml │ └── replicas.yaml ├── production │ ├── kustomization.yaml │ ├── replicas.yaml │ └── volumes.yaml └── staging ├── kustomization.yaml └── volumes.yaml
├── 00-tekton│ ├── release.notags.yaml│ └── release.yaml├── 01-namespaces│ ├── cicd-environment.yaml│ ├── dev-environment.yaml│ └── stage-environment.yaml├── 02-serviceaccount│ ├── demo-sa-admin-dev.rolebinding.yaml│ ├── demo-sa-admin-stage.rolebinding.yaml│ ├── role-binding.yaml│ ├── role.yaml│ └── serviceaccount.yaml├── 03-tasks│ ├── buildah-task.yaml│ ├── create-github-status-task.yaml│ ├── deploy-from-source-task.yaml│ └── deploy-using-kubectl-task.yaml├── 04-templatesandbindings│ ├── dev-cd-deploy-from-master-binding.yaml│ ├── dev-cd-deploy-from-master-template.yaml│ ├── dev-ci-build-from-pr-binding.yaml│ ├── dev-ci-build-from-pr-template.yaml│ ├── stage-cd-deploy-from-push-binding.yaml│ ├── stage-cd-deploy-from-push-template.yaml│ ├── stage-ci-dryrun-from-pr-binding.yaml│ └── stage-ci-dryrun-from-pr-template.yaml├── 05-ci│ ├── dev-ci-pipeline.yaml│ └── stage-ci-pipeline.yaml├── 06-cd│ ├── dev-cd-pipeline.yaml│ └── stage-cd-pipeline.yaml├── 07-eventlisteners│ └── cicd-event-listener.yaml└── 08-routes └── github-webhook-event-listener.yaml
![Page 15: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/15.jpg)
Argo CD - Gestion des secrets
Comment gérer les secrets (Encodage Base64 par Kubernetes) ?
● Utilisation d’une voûte externe.
● Encryption des secrets:○ Bitnami Sealed Secrets○ Mozilla SOPs/KSOPs○ Plusieurs autres
![Page 16: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/16.jpg)
Dépôt application
Dépôt environnement
Openshift Pipeline
Mise-à-jour du Manifeste de dev
Bâtir et valider nouvelle image
Réconciliation des nouveaux manifestes
Dépôt infrastructure
DéveloppeurAdministrateur
(Ops)
Merge PR avec “master”
1
2 3
4
5
Ouverture d’un pull request avec les changements désirés
Merge PR avec le dépôt “dev”
![Page 17: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/17.jpg)
Argo CD - Éviter la duplication
Argo CD permets le déploiement sur plusieurs clusters OpenShift!!!!
Comment gérer les manifestes sans dupliquer l’information partout ?
![Page 18: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/18.jpg)
Kustomize - Aperçu
Kustomize permet de personnaliser les fichiers YAML sans mécanisme de gabarits (templates). Les YAML originaux sont utilisables directement
● Kustomize est un outils de ‘patches’
● Permet la modification de paramètres et configuration spécifique pour chaque environnement sans duplication.
● Contrairement à un approche par gabarits, tous les YAML sont utilisables directement.
● Kustomize est inclus avec kubectl et oc (à partir de la version Kubernetes 1.14)
oc apply -k apps/myapp/overlays/dev
![Page 19: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/19.jpg)
Kustomize - Organisation
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/#bases-and-overlays
Kustomize est organisé en une structure de répertoires comprenant des “bases” et des “overlays”.
● Une base est un répertoire avec un fichier kustomization.yaml décrivant un ensemble de ressources.
○ Une base ne sait pas qu’il y a des “overlays”. Elle peut être utilisée avec plusieurs “overlays”
● Un overlay est un répertoire avec un fichier kustomization.yaml qui réfère à une base.
○ Un overlay peut avoir plusieurs bases et assembler des ressources de plusieurs bases.
![Page 20: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/20.jpg)
Kustomize
└── apps └── myapp ├── base │ ├── kustomization.yaml │ ├── service.yaml │ ├── route.yaml │ └── deployment.yaml │ └── overlays ├── dev │ ├── patch-route.yaml │ ├── namespace.yaml │ └── kustomization.yaml └── test ├── patch-route.yaml ├── namespace.yaml └── kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomization
resources:- service.yaml- route.yaml- deployment.yaml
apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomization
Namespace: devbases:- ../../baseresources:- namespace.yamlpatchesStrategicMerge:- patch-route.yaml
![Page 21: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/21.jpg)
Red Hat Advanced Cluster Management for Kubernetes
![Page 22: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/22.jpg)
22
● Gestion de tout cluster Kubernetes○ OpenShift 3.11, 4.1.x - 4.4.x○ Cloud public: OCP○ Kubernetes : EKS, AKS, GKE, IKS
● Recherchez, trouvez et modifiez les ressources kubernetes à partir d’un domaine de gestion.
● Gestion des TI en tant que code YAML
● Vue globale sur tous les clusters○ Erreurs de configuration○ État des Pods○ Capacité et ressources
● Visualiser et résoudre les problèmes à partir du domaine fédéré
○ Tableau de bord, listes, tables○ Balisage personnalisé○ Régions○ Cas d’affaire○ Version
Operations TI DevOps/SRE
Gestion du cycle de vie multi-clusterAperçu
![Page 23: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/23.jpg)
23
23
Gestion avancée du cycle de vie des applications
• Déploiement simplifié de vos applications sur plusieurs clusters
• Déploiement d’applications à partir de sources multiples
• Visualisez rapidement les relations entre les applications et clusters.
Simplification du cycle de vie
![Page 24: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/24.jpg)
2424
Gestion avancée du cycle de vie des applications
● Créez, modifiez et supprimez, comme vous le feriez pour n'importe quel code source. Git devient votre source de vérité contrôlant vos environnements Cloud ou OnPrem
● Ayez une liste de qui, quoi et quand pour chaque changement déployé dans vos environnements
● Grâce aux révisions et approbations de code, prenez le contrôle total de toutes les modifications apportées à environnements.
● Historique Git commit devient votre ‘System of Record’
GitOps comme source unique de vérité
https://github.com/open-cluster-management/demo-subscription-gitops
Operations TIDevOps/SRE
![Page 25: GitOps pour OpenShift - Red Hatpeople.redhat.com/mlessard/mtl/presentations/.../GitOpspourOpenSh… · représenté dans un dépôt Git. Tout changement au dépôt est reflété](https://reader036.vdocuments.mx/reader036/viewer/2022081620/611944ecb97aaa177c6c2021/html5/thumbnails/25.jpg)
linkedin.com/company/red-hat
youtube.com/user/RedHatVideos
facebook.com/redhatinc
twitter.com/RedHat
Merci!
25