Pourquoi devriez-vous utiliser Kubernetes pour vos environnements de développement
Kubernetes est devenu l’un des moyens les plus populaires d’exécuter des charges de travail conteneurisées en production. Il simplifie le déploiement, la mise à l’échelle et la maintenance des conteneurs qui exécutent votre service.
Kubernetes a sans doute eu moins d’impact dans le domaine du développement local. Il est courant pour les développeurs de créer et de tester de nouveaux services à l’aide de conteneurs Docker simples, éventuellement organisés en piles avec Docker Compose. L’exécution d’un cluster Kubernetes local est souvent considérée comme une couche supplémentaire de complexité et de frais généraux.
Dans cet article, nous allons explorer certaines des raisons pour lesquelles vous devriez utiliser Kubernetes pour le développement local, ainsi que dans vos environnements de préproduction et de production. Nous examinerons également certains des outils que vous pouvez utiliser pour mettre en œuvre un workflow de développement Kubernetes local.
Sommaire
Qu’est-ce qui fait un bon environnement de développement ?
Des environnements de développement locaux efficaces doivent imiter étroitement l’infrastructure de production tout en offrant une boucle de rétroaction étroite qui permet une itération rapide. Ces deux objectifs se situent aux extrémités opposées d’un spectre. Ils doivent être équilibrés pour atteindre un débit maximal.
D’une part, l’optimisation pour une réplication maximale de la production vous donnera les meilleures chances d’éliminer les bogues spécifiques à l’environnement. Cependant, le déploiement sur une véritable infrastructure de type production peut être un processus chronophage qui nécessite l’exécution d’un pipeline CI et le provisionnement de nouvelles ressources cloud. Attendre que ces procédures soient terminées après chaque changement ralentirait le développement.
À l’inverse, se concentrer uniquement sur la vitesse d’itération peut entraîner une déviation du développement par rapport au fonctionnement de la production. Cela peut amener les utilisateurs à rencontrer des problèmes que l’équipe d’ingénierie ne rencontre jamais.
Comment les clusters de développement Kubernetes aident
La conteneurisation est déjà une technologie puissante pour équilibrer la similarité de l’environnement de production avec la facilité d’itération. L’exécution de conteneurs en développement et en production garantit que l’environnement de l’application et son système de fichiers sont cohérents à chaque déploiement.
L’utilisation de Kubernetes en production ajoute une nouvelle technologie à votre pile. Il apporte ses propres concepts, meilleures pratiques et incompatibilités potentielles. Bien que les conteneurs individuels restent les mêmes, vous disposez d’une couche supplémentaire qui gère le trafic entrant, la mise en réseau entre les services et les problèmes périphériques tels que la configuration et le stockage.
L’exécution de votre environnement de développement dans Kubernetes vous permet de reproduire ces différences lors de la création de votre solution. Un cluster s’exécutant sur votre machine locale ne répliquera peut-être pas exactement votre infrastructure de production, mais ce sera une correspondance plus proche. Cela rend les tests plus réalistes, réduisant le nombre d’angles morts.
Raccourcir le cycle de rétroaction
Kubernetes en développement raccourcit le cycle de retour d’itération. C’est l’un des aspects d’une bonne expérience de développement décrite ci-dessus.
Vous serez mieux en mesure de répliquer les rapports de problèmes des utilisateurs lorsque votre environnement de test exécute les mêmes technologies que la production. Cela signifie que vous pouvez expérimenter, itérer et déboguer sans déployer dans un environnement en direct chaque fois que vous apportez une modification.
Les effets de chaque révision peuvent être rapidement observés dans votre cluster Kubernetes local, permettant un meilleur débit. Les développeurs peuvent rapidement tester des théories et évaluer de nouvelles solutions, même si le problème réside dans quelque chose de spécifique à Kubernetes, comme les connexions entre services. Cela ne serait pas possible si Kubernetes était réservé à une utilisation en production.
Réduire l’écart avec les opérations
L’utilisation de Kubernetes comme outil de développement réduit l’écart entre l’ingénierie et les opérations. Les développeurs acquièrent une expérience directe des outils et des concepts que l’équipe d’exploitation utilise pour maintenir les charges de travail de production.
La connaissance de la situation dans son ensemble peut aider les développeurs à anticiper les problèmes de production. Ils acquerront également une compréhension des défis associés à l’exploitation du service. Si les opérateurs souffrent de journaux et de métriques incomplets ou difficiles à récupérer, les développeurs rencontreront désormais également le problème dans le cadre de leur propre travail.
Configuration d’un environnement Kubernetes local
Vous disposez de plusieurs options pour configurer un cluster Kubernetes à des fins de développement. Une approche consiste à créer un nouveau cluster dans votre environnement cloud existant. Cela offre la meilleure cohérence avec votre infrastructure de production. Cependant, cela peut réduire l’efficacité car vos opérations de développement s’exécuteront dans un environnement distant.
Les développeurs préfèrent souvent exécuter leur propre cluster localement pour une plus grande facilité d’utilisation. Des projets tels que Minikube et MicroK8s simplifient le déploiement de clusters Kubernetes sur votre propre matériel. Par exemple, vous pouvez démarrer un cluster MicroK8s à partir de son package Snap en exécutant une seule commande :
$ sudo snap install microk8s --classic
Une fois MicroK8s démarré, vous pouvez interagir avec votre cluster en utilisant la version groupée de Kubectl :
$ sudo microk8s kubectl apply -f my-pod.yaml
Vous constaterez peut-être que Kubernetes est déjà disponible au sein de votre plateforme de conteneurisation. Docker Desktop pour Windows et Mac inclut un cluster Kubernetes intégré que vous pouvez activer dans les paramètres de l’application. Rancher Desktop est un autre utilitaire qui combine la gestion des conteneurs simples avec un cluster Kubernetes intégré.
Quelle que soit la solution que vous utilisez, vous devez configurer votre cluster afin qu’il corresponde le plus possible à votre environnement de production. Utilisez systématiquement la même version de Kubernetes pour éviter les incompatibilités inattendues et les versions d’API incompatibles.
Les limites
Les environnements de développement différeront toujours de la production à certains égards. C’est bien tant que les divergences sont reconnues et comprises.
Lorsque vous exécutez Kubernetes dans tous vos environnements, vous êtes plus susceptible de rencontrer ces limitations :
- Ressources limitées – La plupart des clusters de développement s’exécuteront localement, sur une seule machine. Un cluster de production peut s’étendre sur des dizaines de nœuds et prendre en charge des centaines ou des milliers de pods. Cela peut rendre difficile l’évaluation précise de l’évolution de votre application.
- Différences de configuration – Lorsque chaque développeur provisionne son propre cluster, il peut modifier les paramètres qui le font se comporter différemment des autres environnements. Il est important de standardiser sur une seule distribution – telle que Minikube ou MicroK8s – et une version spécifique de Kubernetes pour éviter ces problèmes.
- Différences entre les fournisseurs – Les déploiements locaux de Kubernetes tels que Minikube et MicroK8 présentent certaines différences inhérentes par rapport aux clusters cloud déployés par des fournisseurs tels qu’Amazon EKS, Azure AKS et Google GKE. Les intégrations de stockage et de mise en réseau fonctionnent toutes différemment selon les fournisseurs, il est donc toujours possible que des incompatibilités se glissent.
- Complexité et courbe d’apprentissage – L’utilisation de Kubernetes dans le développement ajoute une complexité inévitable. Bien que nous ayons montré les avantages de l’approche, il est important de reconnaître également la charge imposée aux développeurs – en particulier les nouveaux venus dans une équipe – lorsqu’ils doivent apprendre Kubernetes et se tenir au courant de sa cadence de publication régulière.
La plupart des problèmes ci-dessus peuvent être résolus en fournissant un cluster de développement interne géré de manière centralisée par un administrateur DevOps. Vous pouvez utiliser les espaces de noms Kubernetes et les contrôles RBAC pour configurer des zones isolées dans lesquelles chaque développeur peut travailler. Bien que cela garantisse la standardisation de la distribution, de la version et de la disponibilité des ressources Kubernetes, cela peut réduire l’autonomie des développeurs car ils ne sont plus propriétaires de leur cluster. Cela peut également créer des goulots d’étranglement lorsque de nombreux ingénieurs attendent que de nouvelles modifications soient déployées à l’intérieur du cluster partagé.
Conclusion
L’utilisation de Kubernetes dans le développement vous permet de tester des logiciels dans un environnement équivalent à la mise en scène et à la production. Cela peut vous aider à détecter les problèmes plus tôt, avant qu’ils ne soient détectés par vos utilisateurs. L’adoption de Kubernetes comme outil de développement permet également aux ingénieurs de se familiariser avec la manière dont votre application est déployée en production.
Passer à Kubernetes peut sembler intimidant. Une bonne compréhension des principes fondamentaux des conteneurs vous aidera à comprendre ce que Kubernetes ajoute et comment cela fonctionne. Il existe maintenant plusieurs bonnes options pour déployer un cluster Kubernetes local sur un poste de travail de développement. L’utilisation de ce type de solution signifie que vous n’avez pas besoin d’attendre que les déploiements de test soient déployés sur une infrastructure distante.
Les outils qui améliorent la cohérence tout au long du processus de développement logiciel profitent à toutes les personnes impliquées. Nous l’avons déjà vu dans les fondements du mouvement des conteneurs et l’adoption généralisée de Docker. L’exécution d’un cluster Kubernetes local vous permet de vous développer plus près de la production, de raccourcir les cycles de rétroaction et d’améliorer la collaboration entre les équipes.