Pourquoi devriez-vous commencer à utiliser Kubernetes ?

...

Kubernetes vous permet de déployer des applications natives en cloud n'importe où et de les gérer exactement comme vous le souhaitez partout...


Comme la plupart des développeurs de logiciels modernes peuvent l'attester, les conteneurs nous ont offert une flexibilité considérablement accrue pour l'exécution d'applications natives de clous sur une infrastructure physique et virtuelle. Les conteneurs regroupent les services d'une application et les rendent portables dans différents environnements de calcul, tant pour le développement/test que pour la production. Avec les conteneurs, il est facile de faire évoluer rapidement les instances d'application pour répondre aux pics de demande. Et comme les conteneurs utilisent les ressources du système d'exploitation hôte, ils sont beaucoup plus légers que les machines virtuelles. Cela signifie que les conteneurs utilisent très efficacement l'infrastructure de serveur sous-jacente. Jusqu'ici, tout va bien. Mais si les API d'exécution des conteneurs sont bien adaptées à la gestion des conteneurs individuels, elles sont terriblement inadéquates lorsqu'il s'agit de gérer des applications qui peuvent comprendre des centaines de conteneurs répartis sur plusieurs hôtes. Les conteneurs doivent être gérés et connectés au monde extérieur pour des tâches telles que la planification, l'équilibrage de charge et la distribution, et c'est là qu'un outil d'orchestration de conteneurs comme Kubernetes prend tout son sens. Système open source pour le déploiement, la mise à l'échelle et la gestion d'applications conteneurisées, Kubernetes se charge de la programmation des conteneurs sur un cluster de calcul et gère les charges de travail pour s'assurer qu'elles fonctionnent comme l'utilisateur l'a prévu. Au lieu d'intégrer les opérations après coup, Kubernetes rapproche le développement logiciel et les opérations par conception. En utilisant des constructions déclaratives et indépendantes de l'infrastructure pour décrire la manière dont les applications sont composées, interagissent et sont gérées, Kubernetes permet d'augmenter d'un ordre de grandeur l'opérabilité des systèmes logiciels modernes. Kubernetes a été conçu par Google sur la base de sa propre expérience de l'utilisation de conteneurs en production, et son succès est certainement dû en grande partie à l'implication de Google. Google compte certains des développeurs de logiciels les plus talentueux de la planète et gère certains des services logiciels les plus importants en termes d'échelle. Cette combinaison a permis à Kubernetes de devenir une plateforme solide comme le roc, capable de répondre aux besoins de mise à l'échelle de pratiquement toutes les organisations. Cet article explique pourquoi Kubernetes est important et pourquoi il marque une avancée significative pour les équipes devops.


Un cadre d'infrastructure pour aujourd'hui


De nos jours, les développeurs sont appelés à écrire des applications qui s'exécutent dans plusieurs environnements d'exploitation, notamment des serveurs dédiés sur site, des clouds privés virtualisés et des clouds publics tels que AWS et Azure. Traditionnellement, les applications et les outils qui les prennent en charge sont étroitement liés à l'infrastructure sous-jacente, de sorte qu'il était coûteux d'utiliser d'autres modèles de déploiement malgré leurs avantages potentiels. Cela signifiait que les applications devenaient dépendantes d'un environnement particulier à plusieurs égards, notamment les problèmes de performance liés à une architecture réseau spécifique, l'adhésion à des constructions spécifiques au fournisseur de cloud, telles que des techniques d'orchestration propriétaires, et les dépendances à un système de stockage back-end particulier. Le PaaS tente de contourner ces problèmes, mais souvent au prix de l'imposition d'exigences strictes dans des domaines tels que les langages de programmation et les cadres d'application. Ainsi, le PaaS est inaccessible pour de nombreuses équipes de développement. Kubernetes élimine le verrouillage de l'infrastructure en fournissant des capacités de base pour les conteneurs sans imposer de restrictions. Il y parvient grâce à une combinaison de fonctionnalités au sein de la plateforme Kubernetes, notamment les pods et les services.


Une meilleure gestion grâce à la modularité


Les conteneurs permettent de décomposer les applications en parties plus petites avec une séparation claire des préoccupations. La couche d'abstraction fournie pour une image de conteneur individuelle nous permet de repenser fondamentalement la façon dont les applications distribuées sont construites. Cette approche modulaire permet un développement plus rapide par des équipes plus petites et plus ciblées, chacune étant responsable de conteneurs spécifiques. Elle nous permet également d'isoler les dépendances et de faire un usage plus large de composants plus petits et bien réglés. Mais les conteneurs ne suffisent pas pour atteindre cet objectif ; il faut un système pour intégrer et orchestrer ces éléments modulaires. Kubernetes y parvient en partie à l'aide de pods - généralement une collection de conteneurs qui sont contrôlés comme une seule application. Les conteneurs partagent des ressources, telles que les systèmes de fichiers, les espaces de noms du noyau et une adresse IP. En permettant aux conteneurs d'être colocalisés de cette manière, Kubernetes élimine la tentation d'entasser trop de fonctionnalités dans une seule image de conteneur. Le concept de service dans Kubernetes est utilisé pour regrouper une collection de pods qui remplissent une fonction similaire. Les services peuvent être facilement configurés pour la découverte, l'observabilité, la mise à l'échelle horizontale et l'équilibrage des charges.


