Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Plateformes et infrastructure infonuagique natif de ville de Montréall

40 views

Published on

Morgan Martinet et Marc Khouzam avons discuter la plateforme et infrastructure infonuagique natif de ville de Montréal au Cloud Native Day Montreal 2019.

Published in: Technology
  • Be the first to comment

Plateformes et infrastructure infonuagique natif de ville de Montréall

  1. 1. 1 SDLC @ montreal.ca Software Development Life Cycle Journée Cloud Native Centre d’expertise - Plateformes et infrastructure juin 2019
  2. 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. 3. Agenda Contexte de la Ville Architecture techno Déploiement automatisé Démo 1 2 3 4 5 Monitoring 6 Enjeux rencontrés & Roadmap
  4. 4. 4 Contexte de la Ville
  5. 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. 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. 7. 7 Environnements applicatifs 400+ Applications
  8. 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
  9. 9. 9 Architecture techno
  10. 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
  11. 11. 11 Architecture logique 11
  12. 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. 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. 14. 14 Déploiement automatisé
  15. 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. 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. 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. 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. 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. 20 Jenkins Jenkins Kubernetes Plugin ● auto-scaling des agents ● multi-conteneurs
  21. 21. 21 Déploiement dans k8s Diagramme branche: develop branche: m aster branches: release/* Gitflow
  22. 22. 22 Jenkins multi-instances
  23. 23. 23 Démo
  24. 24. 24 SDLC Pipeline
  25. 25. 25 Démo - Création d’un repository
  26. 26. 26 Démo - Génération d’un projet
  27. 27. 27 Démo - Push to Deploy
  28. 28. 28 Demo - Jenkins build steps
  29. 29. 29 Sécurité des conteneurs
  30. 30. 30 Démo - Kube Dashboard
  31. 31. 31 Démo - Kube Dashboard
  32. 32. 32 Démo - API Gateway provisioning
  33. 33. 33 Démo - Log exporter
  34. 34. 34 Démo - Dashboards génériques
  35. 35. 35 Demo - Automated Documentation https://api-docs.dev.interne.montreal.ca/reference/api/
  36. 36. 36 Monitoring
  37. 37. 37 Alertes par Prometheus
  38. 38. 38 Alertes dans Slack
  39. 39. 39 Tableau de bord opérationnel 39
  40. 40. 40 Enjeux rencontrés & Roadmap
  41. 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. 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. 43 Recrutement Vous aimeriez participer à cette transformation? Nous embauchons ! https://ville.montreal.qc.ca/mtl-ti/

×