Que signifie être « cloud-native » ?
d'accroître leur agilité, leur évolutivité et leur efficacité. Mais qu’est-ce qu’une architecture cloud native ?
En quelques mots, le concept de « cloud native » implique un nouveau degré d’abstraction logicielle. Celui-ci s'associe à un ensemble de technologies, d’outils et de processus dédiés qui transforment la façon dont les applications peuvent être élaborées, déployées et gérées.
Une application cloud native présente les caractéristiques principales suivantes :
- Son code est empaqueté sous forme de conteneurs.
- L’architecture cloud native se présente sous la forme de collections de microservices.
- Les développeurs et les responsables des opérations informatiques œuvrent de concert dans une structure agile étroitement intégrée.
- Son déploiement et sa gestion sont effectués à travers une infrastructure cloud flexible.
- L'allocation des ressources d'infrastructure est automatisée et basée sur des politiques spécifiques.
Architecture cloud native et application : quels avantages pour les entreprises ?
Les entreprises qui se lancent dans des transitions cloud native adoptent les conteneurs et Kubernetes, mais ce n’est pas tout ! En effet, une variété de technologies open source et commerciales issues d’un vaste écosystème cloud-native font également partie du programme.
Les conteneurs et les technologies cloud native (application, architecture) permettent aux entreprises d’accélérer le développement d’applications, mais aussi :
- de les mettre à niveau sans interruption,
- de les faire évoluer efficacement et de les porter facilement dans différents environnements.
Ces capacités bénéficient à l'entreprise, en renforçant son agilité et en lui apportant un avantage concurrentiel.
Les conteneurs cloud native résolvent certains problèmes critiques pour les entreprises. Ceux-ci fournissent des progiciels fiables et utilisables partout pour les développeurs, les mises à niveau de services, l'évolutivité, la disponibilité et l'efficacité des ressources, le tout dans une solution unique indépendante de tout fournisseur. Kubernetes fournit une couche d’infrastructure que le service informatique peut exploiter à grande échelle de manière programmatique et reproductible. Ce fonctionnement est finalement opposé à la gestion plus manuelle, bien souvent appliquée dans les entreprises.
Comme Kubernetes peut être déployé sur site et dans le cloud public, il fournit un modèle d’exploitation commun à tous les environnements. Tout cela fait de cette solution cloud native une plateforme idéale pour les entreprises opérant dans les deux environnements.
Architecture cloud-native
L'architecture cloud native s'appuie sur les conteneurs et Kubernetes pour créer des applications. Ces apps se composent d'éléments plus petits et composables qui garantissent
- une évolutivité efficace,
- des mises à niveau sans interruption,
- la possibilité de migrer facilement vers d'autres environnements.
Cette technologie cloud native est économique et offre une sécurité accrue, ainsi qu’une automatisation flexible.
La pile Kubernetes sur site
Nous examinerons en détail les différentes couches de la pile Kubernetes sur site, depuis l'infrastructure sur laquelle fonctionne la plateforme elle-même jusqu'aux services qui s'y rattachent et que les développeurs peuvent exploiter pour accélérer la mise en œuvre des applications. Il est à noter que certains composants peuvent être inclus dans plusieurs parties de la pile. Par exemple, une distribution Kubernetes peut inclure un registre de conteneurs tel que Harbor ou Quay. Par ailleurs, un registre de conteneurs peut être proposé comme un service hébergé ou managé pour être utilisé avec n'importe quelle distribution.
Cloud native application : la plateforme de calcul
Kubernetes peut être déployé dans des environnements très variés et l’innovation élargit le champ des possibilités quant à la manière et à l'emplacement où la solution cloud native peut être utilisée. En règle générale, Kubernetes nécessite un minimum de 3 nœuds avec une connectivité réseau complète entre eux et un stockage associé. Aujourd’hui, cette plateforme est le plus souvent exécuté sur une infrastructure virtuelle comme VMware. Le bare metal et le HCI constituent deux autres choix courants.
Des fonctionnalités supplémentaires peuvent simplifier le provisionnement et les opérations liées à un cluster Kubernetes. Une infrastructure contrôlée via une API (par exemple, Cluster API, Terraform, etc.) facilite le provisionnement et la connexion de nouveaux nœuds. Les hyperviseurs personnalisés peuvent offrir une isolation de la charge de travail afin de combler les failles de sécurité présentées par les conteneurs. Un équilibreur de charge extérieur au cluster Kubernetes est utile pour rendre les charges de travail disponibles, ainsi que pour les transférer et les mettre à l'échelle de manière dynamique. Certaines charges de travail peuvent bénéficier d'un matériel personnalisé tel que des GPU ou des TPU. En outre, si de nombreux clusters doivent être gérés en plusieurs endroits (par exemple, dans des magasins de détail), une fonctionnalité de gestion distribuée pour l'infrastructure sous-jacente peut s'avérer judicieuse.
Distributions Kubernetes
Depuis sa sortie en 2015, Kubernetes a connu une croissance fulgurante qui a vu la concrétisation de plus de 100 distributions et plateformes hébergées, allant des offres des géants de la technologie jusqu'aux solutions de startups. Ces entreprises combinent la base de code de Kubernetes avec d'autres projets, notamment des piles réseau, des outils de gestion de clusters, de journalisation et de monitoring, pour créer une distribution.
Architecture cloud native et services de conteneurs
Outre la solution en elle-même, un environnement Kubernetes efficace requiert des services d’infrastructure supplémentaires. Il arrive que ces derniers soient fournis avec les déploiements ou ajoutés en tant que services distincts et comprennent certaines fonctionnalités de base, comme :
- le registre de conteneurs,
- un Ingress,
- l'équilibreur de charge,
- les objets secrets,
- le gestionnaire de certificats,….
De plus en plus d'entreprises créent et déploient des applications cloud native sur notre environnement open-source. À ce titre, bon nombre des services de base dont elles dépendent sont désormais exécutés sur la plateforme. Il s'agit notamment :
- des bases de données (par ex., Redis, Postgres),
- Pub/Sub (Kafka),
- de l’indexation (ElasticSearch),
- des services CI/CD (Gitlab, Jenkins),
- du stockage (Portworx, MayaData, Minio, Red Hat).
De nombreuses entreprises ont développé des offres permettant de gérer ou de prendre en charge ces applications cloud native sur la distribution Kubernetes du choix du client. L'exemple le plus connu est peut-être celui des services de données Microsoft Azure Arc. Ils proposent Postgres et MS SQL en tant que services managés dans les environnements des clients, mais il en existe aussi beaucoup d'autres. Par exemple : Confluent pour Kafka, Crunchy Data pour Postgres, Redis Enterprise pour Redis, Percona, ElasticSearch, Minio, Mayadata, etc.
Le rôle des conteneurs dans un système cloud native
Les conteneurs constituent l’unité atomique des logiciels cloud native. Un conteneur comprend un morceau de code empaqueté avec toutes ses dépendances (binaires, bibliothèques, etc.) et est exécuté en tant que processus isolé. Il en résulte un nouveau niveau d'abstraction. À l'instar de la machine virtuelle (VM) qui extrait les ressources de calcul du matériel sous-jacent, un conteneur extrait une application du système d’exploitation (OS) sous-jacent.
Les conteneurs diffèrent des machines virtuelles de plusieurs manières notables. Leur empreinte est considérablement réduite en termes de ressources, et ils peuvent être créés plus rapidement et sont plus faciles à transférer d'un environnement cloud native à un autre. Contrairement aux VM, ils sont éphémères de nature.
Les conteneurs ouvrent la voie à l'architecture logicielle des micro-services, soit l’architecture cloud native. Alors que les applications traditionnelles sont monolithiques par nature, les applications basées sur les micro services sont, elles, construites comme des collections de pièces plus petites et composables (services) qui peuvent évoluer indépendamment et permettre des mises à niveau non perturbatrices. Un service comprend un ou plusieurs conteneurs qui remplissent une fonction commune.
Les applications conteneurisées/basées sur des micro services permettent des pratiques de développement logiciel rationalisées et accélérées. Ces pratiques requièrent une intégration et une coordination plus étroites entre les développeurs et l'équipe chargée des opérations informatiques, qui, ensemble, forment ce qu'on appelle le DevOps.
Figure 1 : Comparaison entre VM et conteneurs
Plateforme open-source et cloud native applications
Les applications conteneurisées se prêtent aux environnements distribués et utilisent les ressources de calcul, stockage et réseau différemment des applications traditionnelles. Ainsi, elles nécessitent une couche d'infrastructure dédiée à l'orchestration des charges de travail conteneurisées.
Kubernetes est une plateforme open source. Elle s'est désormais imposé comme la plateforme dominante dédiée à l'orchestration de conteneurs. Par ailleurs, ce système est souvent considéré comme le système d'exploitation du cloud native. Il s’agit d’une plateforme portable, extensible et open source destinée à la gestion des charges de travail et des services conteneurisés. Elle qui facilite à la fois la configuration déclarative et l’automatisation.
Plus spécifiquement, la plateforme:
- assigne des conteneurs aux machines (planification) ;
- démarre les conteneurs spécifiés via l'exécution du conteneur ;
- gère les mises à niveau, les restaurations et la nature en constante évolution du système ;
- répond aux défaillances (plantages de conteneurs, etc.) ;
- crée des ressources de cluster telles que la découverte de services, la mise en réseau inter-VM, l’entrée/sortie de cluster, etc.
Cette plateforme est conçue pour l'évolutivité, la disponibilité, la sécurité et la portabilité. Elle optimise le coût de l'infrastructure en répartissant les charges de travail entre l'ensemble des ressources disponibles. Chaque composant d'un cluster de ce type peut également être configuré pour la haute disponibilité.
La fonctionnalité Kubernetes évolue rapidement grâce aux contributions continues de sa communauté mondiale particulièrement active. Il existe maintenant une variété de distributions Kubernetes disponibles pour les utilisateurs. Bien que les déploiements certifiés par la CNCF soient le choix idéal (car la conformité garantit l'interopérabilité), l'automatisation intelligente des fonctions de gestion du cycle de vie, ainsi que l'intégration aisée des capacités de stockage, de mise en réseau, de sécurité et de surveillance, sont cruciales pour les environnements cloud native au niveau de la production.
Défis liés à l'adoption du « cloud native »
Les technologies cloud native constituent la nouvelle devise de l’agilité et de l’innovation des entreprises. En revanche, leur configuration, leur déploiement et leur gestion peuvent s'avérer difficiles pour certaines entreprises.
Tout d’abord, Kubernetes et son écosystème de cloud native applications sont profonds et évoluent rapidement. De plus, l'infrastructure traditionnelle n'est pas adaptée aux utilisations que cette plateforme et les conteneurs font des ressources informatiques. Il s’agit là d’un obstacle important pour les développeurs de logiciels, qui ont souvent besoin de ressources à la demande, ainsi que de services faciles à utiliser pour leurs applications cloud native.
Enfin, chaque entreprise finit par recourir à un mélange d'environnements Kubernetes sur site et basés sur le cloud public. Toutefois, bénéficier d'une flexibilité multicloud dépend de la capacité à gérer et à surveiller efficacement tous les déploiements.
Bonnes pratiques liées à l’architecture cloud native
La création d’une pile Kubernetes d’entreprise dans le datacenter est une tâche d'envergure pour les équipes chargées des opérations informatiques. Pour prendre en charge un système dynamique et distribué, il est essentiel d'exécuter Kubernetes et des applications conteneurisées sur une infrastructure résiliente et capable d'évoluer de manière réactive.
L’infrastructure hyperconvergée (HCI) Nutanix pour Kubernetes est la base d’infrastructure idéale pour les charges de travail cloud native à grande échelle. Nutanix offre une meilleure résilience pour les composants de la plateforme Kubernetes et les données des applications, ainsi qu'une évolutivité supérieure aux infrastructures en bare metal. Nutanix simplifie également la gestion du cycle de vie de l'infrastructure et le stockage persistant pour les conteneurs à état, éliminant ainsi certaines des plus grandes difficultés rencontrées par les entreprises lors du déploiement et de la gestion des cloud native applications.