Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Introduction à Kubernetes

Par Jean-Sébastien AVRILA Publié le 12/09/2016 à 21:22:25 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Introduction

Bien qu'existant depuis les années 2000, à partir de 2013, et grâce au progiciel Docker, les conteneurs se sont démocratisés auprès des développeurs afin de tester leurs applications rapidement. Leur utilisation s'est également répandue dans les environnements de production des entreprises.

Rappelons qu'un conteneur s'exécute sur une machine hôte, et contrairement à une machine virtuelle, ne nécessite aucune ressource supplémentaire, pas même un système d'exploitation supplémentaire au dessus de la machine hôte dans certain cas. Un conteneur s'appuie sur les fonctionnalités de virtualisation du noyau Linux de l'hôte, en utilisant l'isolation des ressources et les espaces de noms. Cela permet de déployer des applications ou services bien plus rapidement que sur une machine virtuelle dédiée, tout en restant isolé de la machine hôte.

Déployer un unique conteneur par service en production ne suffit pas, et c'est là que Kubernetes intervient. Kubernetes, projet open-source maintenu par Google, est un orchestrateur de conteneurs. Grâce à Kubernetes, il est possible de déployer des conteneurs en haute disponibilité et sur plusieurs noeuds.

Dans cet article nous analyserons:

  • L'architecture de Kubernetes

  • Les fonctionnalités de Kubernetes

  • L'intégration aux pratiques DevOps et ITOps

Architecture de Kubernetes

Un cluster géré par Kubernetes se compose de 2 types de serveurs: Les serveurs maitres chargés de contrôler le cluster, et les noeuds qui exécutent les conteneurs.

Kubernetes 1.3 supporte jusqu'a 2000 noeuds, et 3000 noeuds sur GCP. Bien sûr, il est possible d'ajouter des serveurs maîtres au cluster. Pour fournir toutes les fonctionnalités telles que le réseau, le monitoring des noeuds et des conteneurs ou encore la gestion des logs, Kubernetes se décompose en plusieurs services.

Sur un serveur maître, nous trouverons les services suivants:

  • kube-apiserver qui est scalable horizontalement, se charge d'exposer les apis de Kubernetes a l'extérieur du cluster. C'est le front-end des interfaces de configuration de Kubernetes.

  • etcd stocke les fichiers de configurations du cluster, comme le répertoire /etc sur Linux. Et comme pour les fichiers de configuration dans /etc, une bonne pratique consiste à avoir un backup des fichiers gérés par etcd. Ceci permettra de remettre en route plus rapidement un cluster après incident majeur.

  • kube-controller-manager exécute plusieurs controlleurs chargés de vérifier: l'état des noeuds, le bon nombre de replicas de pods dans le cluster, lier les services aux pods ou encore gérer les droits d'accès aux différents espaces de noms utilisés dans le cluster.

  • kube-scheduler s'occupe d'assigner un noeud ou plusieurs à un pod fraichement créé.

  • DNS intégré a Kubernetes. Les conteneurs utilisent ce service dès leur création.

  • Container Resource Monitoring permettant de centraliser les données métriques envoyées par les conteneurs, puis de les afficher sous forme de graphes.

  • Cluster-level logging gère les logs retournés par les conteneurs dans le but de surveiller le comportement des applications et microservices en cours.

Sur un noeud, les services sont:

  • kubelet veille aux bon fonctionnement du noeud sur lequel il s'exécute et retourne ces informations aux serveurs maître.

  • kube-proxy gère le traffic réseau et les règles définies.

  • Docker exécute les conteneurs.

  • fluentd se charge de transférer les logs vers les serveurs maîtres.

Fonctionnalités

Performance: Parmi les nombreuses fonctionnalités qu'apporte Kubernetes, nous pouvons déja noter le gain de performance. Les conteneurs Docker démarrent en quelques secondes sur des larges clusters et son plus performants que des VMs. Rappelons qu'un conteneur n'a pas à gérer toutes les ressources sur lequel s'appuie un système d'exploitation. Le conteneur n'exécute que le stricte nécessaire, d'où sa rapidité, de plus cela réduit considérablement la surface d'exécution de code malveillant. Il est désormais évitable de configurer des VMs nécessitant plusieurs minutes. Kubernetes gère aussi l'auto-scaling afin d'adapter le nombre de réplications des conteneurs en fonction de la charge CPU, bande-passante, latence ...

