Obtenir un fonctionnement identique lors de déploiements applicatifs sur des environnements cibles soit de développement, de test, de qualification ou de production est, depuis longtemps, un objectif des équipes DevOps. Il s’agit en l’occurrence de mettre en œuvre des processus rapides, fiables, reproductibles et automatisés pour garantir une qualité de résultat optimale.
Comme l’explique Luc Fournier, architecte Cloud
De fait, les erreurs d’une application provenant des problématiques de configuration entre différents environnements cibles est un sujet récurrent et c’est souvent en lien avec des dépendances ou des paramétrages matériels non stabilisés.
Le conteneurs en général
C’est en partie la raison pour laquelle le déploiement des applications modernes se focalisent de plus en plus sur les conteneurs en général et sur les solutions comme Azure container Apps. Ces derniers intègrent, dans une forme d’enveloppe invisible, l’application avec l’ensemble de leurs dépendances (runtime compris) ainsi que le système d’exploitation. On trouve entre autres :
- les fichiers de configuration,
- les bibliothèques,
- et les dépendances requises
Ainsi l’application s’exécute indépendamment de son infrastructure sous-jacente avec la garantie d’un déploiement identique et transparent dans tous les environnements (développement, qualification ou production).
Cette indépendance vis-à-vis de l’environnement permet d’obtenir une application aux comportements plus prévisibles et de créer des scénarios avancés sans toucher au modèle de sécurité ni à l’infrastructure principale et notamment :
- Prise en charge d’un large éventail de types d’applications, notamment les API HTTP, les microservices, le traitement des événements et les tâches en arrière-plan
- Possibilité d’écrire du code en utilisant le langage, l’infrastructure ou le Kit de développement logiciel (SDK) de votre choix
- Fonctionnalités robustes de mise à l’échelle automatique basées sur le trafic HTTP ou les déclencheurs d’événements
- Configurations simples pour effectuer des tâches de cycle de vie des applications modernes
De plus, des services d’orchestration fournissent, notamment, la capacité à superviser les services, de manière à détecter automatiquement la nécessité de relancer un service ou d’étendre son nombre d’instances pour répondre à la charge.
Le conteneur est un moyen de déployer plus rapidement des applications, il rapproche davantage les professionnels IT et les développeurs informatiques des entreprises et s’inscrit complètement dans la démarche DevOps.
Les avantages du conteneur
Parmi les avantages de l’approche par conteneur, nous pouvons retenir :
- Réactivité: utilise le système d’exploitation hôte et partage les bibliothèques appropriées. La nature légère des conteneurs implique qu’ils peuvent être démarrés et arrêtés rapidement, ce qui ouvre la voie aux scénarios de montée en puissance rapide et de réduction rapide.
- Portabilité : Cloud Privé / Public. Chaque fois qu’un conteneur est déployé, il s’exécute dans un environnement cohérent qui reste inchangé d’un déploiement à l’autre
- Scalabilité : facilité d’ajuster le nombre d’instances exécutées en fonction des besoins. Étant donné que les conteneurs ne présentent pas la surcharge typique des machines virtuelles, dont les nombreuses instances de système d’exploitation, il est possible d’utiliser beaucoup plus de conteneurs sur une même infrastructure.
- Efficacité : par nature utilise moins de ressources qu’une VM, le système d’exploitation de l’hôte étant utilisé
- Sécurité : par nature il y a une isolation entre les conteneurs
La conteneurisation a toute sa place dans une architecture dans laquelle l’application est divisée en plusieurs services communiquant entre eux.
Plus légers que la virtualisation, les conteneurs sont idéaux pour accueillir des micro-services (à raison d’un par conteneur), auxquels ils apportent un certain degré d’indépendance.
Les applications cloud natives (ou applications cloud ready) s’appuient également sur les conteneurs pour appliquer un modèle opérationnel commun dans tous les environnements, y compris les clouds publics, privés et hybrides. La faible charge et la haute densité des conteneurs permettent d’en héberger un grand nombre dans une même machine virtuelle et en font un choix idéal pour la diffusion des applications cloud natives.
Les équipes disposent de nombreuses options pour créer et déployer des applications conteneurisées cloud natives sur Azure et notamment :
- Azure Container Apps
- Azure App Service
- Azure Container Instances
- Azure Kubernetes Service
- Azure Functions
- Azure Spring Apps
- Azure Red Hat OpenShift
Il n’y a pas de solution parfaite, tout dépend du cas d’utilisation, de l’équipe et du niveau d’exigence souhaité. Nous vous proposons un focus sur Azure Container Apps et en quoi il diffère des autres options.
Comparaison des options de conteneur
Azure Container Apps
Azure Container Apps permet de créer des micro-services modernes hétérogènes avec une mise en réseau centralisée, unifiée sans nécessité d’orchestrer une infrastructure complexe, pour une productivité optimisée. Les fonctionnalités sont notamment les suivantes :
- Optimise l’exécution de conteneurs à usage général, en particulier pour les applications qui couvrent de nombreux micro-services déployés dans des conteneurs.
- Repose sur Kubernetes et des technologies open source comme Dapr (Distributed application Runtime) pour la prise en charge compète et KEDA (Kubernetes Event-Driven Autoscaling) pour une mise à l’échelle dynamique optimisée
- Prend en charge les applications de type Kubernetes et les microservices avec des fonctionnalités comme la découverte du service et la répartition du trafic.
- Autorise les architectures d’application pilotées par les événements avec une mise à l’échelle en fonction du trafic à partir de sources d’événements comme les files d’attente,
- Prend en charge les processus de longue durée et peut exécuter des tâches en arrière-plan.
Azure Container Apps fournit de nombreux concepts propres aux applications en plus des conteneurs, notamment les certificats, les révisions, la mise à l’échelle et les environnements
En revanche, Azure Container Apps ne fournit pas d’accès direct aux API Kubernetes sous-jacentes. Toutefois, pour créer des applications de type Kubernetes sans accès direct à l’ensemble des API Kubernetes natives et à la gestion des clusters, Azure Container Apps fournit une expérience complètement managée s’inspirant des bonnes pratiques.
Azure App Service
Azure App Service fournit un hébergement entièrement managé pour la création d’applications web, notamment les sites web et les API web. Ces applications web peuvent être déployées avec du code ou des conteneurs. Azure App Service est intégré à d’autres services Azure, notamment Azure Container Apps ou Azure Functions.
Azure Container Instances
Azure Container Instances (ACI) fournit un pod unique de conteneurs isolés Hyper-V à la demande. Il peut être considéré comme une option « de base » de niveau inférieur par rapport à Container Apps. Les concepts comme la mise à l’échelle, l’équilibrage de charge et les certificats ne sont pas fournis avec les conteneurs ACI. Cela nécessite par conséquent d’interagir avec d’autres services. Par exemple, Azure Kubernetes Service peut superposer l’orchestration et la mise à l’échelle sur ACI en utilisant des nœuds virtuels.
Azure Kubernetes Service
Azure Kubernetes Service (AKS) fournit une option Kubernetes complètement managée dans Azure. Il prend en charge l’accès direct à l’API Kubernetes et exécute toutes les charges de travail Kubernetes. Le cluster entier se trouve dans votre abonnement, avec les configurations et les opérations du cluster sous votre contrôle et votre responsabilité.
Azure Functions
Les Azures Functions sont étroitement liées à l’architecture Serverless. Dans une architecture de ce type, vous n’avez plus besoin de gérer les serveurs sous-jacents, c’est le fournisseur Cloud responsable de l’exécution du code hébergé qui s’en occupe. Cela implique de structurer votre application sous forme de fonctions exécutées à la demande. Les Azure Functions, c’est donc une implémentation de la notion de Serverless par Microsoft sur la plateforme Azure.
Azure Functions permet d’exécuter des petits bouts de code ‘fonctions’ sans se soucier de l’infrastructure de l’application : le fournisseur Cloud fournit toutes les ressources serveurs nécessaires pour que l’application s’exécute, même à grande échelle : Function as a Service (FaaS).
Plutôt que de vous soucier de la création et de la gestion d’une application entière ou de l’infrastructure pour exécuter votre code, et si vous pouviez écrire votre code et l’exécuter en réponse à des événements ou à une planification ? Azure Functions est une offre de type « sans serveur » qui vous permet d’écrire juste le code nécessaire. Avec Functions, vous pouvez déclencher l’exécution du code avec des requêtes HTTP, des webhooks, des événements de service cloud ou selon une planification. Vous pouvez écrire du code dans le langage de développement de votre choix, tel que C#, F#, Node.js, Python ou PHP. Avec une facturation basée sur la consommation, vous payez uniquement pour la durée pendant laquelle votre code s’exécute et Azure effectue la mise à l’échelle au besoin.
Azure Spring Apps
Azure Spring Apps est une plateforme d’applications serverless qui permet de créer, déployer, mettre à l’échelle et superviser des applications Spring Boot dans le cloud. Spring Cloud permet également d’intégrer des services Azure aux applications Spring Boot, en éliminant le code qui serait nécessaire autrement pour créer rapidement des applications Java robustes.
Azure Red Hat OpenShift
La plateforme Azure Red Hat OpenShift est conçue, exploitée et prise en charge conjointement par Red Hat et par Microsoft afin de fournir une expérience intégrée. Les équipes peuvent soit choisir leurs propres solutions de registre, de mise en réseau, de stockage et de CI/CD, ou utiliser les solutions intégrées pour la gestion automatisée du code source, les builds de conteneurs et d’applications, les déploiements, la mise à l’échelle, la gestion de l’intégrité, etc. d’OpenShift.
En savoir plus sur Azure Container Apps : https://azure.microsoft.com/fr-fr/products/container-apps/