Kubernetes et les technologies cloud sont aujourd'hui les standards pour déployer des applications de toutes sortes dans le cloud: api, batchs, microservices et même des monolithes! Ils apportent des solutions à beaucoup de problèmes mais aussi une grande complexité. Il peut donc être très difficile pour les développeurs et concepteurs d'identifier les contraintes de telles architectures.
Dans cette présentation, vous (re)découvrirez dix astuces et conseils que j'ai pu appliquer et qui m'ont aidé dans mes derniers projets.
Ces derniers traiteront :
de l'environnement de l'application
du choix des solutions techologiques
du développement
des contraintes de conception liées à K8S
et plus encore !
15. « les organisations qui conçoivent
des systèmes [...] tendent
inévitablement à produire des
designs qui sont des copies de la
structure de communication de
leur organisation. »
— M. Conway
15
16. Quel est le RACI ?
Est-ce que votre organisation est compatible ?
16
RACI &
Responsabilités
18. 18
Codebase
One codebase tracked in revision
control, many deploys
Dependencies
Explicitly declare and isolate
dependencies
Config
Store config in the environment
Backing Services
Treat backing services as attached
resources
Build, release, run
Strictly separate build and run
stages
Backing Services
Treat backing services as attached
resources
Processes
Execute the app as one or more
stateless processes
Port Binding
Export services via port binding
Disposability
Maximize robustness with fast
startup and graceful shutdown
Dev/prod parity
Keep development, staging, and
production as similar as possible
Logs
Treat logs as event streams
Admin processes
Run admin/management tasks as
one-off processes
Source: https://12factors.net
24. 24
Items à identifier
✓ Rapidité du démarrage
✓ Gestion des arrêts
✓ Capacité à s’intégrer dans Docker et K8S
✓ Observabilité
✓ Mémoire et CPU utilisées
✓ Gestion des dépendances et du patch management
25. TOMCAT vs FAT JARS
→ Un compromis Production - Équipes de développement
25
27. Adresser sur ce sujet
dès la conception !
Ne pas attendre la mise en production :)
Exposer via des endpoints REST l’état de votre système
Faire attention aux FRAMEWORKS utilisés
27
33. Étapes à intégrer
dans votre chaîne
✓ Tests unitaires + intégration
✓ Création d’image Docker automatique
✓ “Smoke tests” de l’image crée
✓ Déploiement continu de la branche develop
✓ Déploiement de vos charts HELM (linter?)
✓ Déploiement d’une release
✓ ... 33
48. Flux de sortie des
containers Docker
stdout & stderr
Inutile de configurer la sortie vers des fichiers
48
49. Bonnes pratiques
Indiquer dans vos LOGS:
Les éléments de votre conteneur (Image, containerID,...)
Les éléments de contexte K8S (IP POD, ID POD,
namespace,...)
Log4j Docker Support – Log4j Kubernetes Support
49
50. Pour aller plus loin
Vous pouvez logger et tracer les appels à vos APIS:
Requête, ID de l’appelant, ID de corrélation,...
zalando/logbook: An extensible Java library for HTTP request and response
logging
50