Déploiement et mise à jour de logiciels à grande échelle


Devops est apparu comme une méthode permettant d'accélérer le processus de création, de test et de diffusion des logiciels. Son corollaire a été le passage de la gestion de l'infrastructure à la gestion du déploiement et de la mise à jour des logiciels à l'échelle. La plupart des cadres d'infrastructure ne prennent pas en charge ce modèle, mais Kubernetes le fait, en partie grâce aux contrôleurs Kubernetes. Grâce aux contrôleurs, il est facile d'utiliser l'infrastructure pour gérer le cycle de vie des applications. Le contrôleur de déploiement simplifie un certain nombre de tâches de gestion complexes. Par exemple : L'évolutivité. Les logiciels peuvent être déployés pour la première fois en mode scale-out à travers les Pods, et les déploiements peuvent être mis à l'échelle à tout moment. Visibilité. Identifiez les déploiements terminés, en cours et défaillants grâce aux fonctions d'interrogation de l'état. Gain de temps. Interrompez un déploiement à tout moment et reprenez-le ultérieurement. Contrôle de version. Mettez à jour les pods déployés en utilisant des versions plus récentes des images d'application et revenez à un déploiement antérieur si la version actuelle n'est pas stable. Parmi d'autres possibilités, Kubernetes simplifie quelques opérations de déploiement spécifiques qui sont particulièrement précieuses pour les développeurs d'applications modernes. Il s'agit notamment des opérations suivantes : L'autoscaling horizontal. Les autoscalers Kubernetes dimensionnent automatiquement le nombre de pods d'un déploiement en fonction de l'utilisation des ressources spécifiées (dans des limites définies). Mises à jour permanentes. Les mises à jour d'un déploiement Kubernetes sont orchestrées de façon continue, sur l'ensemble des pods du déploiement. Ces mises à jour sont orchestrées tout en travaillant avec des limites prédéfinies facultatives sur le nombre de pods qui peuvent être indisponibles et le nombre de pods de réserve qui peuvent exister temporairement. Déploiements canariens. Un modèle utile lors du déploiement d'une nouvelle version d'un déploiement est de tester d'abord le nouveau déploiement en production, en parallèle avec la version précédente, et de faire évoluer le nouveau déploiement tout en réduisant simultanément le déploiement précédent. Contrairement aux offres PaaS traditionnelles tout compris, Kubernetes offre une grande latitude pour les types d'applications prises en charge. Il n'impose pas de frameworks d'application (comme Wildfly), ne restreint pas les runtimes de langage pris en charge (Java, Python, Ruby), ne s'adresse pas uniquement aux applications à 12 facteurs et ne distingue pas les "apps" des "services". Kubernetes prend en charge une grande variété de charges de travail, notamment les charges de travail sans état, avec état et de traitement des données. Si une application peut fonctionner dans un conteneur, elle devrait bien fonctionner sur Kubernetes.


Poser les bases des applications natives en cloud


Il n'est pas surprenant, vu l'intérêt porté aux conteneurs, que d'autres outils de gestion et d'orchestration aient vu le jour. Parmi les alternatives populaires, citons Apache Mesos avec Marathon, Docker Swarm, AWS EC2 Container Service (ECS) et Nomad de HashiCorp. Chacune a ses mérites. Docker Swarm est étroitement lié au runtime Docker, ce qui permet aux utilisateurs de passer facilement de Docker à Swarm ; Mesos avec Marathon n'est pas limité aux conteneurs, mais peut déployer tout type d'application ; AWS ECS est plus facile d'accès pour les utilisateurs actuels d'AWS. Cependant, les clusters Kubernetes peuvent fonctionner sur EC2 et s'intégrer à des services tels que Amazon Elastic Block Storage, Elastic Load Balancing, Auto Scaling Groups, etc. Ces frameworks commencent à se dupliquer les uns les autres en termes de caractéristiques et de fonctionnalités, mais Kubernetes reste immensément populaire en raison de son architecture, de son innovation et de la grande communauté open source qui l'entoure. Kubernetes marque une avancée pour devops, car il permet aux équipes de suivre le rythme des exigences du développement de logiciels modernes. En l'absence de Kubernetes, les équipes ont souvent été contraintes d'écrire leurs propres flux de déploiement, de mise à l'échelle et de mise à jour des logiciels. Certaines organisations emploient de grandes équipes pour gérer ces tâches seules. Kubernetes nous permet de tirer un maximum d'utilité des conteneurs et de créer des applications natives du cloud qui peuvent s'exécuter n'importe où, indépendamment des exigences spécifiques au cloud. Il s'agit clairement du modèle efficace de développement et d'exploitation d'applications que nous attendions.