Code portatif: Kubernetes s'installe sur des machines physique/virtuelles, des instances sur AWS, GCP, Azure ou encore OpenStack. Il est également possible d'utiliser la solution Google Container Engine où la maintenance du cluster est gérée par Google. Tout ceci permet de rendre vos applications portatives en créant l'application une fois, mais en pouvant l'exécuter partout où Kubernetes est installé. Il est alors plus facile de migrer une application vers un autre fournisseur de services.

Architecture microservices: En plus du code portatif, il devient maintenant possible de découper une application en microservices. Cela consiste a séparer son application en plusieurs modules indépendants. Kubernetes supportant également le versionning d'application, il est désormais facile de mettre à jour un module applicatif sans en affecter les autres, en empaquetant dans le conteneur uniquement les librairies et fichiers sources nécessaires. Tout ceci permet aux ingénieurs logiciels de se focaliser sur les fonctionnalités logiciel, en réduisant toujours plus la durée des cycles de mise à jour, une instauration des pratiques DevOps est désormais envisageable.

Intégration DevOps et ITOps

Les entreprises souhaitent répondre rapidement à la demande du client, pour les développeurs, cela signifie déploiement en continue. Pour satisfaire ce besoin, Kubernetes peut être utilisé avec des outils d'intégration en continue tel que Jenkins ou Deis. En collaborant et en communiquant avec les différents services de l'entreprise, les développeurs sont à même de tester rapidement des nouvelles fonctionnalités. L'utilisation des labels ou encore d'espaces de noms dans Kubernetes permet de séparer environnement de production et environnement de test. Si les tests s'avèrent concluants, un développeur pourra par exemple déployer les conteneurs à partir de l'image en test, mais cette fois çi en utilisant un espace de nom en production, et ce en quelques secondes. L'entreprise est alors capable de réduire la durée de mise en marché auprès des clients. Des cycles continuels sont créés et ajustés grâce aux méthodes agiles.

Confier aux développeurs la possibilité de déployer des conteneurs en production ne se fait pas sans avoir abordé l'aspect sécurité. En effet, les administrateurs systèmes doivent impérativement former les développeurs sur cet aspect. Les développeurs doivent veiller a l'étanchéité de leurs codes sources, plus encore lorsque les conteneurs sont exposés a internet (ex: conteneur nginx, redis ...), ou ceux qui accèdent à des ressources hors du cluster Kubernetes (ex: base de données, annuaire, stockage objet ...).

Kubernetes ne se contente pas d'accélérer la production des développeurs, les administrateurs systèmes aussi en profitent. Ces derniers peuvent déployer à grande échelle des services de messagerie comme RabbitMQ ou ActiveMQ, sans avoir à effectuer une installation complète comme sur des instances classiques. Ils ont aussi la possibilité de déployer des micro-conteneurs exécutant des scripts bash ou python, pour récupérer des données métriques par exemple. Des addons sont égalements disponibles pour les services masters de Kubernetes via le dépôt Github de Kubernetes, comme celui d'elasticsearch.

Conclusion

Tout au long de cet article, nous avons démontré à quel point Kubernetes peut accélérer le déploiement en production de différents services. Kubernetes apporte une mobilité et une rapidité d'adaptation impossible à atteindre en utilisant des machines virtuelles et/ou instances. Du développement jusqu'à la livraison auprès du client, les entreprises peuvent désormais aligner leurs systèmes d'informations avec les tendances du marché. L'utilisation de Docker et Kubernetes réduit la surface d'attaque informatique en isolant totalement les ressources de calculs. Actuellement, beaucoup d'entreprises pensent à utiliser des conteneurs. C'est une technologie utilisée majoritairement dans les grandes entreprises, mais qui tend, dans, le futur à se démocratiser dans tout les systèmes d'informations.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels