Skip to content

Instantly share code, notes, and snippets.

@khurdz
Last active November 20, 2018 08:24
Show Gist options
  • Save khurdz/fedc794dae2ea01dc015a56afb250069 to your computer and use it in GitHub Desktop.
Save khurdz/fedc794dae2ea01dc015a56afb250069 to your computer and use it in GitHub Desktop.
Conférences DevFest Toulouse 2018

"The Old Man Glitch"

Escalade de bug sur la première génération de Pokemon sur Gameboy

  • Fun, WTF

Google Container Tools

Développer efficacement dans un monde de conteneurs Kubernetes est devenu l'orchestrateur de choix pour déployer des applications. Mais qu'en est-il du quotidien des développeurs qui créent ces applications ? Plus on s'appuie sur la plateforme, plus il est compliqué de développer en dehors de la plateforme. Et développer à l'intérieur de conteneurs n'est pas réputé facile ni agréable. Google est à l'origine de plusieurs projets Open-Source qui se focalisent sur l'expérience des développeurs dans un monde de conteneurs.

Build

Kaniko

Skaffold

  • https://github.com/GoogleContainerTools/skaffold
  • Skaffold facilite le déploiement continu d'applications pour Kubernetes.
  • Facilite également le développement itératif avec la modification du code source.
  • Port forwarding possible sur le localhost
  • Polyglote
  • Déploiement sur cluster k8s distant
  • Artifacts / Build / Test / Deploy

Distroless

  • https://github.com/GoogleContainerTools/distroless
  • Les images Distroless offrent des images de base légères, sécurisées et de qualité.
  • Permet d'utiliser des images docker avec le strict minimum pour garantir une sécurité maximale: sans package manager, sans shell ni les programmes pré-installés sur des distributions linux. Tout cela grâce au multi-stage build de docker.
  • Possible toutefois d'avoir un bash et package manager sur des versions debug des images.

Alpine Linux

Bazel

  • docker build classique peu performant pour du build incrémental.
    • Layers: effet hamburger, images de plus en plus volumineuses.
  • Bazel permet de construire des images Docker sans Docker.
    • https://github.com/bazelbuild/bazel
    • Bazel implémente ses propres docker_rules qui vont venir remplacer les habituels maven/gradle dans la chaîne de build.
    • Outil de build avec sa propre syntaxe (efficace, rapide, mais complexe).

Jib

Deploy

Comment gérer un livrable unique configuré pour plusieurs environnements ?

Helm

  • https://helm.sh/ : package manager pour k8s
  • Helm peut paraître complexe mais ses possibilités de généralisation font sa force avec l’ensemble des templates de déploiements déjà existant en ligne : https://github.com/helm/charts

Kustomize

Kontemplate

Agile, Craftsmanship, DevOps and other monsters

How to fight with them

  • In the beginning, there was the Agile Manifesto Agile Manifesto
    • 4 values, 12 principles
    • Scrum
    • Kanban
    • Scrumban...
  • On the other hand, we have Software Craftsmanship Manifesto Software Craftsmanship Manifesto
    • Kind of an extension to Agile
    • Value, quality and share matter
    • "Raising the bar"
    • Community of professionals
    • Go and stay outside one's comfort zone
    • Culture of sharing : everyone learn from each other, meetups, conferences, "I'm not always right", etc.
  • Then came DevOps
    • No manifesto, no real framework
    • New tools, new name for Ops team...
    • Most of all, it is made of culture and shared responsibility, reduced organisational silos, continuous improvement...
      • Not visible... why ?
      • To improve, you have to assess something is wrong
      • Never finished job
  • Combining all 3
    • Assess and understand (identify problems, what can be done, make changes, and most of all measure)
    • There is no one single way to do things (find your own path, no silver bullet, best practices are not always best for everyone)
    • Show courage (leave comfort zone, be ready to fail, ask for help)
    • Continuous improvement (process, work environment, knowledge, feedback)
    • Keep it simple (not simpler) (easier to deliver, less failures, proceed with baby steps at first)
    • Respect (people, experience, relationship, no blame)
  • What's next ?
    • In fact, all those experience practices were already there 20 years ago (simplicity, communication, feedback, courage, respect)
    • Make your own hybrid (consider your context, continuously evaluate)

Microservices and Event-Sourcing with Kafka and Kubernetes

Use-case

µ-Services

  • Monolith -> µ-services
  • µS with their own data
  • Multiple points of entry
  • More flexibility but more complexity
  • Distributed computing, polyglot
  • Fallacies of distributed computing
  • 1 failure = cascading failure
  • Multiple µS needs (API : tracing, monitoring, logging, auth, pipeline, resilience, elasticity, invocation, discovery)

Kafka

  • pub/sub
  • streaming
  • distributed and horizontally scalable
  • fault-tolerant
  • commit log
  • sharding
  • enables messaging between µs
    • event sourcing: state of the application as a series of events

Modernize a monolith with CDC (change data capture)

  • Add new services around a monolith without touching or modifying it
  • Event-sourcing on each action made by/on the monolith
  • CDC example : CDC example

Kubernetes / OpenShift

  • Why Kubernetes is the New Application Server
    • Service Discovery
    • Basic Invocation
    • Elasticity, auto-scaling
    • Logging
    • Monitoring
    • Build and Deployment Pipelines
    • Resilience, self-healing
    • Authentication
    • Tracing
  • Kubernetes
    • Discovery
    • Invocation
    • Elasticity
  • OpenShift
    • Monitoring (Prometheus)
    • Logging (EFK)
    • Pipelines
  • Istio
    • Tracing
    • Monitoring
    • Blue-Green deployments
    • Authentication
    • Resilience
    • Discovery

k8s/openshift/istio

Testcontainers

Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.

Let’s Sketchnote

Prise de notes visuelle La communication fait aujourd’hui partie intégrante de notre travail; il nous arrive régulièrement de vouloir diffuser une information importante, réaliser une présentation, un compte rendu de réunion… Mais comment être sûrs que le message que l’on souhaite faire passer a bien été compris et retenu par les interlocuteurs ? Le sketchnoting apporte une solution ludique, créative et agréable autant à créer qu’à lire, et permet de mettre en valeur votre communication à l’aide de procédés très visuels, simples et accessibles à tous.

Tests d'API Rest

Karate fournit une syntaxe facile pour tester vos APIs REST. Son format DSL plain text inspiré de la syntaxe Cucumber (ie. Gherkin) permet même aux personnes aux notions basiques en développement de venir couvrir vos APIs ou Web services (micros, nanos ou pas!)

Architecture Decision Records

"Réconciliez vous avec votre documentation" Les développeurs aiment écrire de la documentation... ou pas ! Pourtant même les plus réfractaires doivent l'admettre, garder une trace des décisions techniques prises au cours d'un projet peut s'avérer indispensable pour la pérennité et maintenabilité de celui-ci.

Alors comment éviter l'obsolescence programmée de la documentation, tout en réduisant la pénibilité de la rédaction ?

Il existe un format simple, les Architecture Decision Records (ADRs), pour écrire des documents d'architecture sous la forme d'un journal immuable. Cette technique simple gagne en popularité et a donné de bons résultats sur nombre de projets.

Durant cette présentation vous construirez en direct un ADR. En partant d'un problème constaté sur un projet, vous élaborerez une réponse technique qui servira de base à une implémentation ultérieure. Vous décrirez les raisons qui vous poussent à faire des compromis, tout en capturant le contexte dans lequel cette décision a été prise pour référence future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment