J’ai rassemblé cette liste d’avantages que DevOps + Docker & Kubernetes peut vous apporter par rapport à l’approche DevOps traditionnelle.
L’approche traditionnelle de DevOps
- Dans l’approche DevOps traditionnelle, les développeurs écrivent du code et le déposent dans un dépôt git.
- Ils vérifient ensuite comment il fonctionne localement et dans un environnement de développement.
- Ils lancent un processus de construction du code à l’aide d’un outil de CI, par exemple Jenkins, qui exécute également des tests fonctionnels pendant la construction. Si les tests sont réussis, les modifications sont fusionnées dans une branche de publication.
- Les tests sont traités sur scène-environnement et à la fin du sprint, la version est publiée. Les administrateurs système préparent les scripts pour le déploiement des applications en production, à l’aide d’Ansible, Puppet ou Chef.
- Enfin, les administrateurs système déploient les changements en production, c’est-à-dire qu’ils mettent à jour la version.
Les problèmes de l’approche traditionnelle
- Le premier problème est que les administrateurs système et les développeurs utilisent des outils différents. Par exemple, la majorité des développeurs ne savent pas comment travailler avec Ansible, Puppet ou Chef. Le résultat courant de cette situation est que la tâche de préparer la mise en production retombe sur les épaules des administrateurs système. Or, les administrateurs système ne comprennent souvent pas comment une application doit fonctionner, car ce sont les développeurs qui ont l’expertise dans ce domaine.
- Le deuxième problème est que les environnements de développement sont généralement mis à jour manuellement sans aucune automatisation. Par conséquent, ils sont très instables et tombent constamment en panne. Les modifications apportées par un développeur cassent les modifications apportées par un autre développeur. La recherche des problèmes prend généralement beaucoup de temps. Enfin, les délais de mise sur le marché sont très longs.
- Le troisième problème est que les environnements de développement peuvent être très différents des environnements de développement et de production. De plus, le staging peut ne pas être du tout similaire à la production. Cela entraîne de nombreuses difficultés. Par exemple, une version préparée par les développeurs peut ne pas fonctionner correctement dans l’environnement de test. Même si les tests sont passés avec succès dans l’environnement de test, certains problèmes peuvent apparaître de manière inattendue dans la production. Parallèlement, le processus de retour en arrière d’une version cassée de la production est très problématique et pas trivial, même en utilisant Ansible, Puppet ou Chef.
- Le quatrième problème est que l’écriture de manifestes Ansible est longue et difficile. Il est très facile de perdre la trace des modifications apportées aux manifestes, en mettant à jour une application de version en version. Cela peut entraîner un nombre élevé d’erreurs.
Amélioration de l’approche DevOps avec Docker
- Le principal avantage de cette approche est que les développeurs et les administrateurs système utilisent le même outil – Docker.
- Les développeurs créent des images docker à partir de fichiers docker à un stade de développement. Ils les fabriquent sur des ordinateurs locaux et les exécutent sur un environnement de développement.
- Les mêmes images Docker sont utilisées par les administrateurs système qui effectuent des mises à jour des environnements de stage et de production à l’aide de Docker. Il est très important que les conteneurs Docker ne soient pas patchés lors de la mise à jour vers une nouvelle version d’un logiciel. Cela signifie qu’une nouvelle version de votre logiciel est représentée par une nouvelle image Docker et une nouvelle copie du conteneur Docker, mais pas par un patch de l’ancien conteneur Docker.
- Ainsi, vous pouvez créer des environnements immuables pour le développement, le stockage et la production. Vous pouvez bénéficier de plusieurs avantages en utilisant cette approche. Tout d’abord, il existe un niveau élevé de contrôle de toutes les modifications, car les modifications sont effectuées à l’aide d’images et de conteneurs Docker immuables. Vous pouvez revenir à la version précédente à tout moment. Les environnements de développement, de mise en place et de production deviennent plus similaires les uns aux autres que dans le cas de l’utilisation d’Ansible. En utilisant Docker, vous pouvez garantir que si la fonctionnalité fonctionne dans l’environnement de développement, elle fonctionnera également dans les environnements de développement et de production.
Comment obtenir des superpouvoirs DevOps avec Kubernetes et Docker
- Le processus de création de la topologie d’une application, contenant plusieurs composants interconnectés, devient beaucoup plus facile et compréhensible par rapport à Docker.
- Le processus de configuration de l’équilibrage des charges est grandement simplifié grâce aux concepts intégrés de service et d’entrée.
- Grâce aux fonctions intégrées de Kubernetes Deployments, StatefulSets et ReplicaSets, le processus de mise à jour continue ou de déploiement vert/bleu devient très facile.
- Vous pouvez faire du CI/CD en utilisant Helm, ce qui est plus confortable qu’avec les conteneurs Docker pour ces raisons :
- Les diagrammes Helm sont plus stables et prêts pour la production que les images Docker individuelles. Vous avez très probablement été confronté à un problème lorsque vous avez essayé d’interconnecter différents conteneurs Docker dans une topologie commune, mais vous avez échoué parce que ces images n’étaient pas prêtes pour ce type d’interconnexion.
- Il vous fournit un langage de modèles de haut niveau et un concept de versions d’applications qui peuvent être annulées si nécessaire.
- De plus, vous pouvez utiliser les graphiques Helm existants comme dépendances pour vos propres graphiques, ce qui vous permet d’avoir des topologies complexes en utilisant des blocs de construction tiers.
- Kubernetes prend en charge un scénario de déploiement prêt à l’emploi sur plusieurs sitescloud (AWS, Google, Hidora ou un autre fournisseur d’hébergement) par le biais d’outils de fédération ou de maillage de services.
Avez-vous simplifié vos processus DevOps en utilisant Docker et Kubernetes? Partagez votre expérience !