La conteneurisation, freins à l’adoption du SaaS ?
La conteneurisation est un accélérateur de l’adoption du Cloud; mais ne serait-elle pas un frein à l’adoption du modèle SaaS et finalement ne retarderait-elle pas tous les bénéfices que l’on peut tirer du cloud?
Qu’est-ce que la conteneurisation?
La conteneurisation est l’encapsulation de logiciels qui peuvent fonctionner sans problème sur plusieurs plates-formes d'infrastructure. L'utilisation d'un logiciel de conteneurisation, a parmi d’autres avantages, de permettre d’aboutir également à une infrastructure globale solide.
La conteneurisation diffère de la virtualisation où le code est écrit dans un environnement particulier avant d'être transféré vers un autre emplacement cible pour l'implémentation. La virtualisation s'est généralisée car elle permet aux développeurs de travailler sur leur code dans un environnement sans conséquence. Cependant, le déplacement du code du développement à la production introduit souvent des bogues et d'autres complications. La machine virtuelle (VM) ou le système d'exploitation (OS) de production inclut souvent d'autres fichiers qui interfèrent avec le nouveau logiciel. Cela entraîne de possibles erreurs lors de la mise en œuvre, qui peuvent être coûteuses ou se répercuter sur d'autres processus.
La conteneurisation évite ces problèmes en permettant aux développeurs de travailler dans un environnement de production partitionné. Il est ainsi possible de coder et tester avec les bibliothèques, fichiers de configuration et dépendances pertinents.
Le container est indépendant du système d'exploitation réel. En conséquence, le container peut être déplacé d'une plate-forme à l'autre ou même dans le cloud sans rencontrer de problèmes de mise en œuvre. Les containers sont de petits logiciels "légers" qui ont moins de capacité et de temps de démarrage qu'une machine virtuelle standard. Ils embarquent le noyau de la machine et autorisent des serveurs en théorie plus performants.
Conteneurisation des applications
Le container d'une application est un package logiciel exécutable qui combine le code de l'application avec les fichiers de configuration, les variables d’environnement, les bibliothèques et les dépendances nécessaires. Une copie du système d'exploitation n'est pas incluse, mais un moteur d'exécution est plutôt utilisé sur le système d'exploitation hôte. Ce moteur d'exécution permet à plusieurs containers d'utiliser le même système d'exploitation sur un seul système.
D'autres fichiers requis peuvent être partagés lorsque plusieurs containers s'exécutent sur le même système. Par exemple, les bacs et les bibliothèques peuvent être utilisés dans plusieurs containers sur un seul système d'exploitation. L'utilisation d'un ensemble de bibliothèques pour toute une gamme de containers réduit les ressources nécessaires à l'utilisation d'un système. Le maintien d'applications isolées dans des containers réduit également les risques d'attaques de code malveillant.
La conteneurisation d'applications s’apparente à des microservices et des applications distribuées, chaque container fonctionnant indépendamment des autres et utilisant un minimum de ressources de l'hôte. Chaque microservice communique avec les autres par le biais d'interfaces de programmation d'application.
Étant donné que les containers sont séparés de leur système d'exploitation hôte, ces applications sont plus portables que d'autres logiciels. Ils peuvent être facilement mis en œuvre sur une gamme de plates-formes, y compris les ordinateurs de bureau, les machines virtuelles, divers types de systèmes d'exploitation et les solutions basées sur le cloud. Cette polyvalence permet aux développeurs de travailler avec leurs processus et outils les plus familiers.
Avantages de la conteneurisation
La conteneurisation offre beaucoup d'avantages aux développeurs. Parmi les améliorations attendues lors du passage à la conteneurisation, on note :
Portabilité
Les containers sont des packages logiciels exécutables qui ne dépendent pas d'un système d'exploitation hôte. Ces progiciels peuvent être utilisés de manière cohérente sur n'importe quel service ou plate-forme cloud.
Agilité
Les moteurs d'exécution open source combinent des outils simples avec une approche universelle, vous permettant d'optimiser à la fois les machines Linux et Windows. Vos développeurs peuvent utiliser Agile, DevOps et d'autres outils pour améliorer le processus de développement et la mise en œuvre.
Vitesse
Étant donné que les containers sont des fichiers relativement petits, ils nécessitent moins de ressources serveur pour s'exécuter. Vous pouvez réduire les frais de serveur et de licence tout en augmentant vos heures de démarrage.
Isolement d'anomalie
Les applications logicielles containerisées s'exécutent indépendamment les unes des autres. Si un container tombe en panne, les autres applications ne sont pas impactées. Cela permet à votre équipe d'identifier et de corriger rapidement les problèmes au fur et à mesure qu'ils surviennent tout en évitant les temps d'arrêt dans d'autres applications.
Efficacité
Les containers partagent le noyau du système d'exploitation de leur machine hôte et peuvent partager d'autres exigences telles que les bibliothèques. Par conséquent, les containers sont plus petits que les machines virtuelles complètes et sont plus efficaces lors de leur exécution.
Gestion simplifiée
Les plates-formes d'orchestration de containers peuvent rationaliser les applications, outils et autres services containerisés. Ces plates-formes facilitent l'installation, la mise à jour, la mise à l'échelle, la surveillance et le débogage des applications containerisées.
Sécurité
Les applications containerisées sont séparées les unes des autres ainsi que du système d'exploitation hôte. Tout code malveillant ou bogue dans un container reste isolé et ne peut pas affecter le reste du
système. Les autorisations de sécurité peuvent également être personnalisées pour les utilisations de diverses applications.
Points faibles de la conteneurisation
Les indéniables avantages de la conteneurisation semblent si nombreux que les containers d’application semblent être une solution parfaite. Il n’en pas ainsi, et un certain nombre d’aspects négatifs méritent également d’être pris en considération.
La sécurité
Des cas de failles d’applications conteneurisées ont permis d’atteindre le kernel de la machine et de mettre en danger tous les conteneurs portés par ce serveur (physique ou virtuel). L’étanchéité des applications entre elles ne dispense donc pas d’assurer une sécurité ‘’verticale’’ multi-niveaux. Dans le cas de l’utilisation de Docker comme moteur de conteneurisation, il est par exemple nécessaire de sécuriser l’application conteneurisée ainsi que le registre, le daemon Docker et le système d'exploitation hôte.
L’utilisation incontrôlée de ressources
La gestion du cycle de vie s'avère absolument essentielle pour les conteneurs. En effet, ces derniers offrent l'avantage non négligeable de pouvoir être mis en service et dupliqués à la vitesse de l'éclair. Il est ainsi possible de consommer une grande quantité de ressources informatiques sans vraiment s'en rendre compte. Ce n'est pas fondamental si les conteneurs qui composent l'application sont arrêtés ou supprimés dès lors qu'ils ne sont plus nécessaires. Mais en cas d'oubli, la montée en charge d'une application conteneurisée dans le Cloud peut se traduire par des coûts importants pour l'entreprise.
Limites de la portabilité
Un conteneur Linux ne peut pas être utilisé sur une machine Windows (et inversement) à moins d’une couche intermédiaire de virtualisation/émulation de l’OS correspondant.
Persistance des données complexifiée
Les données persistantes du conteneur doivent être déplacées hors du conteneur d'application vers le système hôte ou vers un endroit disposant d'un système de fichiers persistant. La conception des conteneurs est à l'origine de la perte de données. En effet, les données du conteneur peuvent disparaître à jamais une fois celui-ci supprimé, à moins d'en faire une sauvegarde ailleurs.
La conteneurisation : accélérateur de l’adoption du Cloud
La conteneurisation d’application peut donc être vue comme le prolongement naturel et amélioré de la virtualisation Les qualités intrinsèques des containers décrites ci-dessus permettent d’envisager sereinement la migration d’applications vers le Cloud.
La conteneurisation permet de réduire les charges au démarrage et de supprimer la nécessité de configurer des systèmes d'exploitation invités distincts pour chaque application, car ils partagent tous un seul noyau de système d'exploitation.
La conteneurisation permet de regrouper le code de la demande avec les fichiers de configuration, les dépendances et les bibliothèques associées. Ce package de logiciels unique (le container), isolé du système d'exploitation hôte, lui permet d'être autonome et de devenir portable, c'est-à-dire de s'exécuter sur n'importe quelle plateforme ou n'importe quel cloud sans aucun problème.
De quoi atténuer les angoisses de tout DSI face aux redoutés effets de bord liés à une migration dans le Cloud. De ce point de vue la conteneurisation est un indéniable facteur d’accélération de l’adoption du Cloud.
La conteneurisation, un frein à l’adoption du SaaS ?
Si la conteneurisation semble être un atout dans le cadre d’une migration, ne serait-elle un frein à l’adoption d’architecture serverless et l’utilisation de services managés ?
L’histoire du Cloud est jalonnée de plusieurs étapes -très schématiquement :
- la virtualisation des espaces de stockage (S3) et de computing (EC2),
- la virtualisation des bases de données (DB managées, RDS, DynamoDB, Aurora, …)
- la gestion d’applications complètes (gestiosn de containers), le déploiement et la maintenance de processus et d’architectures complexes sur des clusters gérés,
- les architectures sans serveur et le Saas
L’inclination naturelle de l’histoire de l’utilisation du Cloud devrait conduire de plus en plus à la mise en œuvre d’architectures totalement serverless proposant des services de calcul dont l’un des avantages est la mise à l’échelle automatique. Amazon Lambda est un bon exemple des effets de la conteneurisation sur la marche en avant de certains utilisateurs dans les technologies du Cloud.
Certaines réticences naturelles des utilisateurs à l’adoption du Cloud demeurent vives, entre autres :
- ne pas mettre tous ses œufs dans le même panier,
- conserver le choix de revenir en arrière,
- conserver sa liberté de choix de la technologie mise en œuvre,
- ne pas être prisonnier d’une technologie,
- ne pas être pieds et poings et liés avec un fournisseur.
L’implémentation de fonctions Lambda implique d’écrire du code qui ne peut s’exécuter que dans AWS. Evidement quand on n’a plus entièrement la main sur son code et son environnement d’exécution, les réticences que l’on vient d’évoquer sont renforcées. La conteneurisation permet de réduire ces craintes, puisque l’utilisateur conserve une certaine autonomie dans son environnement local et qu’il peut ensuite, du moins théoriquement, déployer son code sur tout type de plate-forme.
Si la migration et l’exécution d’une application dans le Cloud sont grandement facilitées et sécurisées par l’utilisation de containers, il est évidemment tentant d’adopter une approche conservatrice concernant des développement ultérieurs plus approfondis.
L’utilisation de containers permet finalement de conserver les méthodes et les technologies d’avant la migration dans le Cloud plutôt que d’avancer plus en avant dans l’appréhension des nouveaux services mis à disposition des utilisateurs. En cela la conteneurisation agit plus comme un frein qu’un catalyseur à l’adoption du SaaS.
Il est évidemment dommage de se priver de toute la puissance des solutions SaaS du fait de ces considérations qui, si elles sont prégnantes, n’en restent pas moins souvent une mauvaise perception de la situation.