Le Cloud a apporté son lot de nouveautés : nouveau business model, nouvelle façon de concevoir, déployer et d'opérer les infrastructures et applications, qu'elles soient de type IaaS ou PaaS et a facilité l'introduction du concept DevOps en son sein
L’évolution vers le (Dev)NoOps
Conteneurs, Serverless, Architectures Micro-Service
D’autres innovations telles que les conteneurs, Serverless ou encore architecture orientée micro-service, ont également apporté de nouvelles façons d’appréhender les applicatifs, que l’on désignerait comme Cloud Native, si un certain nombre de caractéristiques sont appliquées, comme le résume très bien les TWELVE FACTORS, que nous aborderons ici.
DevNoOps ou DevSecOps
L’ensemble de ces innovations introduisent de nouveaux concepts ambitieux comme le DevNoOps ou le DevSecOps, qui annonce la mort certaine à court terme de métiers tels que les administrateurs systèmes, par exemple, dans le sens où les applications seront « intelligentes » grâce aux technologies et concepts que nous allons aborder ici.
Le but n’étant pas de détailler ici toutes les technologies existantes d’un point de vue technique, mais de faire un tour d’horizon sur les tendances actuelles et futures et aussi pour s’ouvrir l’esprit à nos métiers de demain (transformation ?) et la façon dans les applications seront conçues…
Nous allons aborder un certain nombre de concepts et technologies, comme le concept DevOps, l’intégration continue, … afin d’obtenir l’horizon le plus large possible et de se rendre compte à quel point tout bouge rapidement et d’intégrer tout cela dans vos futures réflexions.
1 – Intégrer les douze facteurs d’une application Cloud Native
En premier lieu, si nous désirons qu’une application soit Cloud Native, il convient de respecter un certain nombre de critères, selon TWELVE FACTORS, qui reprend l’ensemble des concepts et technologies abordées ici:
- Utilisent un format déclaratif pour l’automatisation des installations
- Ont un contrat clair avec l’OS sous-jacent et qui offrent une portabilité maximale pour l’exécution sur différents environnements
- Sont adaptés à un déploiement sur des plateformes cloud
- Minimisent la divergence entre développement et production et permettent un déploiement continu pour un maximum d’agilité
- Peuvent monter en charge sans changement majeur d’outillage, d’architecture ou de pratique de développement
2 – L’approche DevOps
Dans le cadre de la mise en production d’une application en passant par la conception, le test, … (la chaîne) il existe plusieurs approches, classique (Waterfall par exemple) et DevOps (Agile, …) qui incluent les OPS (Ingénieurs systèmes, architectes, …) et les DEV (développeurs, Architectes logiciels, …).
Dans une approche classique, les équipes sont le plus souvent compartimentées, et ne pensent qu’à leurs tâches, en bref, les DEV produisent du code, les évolutions fonctionnelles, … et les OPS mettent à disposition les infrastructures sans tenir compte des évolutions logicielles mais plutôt en se concentrant sur le SLA du service ainsi que la performance associée.
Dans une approche de type DevOps, l'ensemble des acteurs, soit les DEV et les OPS se répartissent les responsabilités et sont tous impliqués dans le chaîne de mise en production d'une application Cliquez pour tweeterLe concept DevNoOps, les nouvelles technologies permettront de s’affranchir des OPS dans le sens où le code de l’infrastructure ne deviendra plus qu’une variable dans la chaîne. Nous y reviendrons plus tard.
Comprendre la différence entre la livraison, le déploiement et l’intégration continue CI/CD
Les acronymes CI et CD sont couramment utilisés lorsque l’on parle de DevOps:
- CI
Intégration Continue, une pratique qui vise à faciliter la préparation d’une version
- CD
une Livraison Continue ou un Déploiement Continu, et bien que ces deux pratiques aient beaucoup en commun, elles ont également une différence significative que nous allons détailler
Intégration Continue
Les développeurs pratiquant une intégration continue fusionnent leurs modifications dans la branche principale aussi souvent que possible. Les modifications du développeur sont validées en créant une génération et en exécutant des tests automatisés par rapport à la génération. L’intégration continue met l’accent sur l’automatisation des tests pour vérifier que l’application n’est pas interrompue chaque fois que de nouveaux commits sont intégrés dans la branche principale.
Livraison continue
La livraison continue est une extension de l’intégration continue pour permettre de générer rapidement de nouveaux changements. Cela signifie qu’en plus d’avoir automatisé les tests, vous avez également automatisé votre processus de publication et vous pouvez déployer votre application à tout moment en cliquant sur un bouton.
Déploiement continu
Le déploiement continu va plus loin que la livraison continue. Grâce à cette pratique, chaque modification apportée à toutes les étapes de votre pipeline de production est transmise aux utilisateurs. Il n’y a pas d’intervention humaine, et seul un test échoué empêchera le déploiement d’un nouveau changement dans la production.
Quelques outils appartenant à une chaîne DevOps:
- Code & Commit: Git, Github, Visual Studio, Eclipse, …
- Build & Config: Docker, Chef, SaltStack, Puppet, Ansible, …
- Scan & Test: Sonar, BlazeMeter, Gerrit, …
- Release: uDeploy, Serena, CollbaNet, XL Release, …
- Deploy: Kubernetes, Azure, VMware, OpenStack, …
Un schéma est toujours utile pour illustrer les dires précédents…
Selon un sondage effectué en 2016 par Puppet auprès de 4 600 professionnels de l’informatique, les services informatiques disposant d’un flux de travail DevOps ont déployé un applicatif 200 fois plus fréquemment. De plus, ils ont récupéré 24 fois plus vite et ont eu trois fois moins de taux de défaillance. Simultanément, ces entreprises consacrent 50% de temps en moins aux problèmes de sécurité et 22% de temps en moins au travail non planifié.
3 – Les Conteneurs ou architecture orientée micro-service
En exploitant les conteneurs dans le cadre de votre stratégie, vous pouvez gagner en efficacité, en souplesse et améliorer la sécurité des applications.
Les conteneurs permettent de facilement packager, déployer et exécuter n’importe quelle application en tant que conteneur léger, portable et autonome, pouvant s’exécuter pratiquement n’importe où, en isolant le code dans un seul conteneur, ce qui facilite sa modification et sa mise à jour.
Docker, par exemple, est construit sur LXC (LinuX Container). Comme avec toute technologie de conteneur, il dispose de son propre système de fichiers, de son stockage, de son processeur, de sa mémoire vive, etc… La principale différence entre les conteneurs et les machines virtuelles réside dans le fait que l’hyperviseur extrait un périphérique entier, mais que les conteneurs ne font que présenter le noyau (kernel) du système d’exploitation.
Les applications actuelles dites « classiques » ou legacy s’exécutent sur un système d’exploitation. Le système d’exploitation peut être exécuté sur un hôte Bare Metal ou sur une machine virtuelle. Les conteneurs fournissent la virtualisation du système d’exploitation sur les hôtes Windows et Linux. Plusieurs conteneurs indépendants peuvent être exécutés au sein d’une même instance Linux ou Windows, évitant la surcharge liée au démarrage et à la maintenance des machines virtuelles.
Les conteneurs vous permettent de conditionner l’application avec son environnement d’exécution complet, soit tous les fichiers nécessaires à son exécution. L’image de conteneur contient toutes les dépendances de l’application, elle est portable et cohérente au fur et à mesure qu’elle passe du développement au test et enfin à la production.
Les conteneurs permettent de configurer des environnements de développement locaux qui s’exécutent exactement comme un serveur de production, exécuter plusieurs environnements de développement à partir du même hôte avec un logiciel, des systèmes d’exploitation et des configurations uniques, tester des projets sur de nouveaux ou différents serveurs, et permettre à quiconque de travailler sur le même projet avec les mêmes paramètres, quel que soit l’environnement hôte.
Les entreprises utilisent les conteneurs pour réduire leur dépendance aux technologies de virtualisation commerciales telles que vSphere de VMware, il en résulte une réduction des coûts tout en réduisant l’utilisation de technologies de virtualisation classique.
Selon une étude de Diamanti menées auprès de 576 responsables informatiques datant de 2018, 44% des sondés prévoient de remplacer des machines virtuelles par des conteneurs. Plus de la moitié (55%) consacrent plus de 100 000 dollars par an aux droits de licence VMware, et plus du tiers (34%) dépensent plus de 250 000 dollars par an en droits de licence VMware. Près de la moitié des responsables informatiques interrogés prévoient de déployer des conteneurs en production, tandis que 12% déclarent déjà en avoir.
Efficacité
Prenons le plus connu, Docker, une plate-forme de conteneurs qui possède des nombreuses références à son actif. Avec Azure, la consommation a lieu sur le conteneur plutôt que sur l’application ou la machine virtuelle et donc les coûts Azure sont moindres, tout comme les dépenses de maintenance et de licence. Je prends l’exemple de mon blog où j’ai plus que divisé par deux les coûts de son hébergement en passant d’une VM à une solution de conteneur, en l’occurrence Docker.
Les plates-formes de conteneurs sont capables de générer un impact mesurable à tout point de vue grâce à une densité d’applications bien supérieure à celle des machines virtuelles.
Sans sacrifier les performances des applications et tout en réduisant le temps nécessaire pour effectuer des tâches courantes, en accélérant le développement et le déploiement en s’intégrant parfaitement dans une chaîne de déploiement continu DevOps.
Flexibilité
Avec une plate-forme de conteneurs véritablement agnostique, les entreprises bénéficient d’une réelle flexibilité en libérant les applications de leur environnement et en pouvant les héberger en fonction des besoins.
De plus, les conteneurs offrent une véritable portabilité car ils sont basés sur des normes ouvertes et s’exécutent sur toute infrastructure (Cloud, virtuelle, …). Ainsi, les entreprises n’ont plus besoin de s’engager à long terme sur leur infrastructure.
Sécurité
Les plates-formes de conteneurs isolent les applications de l’infrastructure, ainsi que d’autres applications, ce qui réduit la surface exposée. Les espaces de noms du noyau Linux isolent la vue de l’application d’un environnement d’exploitation, y compris les arborescences de processus, le réseau, les ID utilisateur et les systèmes de fichiers montés, tandis que les groupes de contrôle du noyau limitent les ressources, notamment le processeur, la mémoire, …
a) Avantages
Les conteneurs sont plus portables que les machines virtuelles et peuvent être déployés dans les Clouds publics, les Clouds privés et les Datacenters traditionnels Cliquez pour tweeterRationalisation du cycle de développement des logiciels sur les différents environnements, car il n’existe plus d’adhérence comme nous avons pu en connaître dans des architecture traditionnelles
Les tests et le suivi des bugs deviennent également moins compliqués car il n’y a pas de différence entre les environnements
Les conteneurs sont légers et peuvent démarrer en quelques secondes
Ils partagent un système d’exploitation commun, ce qui réduit les coûts, moins de serveurs (car consomment moins de ressources), moins d’OPS, …
b) Inconvénients
- Les conteneurs ont un domaine de défaillance plus élevé lorsqu’ils partagent le même système d’exploitation hôte
D’où l’importance d’un orchestrateur !
- Les conteneurs sont moins sécurisés que les machines virtuelles
Les conteneurs partagent le noyau et les autres composants du système d’exploitation hôte et disposent d’un accès root. S’il existe une vulnérabilité dans le noyau, cela peut compromettre la sécurité des conteneurs (en théorie car aucun exploit n’est connu à ce jour)
L’implémentation de la mise en réseau et du stockage des conteneurs reste un problème par rapport aux machines virtuelles
Toujours l’importance d’un orchestrateur et d’un SDN
Les architectures micro-services permettent des déploiements plus petits, plus fréquents et plus nombreux pour ce faire ils doivent être fortement découplés, distribués et élastiques.
Ce qui induit une multiplication des conteneurs (Cattle) car une application pensée micro-services est découpée en de multiples services/composants qui sont faciles à updater, débugger, etc…
Téléchargez cette ressource
Sécuriser votre système d’impression
Longtemps sous-estimée, la sécurisation d’un système d’impression d’entreprise doit être pleinement prise en compte afin de limiter le risque de fuite d’informations sensibles. Voici les 3 principales précautions à prendre.
4 – Infrastructure as Code ou IaC
Il convient de distinguer la différence entre l’orchestration de la configuration et le management de la configuration, le premier inclut des outils comme Terraform qui automatise le déploiement, tandis que le second inclut d’autres outils comme Chef ou Puppet qui aident à configurer les systèmes (création de compte de services, …) et applications (installation de SQL Server, …) sur des infrastructures préalablement déployées avec Terraform, par exemple, le tout via du code bien sûr. Bref, on pourrait presque parler de template dynamique s’inscrivant parfaitement dans une logique DevOps, car on va gérer la gestion de la configuration dans le pipeline d’intégration de de livraison continue.
Infrastructure as Code repose sur des outils offrant une abstraction haut niveau des ressources d’infrastructure, offrant une bien meilleure lecture qu’un fichier JSON (pourrait-on parler de la mort de la documentation ? à condition de bien commenter son code), comme Terraform. Faire le choix de l’outil Terraform se révélera être judicieux comme nous précise Microsoft qui investit massivement dans cette technologie. Celui-ci utilise une syntaxe déclarative qui définit un état final souhaité au lieu d’une syntaxe impérative qui décrit une série d’actions pour arriver à une finalité.
5 – Serverless (application sans serveur)
Il ressort principalement 3 uses cases concernant le ServerLess :
- des APIs « simples » et scalable
- l’automation,
- le Data Processing
Les avantages sont multiples: configuration minimale, support multi langages (Python, NodeJS, Java, Powershell, …), Cloud agnostique, support de l’ALM et le streaming des logs. Quelques comparaisons:
-
Serverless vs Conteneur
Docker empaquette le logiciel dans des unités standardisées (conteneurs) pour faciliter la gestion des dépendances des applications et simplifier la gestion du serveur tandis que le Serverless représente essentiellement des conteneurs éphémères, où le démarrage / arrêt est géré automatiquement. Les applications sans serveur déployées sont fondamentalement sans administration et évoluent automatiquement avec la demande, ce qui évite de gérer des instances de serveur et centrées sur le CODE avec une tarification adaptée (paiement à l’exécution du code et non par instance)
-
Serverless vs Terraform
Terraform est un outil de déploiement Cloud qui décrit l’infrastructure en tant que code et se déploie simultanément sur plusieurs Cloud tandis que Serverless facilite le développement et le déploiement d’applications sans serveur (code). Ils peuvent donc travailler de concert !
On entend beaucoup de choses sur le Serverless, que c’est le NoOps par excellence, que cela va induire un « DEPRECATED » sur les conteneurs, etc… On va plutôt dire que c’est du « Cloud Native » par excellence et que la réalité est que tout composant a besoin d’OPS même ceux sur lesquels vous avez peu de contrôle.
Il ne faut pas confondre Serverless et NoOps. Si on prend le mot Ops cela ne signifie pas uniquement des opérations d’administration des systèmes. Cela signifie également à minima le suivi, le déploiement, la sécurité, la gestion du… Cliquez pour tweeter
Mais la jeunesse de la technologie induit d’autres contraintes opérationnelles comme le debug, par exemple.
6 – L’Application Management Performance (APM) dans une chaîne NoOps
L’approche Shift-Left dans un mode AGILE permet de garantir la qualité du code dans le but de le déployer en production avec un niveau de qualité élevé. De l’autre côté, nous avons l’approche Shift-Right qui agit sur une application en production où les besoins de tests sont importants tout comme la supervision applicative au sens large. Dans un modèle AGILE, les besoins de tests (test unitaire, UAT, performance, monitoring, …) sont indispensables, c’est là qu’intervient l’APM !
Les APM modernes (orientés Cloud et/ou DevOps) permettent d’améliorer la performance, de réduire le temps de résolution d’incident(s), d’anticiper les problèmes, d’identifier les « roots causes », d’améliorer l’expérience utilisateur, les tests, … Les APM peuvent fournir des analyses prédictives pour identifier les anomalies et alerter les équipes DevOps avant que le service soit impacté (Shift-Right). Plus la solution APM sera capable d’identifier un problème rapidement, plus vite les équipes DevOps pourront mitiger l’impact. Ce sondage de IBM nous démontre bien les attentes des entreprises vis-à-vis d’une solution APM.
Selon Enterprise Management Associates (EMA), 70% des entreprises utilisent encore un ensemble de processus de débogage manuels et cela constitue un goulot d’étranglement important dans leur pipeline de distribution continue. Le rapport «État des DevOps 2017» de Puppet indique que les entreprises adoptant un APM consacrent 22% moins de temps aux travaux de reprise ou aux arrêts non planifiés, les déploiements sont 46 fois plus fréquents et les délais de réparation 96 fois plus rapides.
7 – L’approche NoOps
Une approche NoOps signifie l’ automatisation du déploiement, de la surveillance et de la gestion des applications. NoOps peut s’inscrire essentiellement dans du PaaS mais pas seulement, on pourrait décorréler le NoOps de l’approche DevOps pour réduire les opérations d’exploitation telles que la remédiation basée sur de l’IA. Certains diront que NoOps est un DevOps réussi…
On pourrait aussi avoir une approche uniquement NoOps sans DevOps, non ? Il faut garder à l’esprit d’avoir comme cible, une transition totalement automatisée entre le développement et l’exploitation.
NoOps est très orienté Cloud par nature et non au Datacenter traditionnel, car dans ces derniers on aura toujours des tâches « bas niveau » comme le provisioning de serveur physique, switches réseaux, stockage, … Il faut faire abstraction de ces éléments, les conteneurs abordés plus haut sont LA réponse pour du NoOps (mais DevOps aussi).
La promesse NoOps, c’est une infrastructure qui a atteint un tel niveau d’automatisation qu’aucune équipe OPS n’est nécessaire pour l’administrer. En bref, pour que NoOps soit réellement employé, les développeurs ne doivent pas tenir compte des aspects liés aux ressources d’infrastructure. Le PaaS ne serait-il pas NoOps par définition ?
8 – Pour Conclure
Les opérations restent essentielles dans toute démarche DevOps mais le métier se transforme: les éléments serveurs, réseaux, etc doivent approcher une méthode Infra as Code, un administrateur ne provisionnera plus à la main une VM mais un docker ou une VM « Terraformée » et « Puppetisée » qui s’intègre dans une chaîne DevOps.
NoOps ne signifie pas forcément plus d'opérations, mais plutôt d'intégrer By Design toutes les méthodologies et technologies abordées ici pour pousser l'automatisation au maximum en vue de limiter, voire faire disparaître les interventions… Cliquez pour tweeter
Je parlais de la disparition de certains métiers, oui et non, ceux-ci vont devoir évoluer vers des profils d’architectes ou de spécialistes Cloud pour penser et mettre en œuvre les architectures de demain.
A titre d’exemple, les Datacenters Azure, qui sont énormes ne sont maintenus que par une poignée de personnes, je pense que l’on peut parler ici de NoOps mais dans l’esprit « infrastructure management »… Mais bien entendu, nous ne sommes pas tous des GAFAM mais certains éléments abordés ici peuvent se mettre facilement en place comme l’Infra as Code et vous apportera des apports indéniables et mesurables rapidement.
Pour conclure, les technologies abordées comme le Serverless ou architecture micro-services, l’assimilation des TWELVE FACTORS dans les réflexions, une approche de développement moderne AGILE ou DevOps et l’intégration d’un APM vous permettront à coup sûr de tendre vers le NoOps.
Mais quoiqu’il en soit, NoOps est encore très jeune dans son approche, et il y aura toujours besoin des OPS pour maintenir les architectures et les infrastructures, a minima pour les superviser.
Retrouver l’intégralité de l’article dans l’édition Smart DSI N° 11
Pour aller plus loin sur ce thème avec les experts iTPro.fr et via @ITPROFR :
- Les 7 tendances DevOps · iTPro.fr
- Les obstacles à la mise en œuvre de l’approche DevOps · iTPro.fr
- L’urgence de faire converger Observabilité et Sécurité · iTPro.fr
- La maîtrise des environnements multi-cloud, l’avenir de DevOps · iTPro.fr
- DevOps et sécurité : ce qu’il faut changer · iTPro.fr
- 5 recommandations de « Zero Secret dans le code » (itpro.fr)