Définition

  • La virtualisation et la conteneurisation sont deux technologies utilisées pour isoler et gérer des applications et des environnements logiciels de manière efficace et sécurisée.

    La virtualisation consiste à créer des environnements virtuels indépendants sur un seul matériel physique. Elle permet à plusieurs systèmes d'exploitation et applications de fonctionner simultanément sur une même machine physique, chacun étant isolé des autres. Cette isolation est réalisée grâce à un hyperviseur, qui gère et alloue les ressources matérielles aux différentes machines virtuelles. Chaque machine virtuelle dispose de son propre système d'exploitation complet, ce qui offre une grande flexibilité et permet d'exécuter différents types de logiciels, indépendamment de l'hôte.

  • La conteneurisation permet d'exécuter des applications de manière isolée, mais en partageant le même noyau et les mêmes ressources système.

    Les conteneurs encapsulent les applications, leurs dépendances et les bibliothèques nécessaires à l’exécution des applications, ce qui les rend plus légers et plus rapides à déployer comparativement aux machines virtuelles. Les conteneurs sont gérés par un moteur de conteneurisation (comme Docker ou LXC) et peuvent être déployés rapidement et de manière cohérente sur différents environnements.

Réalisation

La gestion de mon LAB à domicile avec QEMU/KVM m'a offert une expérience enrichissante dans la création et la configuration des machines virtuelles. Je suis passé de l'utilisation d'une interface graphique à une gestion exclusive via le terminal, ce qui m'a permis d'approfondir ma compréhension des outils sous-jacents et de peaufiner mes compétences en virtualisation. Cette transition vers une gestion exclusive via le terminal m'a ouvert de nouvelles perspectives. En manipulant directement les commandes et les scripts, j'ai pu mieux appréhender les mécanismes internes de QEMU/KVM et optimiser mes pratiques de virtualisation. De plus, cette approche m'a offert une plus grande flexibilité et un contrôle accru sur mes environnements virtuels, tout en renforçant ma maîtrise des concepts clés de la virtualisation. En somme, la gestion de mon LAB à domicile avec QEMU (Quick EMulator)/KVM (Kernel Virtual Machine) a été une expérience formatrice, me permettant d'explorer en profondeur les possibilités de la virtualisation et d'acquérir des compétences précieuses dans un environnement informatique en constante évolution.

command kvmqemu
Cette image présente la commande pour créer une machine virtuelle avec KVM/QEMU en ligne de commande

J’ai effectué plusieurs déploiements d’application en utilisant docker et docker compose. L’un des déploiements est une application de gestion de wiki. Pour réaliser ce déploiement, j’ai utilisé un fichier compose et un fichier .env. Le fichier compose m’a permis de définir les conteneurs de mon déploiement (l’application de bookstack et la base de données mariadb), de les inclure dans un même réseau et de préciser que le conteneur de l’application dépend de celui de la base de données. Cette approche m'a permis de bénéficier d'une gestion plus flexible et sécurisée des configurations et des secrets liés à mon application. En séparant le fichier .env du fichier "docker-compose.yml", je peux facilement gérer les versions du fichier "docker-compose.yml" tout en maintenant la confidentialité des informations sensibles. Ainsi, je peux configurer des mots de passe et des options de variables d'environnement différents pour chaque déploiement, sans compromettre la sécurité des données. Cette approche modulaire et bien structurée offre une meilleure flexibilité et sécurité lors du déploiement et de la gestion des applications en utilisant Docker. J’utilise également des conteneurs docker pour le développement de scripts qui nécessite une version spécifique d’un logiciel ou une configuration différente de celle de mon système hôte.

Evaluation et perspective d'évolution

En utilisant la commande “virsh”pour gérer mes machines virtuelles et “virt-install” pour les créer, j’ai approfondi mes connaissances théoriques sur le fonctionnement de la virtualisation avec kvm et qemu. L’utilisation de docker me permet de cloisonner des applications et de gérer différentes versions d’une application sur un même hôte. Cependant, il me reste encore beaucoup à apprendre pour atteindre un niveau de maîtrise expert dans le domaine de la virtualisation et de la conteneurisation. Pour améliorer mes compétences en virtualisation, je souhaite créer un utilitaire comme virsh de zéro. Ce projet me permettra de comprendre le fonctionnement interne des hyperviseurs et des mécanismes de gestion des machines virtuelles, en explorant en profondeur les interactions entre le matériel physique, l'hyperviseur et les machines virtuelles. Pour améliorer mes compétences en conteneurisation, je vais créer une interface utilisateur pour gérer Docker. Ce projet me permettra de mieux comprendre les concepts clés de la conteneurisation, tels que la création, le déploiement et la gestion des conteneurs, tout en approfondissant mes connaissances sur les fonctionnalités avancées de Docker et en renforçant ma maîtrise des bonnes pratiques de sécurité et de performance dans le contexte des conteneurs. Je vais explorer la conteneurisation avec LXC. Ce projet me permettra de comparer et de comprendre les différences entre Docker et LXC, en explorant les fonctionnalités spécifiques à LXC, ce qui élargira mes compétences dans le domaine de la conteneurisation. Pour un expert en systèmes d'information, la compétence dans la virtualisation et la conteneurisation est cruciale, car ces technologies sont devenues des piliers de l'infrastructure informatique moderne. Mon conseil à un débutant serait de commencer par comprendre les bases de la virtualisation et de la conteneurisation à travers des tutoriels et des projets pratiques. Un projet pratique est d’essayer de recréer de zéro un utilitaire comme virsh pour comprendre les notions avancés liés à la virtualisation. En créant une interface utilisateur pour docker, cela permettra de comprendre le fonctionnement de docker. En parallèle, je prévois également d'approfondir mes compétences en automatisation et en sécurité pour renforcer mes capacités dans la mise en œuvre et la gestion d'infrastructures virtuelles et conteneurisées à grande échelle.