Votre organisation a décidé d’adopter une plateforme Cloud ? C’est l’occasion rêvée pour envisager un move to cloud global du système d’information. Parmi les stratégies des 7 R (rehost, relocate, replatform, refactor, repurchase, retire, retain), la priorité a été donnée au replatforming avec Kubernetes.
Depuis une décennie, Kubernetes est la solution phare pour orchestrer les conteneurs, abstraire les fournisseurs cloud et moderniser les infrastructures. Son adoption massive dans l’écosystème DevOps en fait une compétence incontournable. Il suffit d’échanger avec quelques ingénieurs DevOps : la conteneurisation et l’orchestration sont devenues des prérequis.
Mais faire tourner une application legacy sur Kubernetes est-il vraiment si simple ? Quelles sont les contraintes techniques à anticiper ? Cet article explore les défis liés à la conteneurisation et vous aide à identifier les applications qui poseront problème.
Créer une image de conteneur est une opération accessible. Grâce à un fichier Dockerfile
ou à des commandes Podman, vous embarquez binaires, dépendances et métadonnées dans une image exécutable. Vous pouvez ensuite faire tourner vos conteneurs via Docker, Docker Compose, ou Podman.
L'intérêt principal réside dans :
systemd
pour l’automatisation des redémarrages.Vous avez conteneurisé votre application legacy ! Facile si la liste des dépendances est claire. Fastidieux en l’absence de documentation avec source de vérité, une machine virtuelle installée manuellement il y a plus de 5 ans…
Quand il s’agit de passer en production sur des dizaines de nœuds, l’enjeu devient l’orchestration des conteneurs à grande échelle. Kubernetes ne se contente pas d’exécuter des conteneurs. Il les gère, surveille, redémarre, met à l’échelle, et les replanifie en fonction de l’état du cluster. Cette puissance s’accompagne d’une contrainte majeure : l’éphémérité des pods… le fameux pet versus cattle ou encore Everything fails all the time de Werner Vogels. Auparavant, vous aviez une couche de virtualisation très avancée qui permettait de garantir la disponibilité d’une machine virtuelle. Vous pouviez effectuer une live migration pour déplacer une VM entre nœuds physiques, ou encore vous appuyer sur les mécanismes de haute disponibilité sous-jacents.
Avec Kubernetes :
Votre application est-elle prête pour ce changement de paradigme ? Voici les points à maîtriser.
Les images trop volumineuses sont à proscrire :
Quelques repères :
Cet article complet illustre de manière claire les différentes stratégies que vous pouvez mettre en œuvre : des images distroless, aux outils de minification, en passant par le build multi stage.
Un démarrage rapide est essentiel en environnement cloud-native :
Kubernetes arrive avec une promesse de mutualisation des nœuds d’exécution. Pour cela, les valeurs requests
et limits
guident le scheduler Kubernetes. Déterminer le bon paramétrage peut se heurter aux cas suivants :
🎯 Solution :
Le principe de Kubernetes : stateless by design.
Mais dans le monde legacy, on retrouve :
🎯 Solution :
Pour qu’une application soit réellement compatible Kubernetes, elle doit :
Les applications legacy ne remplissent généralement pas tous ces critères. Le passage de la VM au pod nécessite un effort d’ingénierie.
Mais ce travail est aussi une opportunité de modernisation progressive du SI.
Kubernetes se destine avant tout aux applications dites cloud native. L’acceptation d'arrêt de pod est sans doute le principe le plus emblématique du cloud native. Il en découle que les caractéristiques des applications compatibles Kubernetes sont :
La conteneurisation d’applications legacy sur Kubernetes est faisable, mais implique un changement de paradigme fort. De l’image Docker à la gestion de l’état, en passant par l’allocation des ressources, chaque point demande une attention particulière. Au-delà des contraintes liées aux démarrages des pods que nous avons abordées, la question des logs et de l’observabilité impose des modifications spécifiques.
Toutefois, Kubernetes peut également servir de base solide pour faire tourner des applications legacy, avec en dernier recours l’isolation des workloads sur des nœuds dédiés. Cela ouvre la voie à une modernisation progressive du SI sans devoir tout refactoriser dès le départ.
Enfin, pour faciliter l’adoption de Kubernetes et réduire la complexité des migrations, les Platform Engineering teams jouent un rôle clé. En intégrant des pratiques comme l'automatisation des déploiements, la gestion des pipelines CI/CD et l'intégration continue, elles permettront de rendre l’adoption de Kubernetes plus simple et plus fluide pour les équipes de développement et d’exploitation.