SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
1
SDLC @ montreal.ca
Software Development Life Cycle
Journée Cloud Native
Centre d’expertise - Plateformes et infrastructure
juin 2019
2
Qui sommes nous?
Morgan Martinet
architecte d’entreprise
morgan.martinet@montreal.ca
https://twitter.com/morgan_martinet
https://github.com/livetocode
2
Marc Khouzam
architecte de solutions
marc.khouzam@montreal.ca
https://twitter.com/marckhouzam
https://github.com/marckhouzam
Agenda Contexte de la Ville
Architecture techno
Déploiement automatisé
Démo
1
2
3
4
5 Monitoring
6 Enjeux rencontrés & Roadmap
4
Contexte de la Ville
5
Un virage technologique
Notre histoire racontée dans cet article de la CNCF :
https://www.cncf.io/montreal-case-study/
5
6
Infrastructure technologique
1500 VMs
x 100
● VMWare
● OVM
● UCS (Cisco)
6000 TB de stockage
x 1000
● BlockFC
● CIFS
● NFS
● Object
3 Data Centers
● Tous sur l’île
de Montréal
< 1ms < 1ms
7
Environnements applicatifs
400+ Applications
8
Quelques stats d’utilisation
400
projets Jenkins
800
Repos Bitbucket
600
Repos DockerHub
200 GB/jour
Logs
800k/jour
API calls
300k
Prometheus series
400
K8s pods
13M/jour
NGINX calls
80
K8s namespaces
5
K8s clusters
9
Architecture techno
10
Historique Kubernetes @ Montréal
Mise à jour vers 1.14
Passage de Kismatic à Kubespray
Expansion à 6 workers
Juin 2019
K8s sur VMWare
Migration des 35 VMs de OVM vers VMWare
Version 1.10
2018
Mise en place de k8s
2015
2017
Mise en place de Docker
Version 1.6 avec la suite Kismatic
5 Clusters en HA
3 Masters, 4 Worker Nodes (8CPU, 32GB)
VMs Docker
3 Environnements de 4 VMs chacuns
GUI Rancher
11
Architecture logique
11
12
Au delà de Kubernetes
12
Kubernetes is a platform for building platforms.
It's a better place to start; not the endgame.
— Kelsey Hightower (@kelseyhightower) November 27, 2017
13
Création d’un PaaS
Pourquoi un développement maison?
● version vanille de kubernetes
● bien comprendre pour un meilleur support
● pouvoir partager avec d’autres organismes publics
● éviter le vendor lock-in
● offrir une solution personnalisée
13
14
Déploiement automatisé
15
● Un ensemble de services bien intégrés (conteneurs, stockage, API,
logs, monitoring...)
● Un pipeline de CI/CD
● Un portail de type libre-service
Qu’est-ce qu’un PaaS?
15
16
● Peu de concurrents il y a 3 ans
● Standard du marché
● Interface utilisateur complète, incluant la gestion des droits d’accès
● branches multiples
● Organisation hiérarchique des projets (folders)
● Infrastructure as code (Jenkinsfile)
Jenkins comme outil de CI/CD
16
17
● simplification, pour susciter l’adhésion
● factorisation, pour faciliter la maintenance et l’évolution
● abstraction
○ pour pouvoir replateformer facilement
○ pour éviter de demander aux devs d’être des experts en tout
● provisioning (des APIs, CRONs, DBs…)
● gestion des secrets
● gestion des environnements multiples
● notre source de vérité pour décrire une application et son déploiement
Création d’un DSL dans Jenkins
17
18
Exemple de Jenkinsfile 1/2
18
@Library('cicd-lib')
ctx = pipeline.createContext([
namespace: ["infra","security"],
application: [
name: "identity-management-api", runtime: "nodejs",
type: “service”, tier: “backend”, keywords: [“a”, “b”, “c”]
],
packaging: [
dockerfilePath: "./Dockerfile",
],
execution: [
service: [ port: 12345 ],
resources: [
maxCpu: "200m", maxMemory: "256Mi"
],
autoScaling: [
minReplicas: 2, maxReplicas: 3, cpuUsagePercentage: 50,
overrides: [
prod: [ maxReplicas: 6 ],
] ] ],
approval: [ ],
notifications: [ ],
secrets: [
[ type: "file",
path: "/mtl/app/config/local.json",
content: [ map: [
"mongodb.user": [
Jenkins: [key: "mongo-user", type: “user”]
] ] ],
[ type: "variable",
name: "CLIENT_ID",
content: [Jenkins: [key: "oidc, type: “username”]]
] ],
api: [
domainPath: "/it-platforms/security",
networkAccess: [ profile: "internal" ],
rateLimiting: [ perMinute: 1000, perSecond: 20 ],
security: [
enabled: true
whitelist: [
POST: [ "~/v1/tickets/.*" ]
]
],
]])
19
Exemple de Jenkinsfile 2/2
19
pipeline.start(ctx) {
pipeline.withSourceCode(ctx) {
pipeline.buildStage(ctx) {
pipeline.buildDockerImage(ctx)
}
pipeline.prePublishStage(ctx) {
pipeline.publishDraftDockerImage(ctx)
}
}
pipeline.withDraftDockerImage(ctx) {
pipeline.testInDraftDockerContainerStage(ctx) {
try {
sh """
cd /mtl/app
npm install
npm run test-jenkins -- --report=$WORKSPACE/output/test-results/report.xml
"""
} finally {
junit "output/test-results/*.xml"
}
}
pipeline.publishStage(ctx) {
pipeline.publishDockerImage(ctx)
}
pipeline.deployStage(ctx) {
pipeline.deployApp(ctx)
}
}
}
20
Jenkins
Jenkins Kubernetes Plugin
● auto-scaling des agents
● multi-conteneurs
21
Déploiement dans k8s
Diagramme
branche: develop
branche: m
aster
branches: release/*
Gitflow
22
Jenkins
multi-instances
23
Démo
24
SDLC Pipeline
25
Démo - Création d’un repository
26
Démo - Génération d’un projet
27
Démo - Push to Deploy
28
Demo - Jenkins build steps
29
Sécurité des conteneurs
30
Démo - Kube Dashboard
31
Démo - Kube Dashboard
32
Démo - API Gateway provisioning
33
Démo - Log exporter
34
Démo - Dashboards génériques
35
Demo - Automated Documentation
https://api-docs.dev.interne.montreal.ca/reference/api/
36
Monitoring
37
Alertes par Prometheus
38
Alertes dans Slack
39
Tableau de bord opérationnel
39
40
Enjeux rencontrés
&
Roadmap
41
Enjeux
● Gestion des mises à jours
○ de nos librairies partagées
○ des librairies utilisées par les projets
○ des images Docker
○ des plateformes
● Jenkins
○ prolifération des branches et des builds (45k!)
○ les pods pour les agents restent parfois coincés en erreur
○ docker build: ne pas oublier l’option -rm!!!!
● Migration à une nouvelle distribution de Kubernetes (Kubespray)
● Configuration des dashboards
● Configuration des Alertes
● Configuration des quotas de mémoire et CPU, des probes
41
42
Roadmap
● Provisioning automatisé
○ BD, Gluu, NGINX…
● Observabilité
○ Istio, Jaeger, Kiali, Sentry
○ Prometheus long term storage (M3DB)
● Sécurité
○ Sonarqube
○ signer les images
○ Pod policy, Network policy
○ rootless containers
● FaaS
○ Riff? Dispatch? Triggermesh?
42
● Jenkins-x
● Opérateurs k8s
● Cloud hybride
● Feature toggles
● Canary deployment
43
Recrutement
Vous aimeriez participer à
cette transformation?
Nous embauchons !
https://ville.montreal.qc.ca/mtl-ti/
Plateformes et infrastructure infonuagique natif de ville de Montréall

Weitere ähnliche Inhalte

Ähnlich wie Plateformes et infrastructure infonuagique natif de ville de Montréall

#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...Paris Open Source Summit
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...MSDEVMTL
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiquesJohan Moreau
 
Petit déjeuner Octo - L'infra au service de ses projets
Petit déjeuner Octo - L'infra au service de ses projetsPetit déjeuner Octo - L'infra au service de ses projets
Petit déjeuner Octo - L'infra au service de ses projetsAdrien Blind
 
Petit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projetsPetit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projetsOCTO Technology
 
Gab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetite
Gab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetiteGab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetite
Gab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetiteAZUG FR
 
20171122 01 - REX : Intégration et déploiement continu chez Engie
20171122 01 - REX : Intégration et déploiement continu chez Engie20171122 01 - REX : Intégration et déploiement continu chez Engie
20171122 01 - REX : Intégration et déploiement continu chez EngieLeClubQualiteLogicielle
 
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]ANEO
 
DevFest Nantes 2016 - Spinnaker
DevFest Nantes 2016 - SpinnakerDevFest Nantes 2016 - Spinnaker
DevFest Nantes 2016 - SpinnakerStephan Lagraulet
 
Dossier de competences MA
Dossier de competences MADossier de competences MA
Dossier de competences MAClementine D.
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & KubernetesPerfect Memory
 
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018Cedric Girard
 
Informatique CDC & la Suite Elastic : une seule suite pour de multiples usages
Informatique CDC & la Suite Elastic : une seule suite pour de multiples usagesInformatique CDC & la Suite Elastic : une seule suite pour de multiples usages
Informatique CDC & la Suite Elastic : une seule suite pour de multiples usagesElasticsearch
 
OCCIware presentation au groupe de travail Big Data du SCS
OCCIware presentation au groupe de travail Big Data du SCSOCCIware presentation au groupe de travail Big Data du SCS
OCCIware presentation au groupe de travail Big Data du SCSOCCIware
 

Ähnlich wie Plateformes et infrastructure infonuagique natif de ville de Montréall (20)

#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiques
 
Petit déjeuner Octo - L'infra au service de ses projets
Petit déjeuner Octo - L'infra au service de ses projetsPetit déjeuner Octo - L'infra au service de ses projets
Petit déjeuner Octo - L'infra au service de ses projets
 
Petit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projetsPetit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projets
 
Gab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetite
Gab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetiteGab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetite
Gab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetite
 
20171122 01 - REX : Intégration et déploiement continu chez Engie
20171122 01 - REX : Intégration et déploiement continu chez Engie20171122 01 - REX : Intégration et déploiement continu chez Engie
20171122 01 - REX : Intégration et déploiement continu chez Engie
 
12-Factor
12-Factor12-Factor
12-Factor
 
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
 
Catalogue PFE 2019
Catalogue PFE 2019Catalogue PFE 2019
Catalogue PFE 2019
 
DevFest Nantes 2016 - Spinnaker
DevFest Nantes 2016 - SpinnakerDevFest Nantes 2016 - Spinnaker
DevFest Nantes 2016 - Spinnaker
 
my_resume(fre)
my_resume(fre)my_resume(fre)
my_resume(fre)
 
TYPO3 : quelles nouveautés en 2018 ?
TYPO3 : quelles nouveautés en 2018 ? TYPO3 : quelles nouveautés en 2018 ?
TYPO3 : quelles nouveautés en 2018 ?
 
MERAZKA Messaoud
MERAZKA MessaoudMERAZKA Messaoud
MERAZKA Messaoud
 
Dossier de competences MA
Dossier de competences MADossier de competences MA
Dossier de competences MA
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & Kubernetes
 
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
 
Informatique CDC & la Suite Elastic : une seule suite pour de multiples usages
Informatique CDC & la Suite Elastic : une seule suite pour de multiples usagesInformatique CDC & la Suite Elastic : une seule suite pour de multiples usages
Informatique CDC & la Suite Elastic : une seule suite pour de multiples usages
 
OCCIware presentation au groupe de travail Big Data du SCS
OCCIware presentation au groupe de travail Big Data du SCSOCCIware presentation au groupe de travail Big Data du SCS
OCCIware presentation au groupe de travail Big Data du SCS
 

Mehr von CloudOps2005

Defense in Depth: Securing your new Kubernetes cluster from the challenges th...
Defense in Depth: Securing your new Kubernetes cluster from the challenges th...Defense in Depth: Securing your new Kubernetes cluster from the challenges th...
Defense in Depth: Securing your new Kubernetes cluster from the challenges th...CloudOps2005
 
Human No, Machine Yes: Welcome to the CDF with Incremental Confidence
Human No, Machine Yes: Welcome to the CDF with Incremental ConfidenceHuman No, Machine Yes: Welcome to the CDF with Incremental Confidence
Human No, Machine Yes: Welcome to the CDF with Incremental ConfidenceCloudOps2005
 
The Salmon Algorithm Spawning with Kubernetes
The Salmon Algorithm Spawning with KubernetesThe Salmon Algorithm Spawning with Kubernetes
The Salmon Algorithm Spawning with KubernetesCloudOps2005
 
Own your Destiny in the Cloud - Ian Rae - Cloud Native Day Montreal 2019
Own your Destiny in the Cloud - Ian Rae - Cloud Native Day Montreal 2019Own your Destiny in the Cloud - Ian Rae - Cloud Native Day Montreal 2019
Own your Destiny in the Cloud - Ian Rae - Cloud Native Day Montreal 2019CloudOps2005
 
Using Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with CephUsing Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with CephCloudOps2005
 
Kafka on Kubernetes
Kafka on KubernetesKafka on Kubernetes
Kafka on KubernetesCloudOps2005
 
Kubernetes: Crossing the Chasm
Kubernetes: Crossing the ChasmKubernetes: Crossing the Chasm
Kubernetes: Crossing the ChasmCloudOps2005
 
Distributed Logging with Kubernetes
Distributed Logging with KubernetesDistributed Logging with Kubernetes
Distributed Logging with KubernetesCloudOps2005
 
Kubernetes Security with Calico and Open Policy Agent
Kubernetes Security with Calico and Open Policy AgentKubernetes Security with Calico and Open Policy Agent
Kubernetes Security with Calico and Open Policy AgentCloudOps2005
 
Advanced Deployment Strategies with Kubernetes and Istio
Advanced Deployment Strategies with Kubernetes and IstioAdvanced Deployment Strategies with Kubernetes and Istio
Advanced Deployment Strategies with Kubernetes and IstioCloudOps2005
 
GitOps with ArgoCD
GitOps with ArgoCDGitOps with ArgoCD
GitOps with ArgoCDCloudOps2005
 
Kubernetes Services are sooo Yesterday!
Kubernetes Services are sooo Yesterday!Kubernetes Services are sooo Yesterday!
Kubernetes Services are sooo Yesterday!CloudOps2005
 
Amazon EKS: the good, the bad, and the ugly
Amazon EKS: the good, the bad, and the uglyAmazon EKS: the good, the bad, and the ugly
Amazon EKS: the good, the bad, and the uglyCloudOps2005
 
Kubernetes, Terraform, Vault, and Consul
Kubernetes, Terraform, Vault, and ConsulKubernetes, Terraform, Vault, and Consul
Kubernetes, Terraform, Vault, and ConsulCloudOps2005
 
SIG Multicluster and the Path to Federation
SIG Multicluster and the Path to FederationSIG Multicluster and the Path to Federation
SIG Multicluster and the Path to FederationCloudOps2005
 
To Russia with Love: Deploying Kubernetes in Exotic Locations On Prem
To Russia with Love: Deploying Kubernetes in Exotic Locations On PremTo Russia with Love: Deploying Kubernetes in Exotic Locations On Prem
To Russia with Love: Deploying Kubernetes in Exotic Locations On PremCloudOps2005
 
Operator SDK for K8s using Go
Operator SDK for K8s using GoOperator SDK for K8s using Go
Operator SDK for K8s using GoCloudOps2005
 
How to Handle your Kubernetes Upgrades
How to Handle your Kubernetes UpgradesHow to Handle your Kubernetes Upgrades
How to Handle your Kubernetes UpgradesCloudOps2005
 
Kubernetes and Cloud Native Meetup - March, 2019
Kubernetes and Cloud Native Meetup - March, 2019Kubernetes and Cloud Native Meetup - March, 2019
Kubernetes and Cloud Native Meetup - March, 2019CloudOps2005
 
Prometheus and Thanos
Prometheus and ThanosPrometheus and Thanos
Prometheus and ThanosCloudOps2005
 

Mehr von CloudOps2005 (20)

Defense in Depth: Securing your new Kubernetes cluster from the challenges th...
Defense in Depth: Securing your new Kubernetes cluster from the challenges th...Defense in Depth: Securing your new Kubernetes cluster from the challenges th...
Defense in Depth: Securing your new Kubernetes cluster from the challenges th...
 
Human No, Machine Yes: Welcome to the CDF with Incremental Confidence
Human No, Machine Yes: Welcome to the CDF with Incremental ConfidenceHuman No, Machine Yes: Welcome to the CDF with Incremental Confidence
Human No, Machine Yes: Welcome to the CDF with Incremental Confidence
 
The Salmon Algorithm Spawning with Kubernetes
The Salmon Algorithm Spawning with KubernetesThe Salmon Algorithm Spawning with Kubernetes
The Salmon Algorithm Spawning with Kubernetes
 
Own your Destiny in the Cloud - Ian Rae - Cloud Native Day Montreal 2019
Own your Destiny in the Cloud - Ian Rae - Cloud Native Day Montreal 2019Own your Destiny in the Cloud - Ian Rae - Cloud Native Day Montreal 2019
Own your Destiny in the Cloud - Ian Rae - Cloud Native Day Montreal 2019
 
Using Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with CephUsing Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with Ceph
 
Kafka on Kubernetes
Kafka on KubernetesKafka on Kubernetes
Kafka on Kubernetes
 
Kubernetes: Crossing the Chasm
Kubernetes: Crossing the ChasmKubernetes: Crossing the Chasm
Kubernetes: Crossing the Chasm
 
Distributed Logging with Kubernetes
Distributed Logging with KubernetesDistributed Logging with Kubernetes
Distributed Logging with Kubernetes
 
Kubernetes Security with Calico and Open Policy Agent
Kubernetes Security with Calico and Open Policy AgentKubernetes Security with Calico and Open Policy Agent
Kubernetes Security with Calico and Open Policy Agent
 
Advanced Deployment Strategies with Kubernetes and Istio
Advanced Deployment Strategies with Kubernetes and IstioAdvanced Deployment Strategies with Kubernetes and Istio
Advanced Deployment Strategies with Kubernetes and Istio
 
GitOps with ArgoCD
GitOps with ArgoCDGitOps with ArgoCD
GitOps with ArgoCD
 
Kubernetes Services are sooo Yesterday!
Kubernetes Services are sooo Yesterday!Kubernetes Services are sooo Yesterday!
Kubernetes Services are sooo Yesterday!
 
Amazon EKS: the good, the bad, and the ugly
Amazon EKS: the good, the bad, and the uglyAmazon EKS: the good, the bad, and the ugly
Amazon EKS: the good, the bad, and the ugly
 
Kubernetes, Terraform, Vault, and Consul
Kubernetes, Terraform, Vault, and ConsulKubernetes, Terraform, Vault, and Consul
Kubernetes, Terraform, Vault, and Consul
 
SIG Multicluster and the Path to Federation
SIG Multicluster and the Path to FederationSIG Multicluster and the Path to Federation
SIG Multicluster and the Path to Federation
 
To Russia with Love: Deploying Kubernetes in Exotic Locations On Prem
To Russia with Love: Deploying Kubernetes in Exotic Locations On PremTo Russia with Love: Deploying Kubernetes in Exotic Locations On Prem
To Russia with Love: Deploying Kubernetes in Exotic Locations On Prem
 
Operator SDK for K8s using Go
Operator SDK for K8s using GoOperator SDK for K8s using Go
Operator SDK for K8s using Go
 
How to Handle your Kubernetes Upgrades
How to Handle your Kubernetes UpgradesHow to Handle your Kubernetes Upgrades
How to Handle your Kubernetes Upgrades
 
Kubernetes and Cloud Native Meetup - March, 2019
Kubernetes and Cloud Native Meetup - March, 2019Kubernetes and Cloud Native Meetup - March, 2019
Kubernetes and Cloud Native Meetup - March, 2019
 
Prometheus and Thanos
Prometheus and ThanosPrometheus and Thanos
Prometheus and Thanos
 

Plateformes et infrastructure infonuagique natif de ville de Montréall

  • 1. 1 SDLC @ montreal.ca Software Development Life Cycle Journée Cloud Native Centre d’expertise - Plateformes et infrastructure juin 2019
  • 2. 2 Qui sommes nous? Morgan Martinet architecte d’entreprise morgan.martinet@montreal.ca https://twitter.com/morgan_martinet https://github.com/livetocode 2 Marc Khouzam architecte de solutions marc.khouzam@montreal.ca https://twitter.com/marckhouzam https://github.com/marckhouzam
  • 3. Agenda Contexte de la Ville Architecture techno Déploiement automatisé Démo 1 2 3 4 5 Monitoring 6 Enjeux rencontrés & Roadmap
  • 5. 5 Un virage technologique Notre histoire racontée dans cet article de la CNCF : https://www.cncf.io/montreal-case-study/ 5
  • 6. 6 Infrastructure technologique 1500 VMs x 100 ● VMWare ● OVM ● UCS (Cisco) 6000 TB de stockage x 1000 ● BlockFC ● CIFS ● NFS ● Object 3 Data Centers ● Tous sur l’île de Montréal < 1ms < 1ms
  • 8. 8 Quelques stats d’utilisation 400 projets Jenkins 800 Repos Bitbucket 600 Repos DockerHub 200 GB/jour Logs 800k/jour API calls 300k Prometheus series 400 K8s pods 13M/jour NGINX calls 80 K8s namespaces 5 K8s clusters
  • 10. 10 Historique Kubernetes @ Montréal Mise à jour vers 1.14 Passage de Kismatic à Kubespray Expansion à 6 workers Juin 2019 K8s sur VMWare Migration des 35 VMs de OVM vers VMWare Version 1.10 2018 Mise en place de k8s 2015 2017 Mise en place de Docker Version 1.6 avec la suite Kismatic 5 Clusters en HA 3 Masters, 4 Worker Nodes (8CPU, 32GB) VMs Docker 3 Environnements de 4 VMs chacuns GUI Rancher
  • 12. 12 Au delà de Kubernetes 12 Kubernetes is a platform for building platforms. It's a better place to start; not the endgame. — Kelsey Hightower (@kelseyhightower) November 27, 2017
  • 13. 13 Création d’un PaaS Pourquoi un développement maison? ● version vanille de kubernetes ● bien comprendre pour un meilleur support ● pouvoir partager avec d’autres organismes publics ● éviter le vendor lock-in ● offrir une solution personnalisée 13
  • 15. 15 ● Un ensemble de services bien intégrés (conteneurs, stockage, API, logs, monitoring...) ● Un pipeline de CI/CD ● Un portail de type libre-service Qu’est-ce qu’un PaaS? 15
  • 16. 16 ● Peu de concurrents il y a 3 ans ● Standard du marché ● Interface utilisateur complète, incluant la gestion des droits d’accès ● branches multiples ● Organisation hiérarchique des projets (folders) ● Infrastructure as code (Jenkinsfile) Jenkins comme outil de CI/CD 16
  • 17. 17 ● simplification, pour susciter l’adhésion ● factorisation, pour faciliter la maintenance et l’évolution ● abstraction ○ pour pouvoir replateformer facilement ○ pour éviter de demander aux devs d’être des experts en tout ● provisioning (des APIs, CRONs, DBs…) ● gestion des secrets ● gestion des environnements multiples ● notre source de vérité pour décrire une application et son déploiement Création d’un DSL dans Jenkins 17
  • 18. 18 Exemple de Jenkinsfile 1/2 18 @Library('cicd-lib') ctx = pipeline.createContext([ namespace: ["infra","security"], application: [ name: "identity-management-api", runtime: "nodejs", type: “service”, tier: “backend”, keywords: [“a”, “b”, “c”] ], packaging: [ dockerfilePath: "./Dockerfile", ], execution: [ service: [ port: 12345 ], resources: [ maxCpu: "200m", maxMemory: "256Mi" ], autoScaling: [ minReplicas: 2, maxReplicas: 3, cpuUsagePercentage: 50, overrides: [ prod: [ maxReplicas: 6 ], ] ] ], approval: [ ], notifications: [ ], secrets: [ [ type: "file", path: "/mtl/app/config/local.json", content: [ map: [ "mongodb.user": [ Jenkins: [key: "mongo-user", type: “user”] ] ] ], [ type: "variable", name: "CLIENT_ID", content: [Jenkins: [key: "oidc, type: “username”]] ] ], api: [ domainPath: "/it-platforms/security", networkAccess: [ profile: "internal" ], rateLimiting: [ perMinute: 1000, perSecond: 20 ], security: [ enabled: true whitelist: [ POST: [ "~/v1/tickets/.*" ] ] ], ]])
  • 19. 19 Exemple de Jenkinsfile 2/2 19 pipeline.start(ctx) { pipeline.withSourceCode(ctx) { pipeline.buildStage(ctx) { pipeline.buildDockerImage(ctx) } pipeline.prePublishStage(ctx) { pipeline.publishDraftDockerImage(ctx) } } pipeline.withDraftDockerImage(ctx) { pipeline.testInDraftDockerContainerStage(ctx) { try { sh """ cd /mtl/app npm install npm run test-jenkins -- --report=$WORKSPACE/output/test-results/report.xml """ } finally { junit "output/test-results/*.xml" } } pipeline.publishStage(ctx) { pipeline.publishDockerImage(ctx) } pipeline.deployStage(ctx) { pipeline.deployApp(ctx) } } }
  • 20. 20 Jenkins Jenkins Kubernetes Plugin ● auto-scaling des agents ● multi-conteneurs
  • 21. 21 Déploiement dans k8s Diagramme branche: develop branche: m aster branches: release/* Gitflow
  • 25. 25 Démo - Création d’un repository
  • 26. 26 Démo - Génération d’un projet
  • 27. 27 Démo - Push to Deploy
  • 28. 28 Demo - Jenkins build steps
  • 30. 30 Démo - Kube Dashboard
  • 31. 31 Démo - Kube Dashboard
  • 32. 32 Démo - API Gateway provisioning
  • 33. 33 Démo - Log exporter
  • 34. 34 Démo - Dashboards génériques
  • 35. 35 Demo - Automated Documentation https://api-docs.dev.interne.montreal.ca/reference/api/
  • 39. 39 Tableau de bord opérationnel 39
  • 41. 41 Enjeux ● Gestion des mises à jours ○ de nos librairies partagées ○ des librairies utilisées par les projets ○ des images Docker ○ des plateformes ● Jenkins ○ prolifération des branches et des builds (45k!) ○ les pods pour les agents restent parfois coincés en erreur ○ docker build: ne pas oublier l’option -rm!!!! ● Migration à une nouvelle distribution de Kubernetes (Kubespray) ● Configuration des dashboards ● Configuration des Alertes ● Configuration des quotas de mémoire et CPU, des probes 41
  • 42. 42 Roadmap ● Provisioning automatisé ○ BD, Gluu, NGINX… ● Observabilité ○ Istio, Jaeger, Kiali, Sentry ○ Prometheus long term storage (M3DB) ● Sécurité ○ Sonarqube ○ signer les images ○ Pod policy, Network policy ○ rootless containers ● FaaS ○ Riff? Dispatch? Triggermesh? 42 ● Jenkins-x ● Opérateurs k8s ● Cloud hybride ● Feature toggles ● Canary deployment
  • 43. 43 Recrutement Vous aimeriez participer à cette transformation? Nous embauchons ! https://ville.montreal.qc.ca/mtl-ti/