Aller au contenu principal

Contruction d'images de VM avec Packer

Nous avons vu dans les chapitres précédents que la construction d'images de machines virtuelles (VM) jouent un rôle essentiel dans la fourniture d'environnements fiables et sécurisés. Mais la création et la gestion des images peuvent s'avérer fastidieuses sans un outil pour les automatiser. Que vous soyez un administrateur système cherchant à automatiser le déploiement d'infrastructures ou simplement quelqu'un qui veut optimiser son workflow de création d'images, c'est Packer qu'il vous faut. C'est là qu'intervient Packer, un outil développé par HashiCorp.

Les fonctionnalités de Packer

Packer a été conçu pour automatiser le processus de création d'images de machines virtuelles pour de multiples plateformes et cela, en parallèle pour optimiser les temps de construction.

Packer prend en charge actuellement pas moins de 42 plateformes dont 10 officiels : AWS, Azure, GCP, QEMU, Parallels, VMware, Vagrant, VirtualBox...

Mais Packer ne se limite pas à la création d'images de VM, il peut aussi être utilisé pour produire des images de conteneurs.

Utilisation avec d'autres outils HashiCorp

Vagrant

Si vous travaillez en environnement de développement, Packer et Vagrant sont des partenaires idéaux. Packer peut créer des boxes qui sont ensuite utilisées par Vagrant pour créer des environnements de développement locaux. Cela permet aux développeurs de travailler avec des environnements identiques à ceux qui seront déployés en production avec Terraform.

Terraform

Packer et Terraform forment une combinaison puissante. Vous pouvez utiliser Packer pour créer des images VM, puis utiliser Terraform pour déployer ces images sur l'infrastructure de votre choix. Cela garantit une gestion cohérente et automatisée de votre infrastructure, de la création des images jusqu'à leur déploiement.

Installation de Packer

Avant de plonger dans l'installation de Packer, il est essentiel de connaître les systèmes d'exploitation sur lesquels Packer peut être exécuté. Heureusement, Packer est un outil polyvalent qui prend en charge plusieurs systèmes d'exploitation hôtes, notamment Windows, macOS et diverses distributions Linux. Cela signifie que vous pouvez l'utiliser sur la plate-forme de votre choix, ce qui le rend accessible à un large éventail d'utilisateurs.

Si vous prévoyez de créer des images VM, assurez-vous d'avoir accès aux hyperviseurs cibles. Par exemple, QEMU, VirtualBox ou VMware Workstation pour des machines locales, ou les services cloud correspondants (AWS, Azure, etc.) pour le cloud.

Installation de Packer sous Linux

Si vous utilisez une distribution Linux, vous pouvez généralement installer Packer à l'aide d'asdf.

Ouvrez votre terminal et exécutez les commandes suivantes :

asdf plugin add packer https://github.com/asdf-community/asdf-hashicorp.git
asdf install packer latest
asdf global packer latest

Installation de Packer sous macOS

Pour installer Packer sur macOS, vous pouvez utiliser Homebrew (recommandée) ou télécharger le binaire depuis le site officiel de HashiCorp.

Copy code
brew install packer

Installation de Packer sous Windows :**

Pour installer Packer sur Windows, vous pouvez télécharger l'exécutable depuis le site officiel de HashiCorp et le configurer.

  • Rendez-vous sur la page des téléchargements de Packer
  • Sélectionnez la version souhaitée pour Windows, puis téléchargez le fichier binaire (par exemple, "packer_VERSION_windows_amd64.zip").
  • Décompressez le contenu du fichier zip téléchargé vers un répertoire de votre choix.
  • Ajoutez le chemin d'accès au répertoire où se trouve le binaire Packer à la variable d'environnement PATH de Windows. Pour ce faire, recherchez "Variables d'environnement" dans les paramètres système, puis éditez la variable "PATH" en ajoutant le chemin du répertoire Packer.

Vérification de l'installation de Packer

Ouvrez une nouvelle fenêtre de commande et vérifiez l'installation en exécutant la commande :

packer --version
1.9.4

Les fichiers de configurations Packer

Lorsque vous voulez construire votre première image avec Packer, la première étape essentielle consiste à créer un fichier de configuration. Ce fichier décrit toutes les spécifications nécessaires pour la création de votre image VM. Packer prend en charge deux formats de fichiers de configuration : JSON et HCL (HashiCorp Configuration Language). Je ne vais documenter que le format HCLcar un jour le JSON sera abandonné. Un fichier Packer est constitué de quatres sections qui sont :

  • required_plugins : Les plugins Packer sont des applications distinctes et autonomes qui effectuent des tâches lors de chaque build. Le binaire packer dispose d'un ensemble de plugins intégrés qu'il peut trouver et exécuter automatiquement. Vous pouvez ajouter une liste de plugins externes dans votre fichier pour étendre les fonctionnalités de Packer sans modifier le code source principal. La liste des plugins
  • builders : Les builders sont les plateformes qui sont responsables de la création de l'image. Vous devez spécifier le type de builder, par exemple, virtualbox-iso pour VirtualBox et les paramètres spécifiques à celle-ci.
  • provisioners : Les provisioners sont utilisés pour personnaliser l'image de VM. Vous pouvez utiliser des scripts de provisionnement pour installer des logiciels, configurer des paramètres système, ou effectuer d'autres tâches de configuration. Packer prend en charge divers provisionneurs, notamment Shell, Ansible, Chef et Puppet.
  • post-processors : Les post-processors interviennent après la création de l'image VM. Ils peuvent être utilisés pour compresser l'image, l'envoyer sur des services de cloud ou effectuer d'autres actions post-création.

Voici la structure du fichier hcl :

required_plugins {
  ...
}

builders {
  ...
}

provisioners {
  ...
}

post-processors {
  ...
}

Packer permet de configurer divers aspects de l'environnement de build pour optimiser le processus de création d'images. Il est possible de spécifier des variables d'environnement, des réseaux virtuels, des paramètres d'authentification et d'autres détails pertinents dans le fichier de configuration.

Assurez-vous de comprendre les spécificités de l'environnement de build de votre plate-forme cible, que ce soit un hyperviseur local, un fournisseur de cloud ou toute autre plateforme.

Nous verrons des exemples de configuration Packer plus bas dans cette documentation.

Utilisation de variables dans le fichier de configuration Packer

Packer permet d'utiliser des variables dans le fichier de configuration pour le rendre dynamique et réutilisable. Il est possible de définir des variables, les référencer dans votre configuration et les remplir avec des valeurs spécifiques lors de l'exécution de Packer.

Par exemple, vous pourriez définir une variable pour le nom de l'image VM que vous créez et l'utiliser dans la configuration du builder pour garantir que chaque image a un nom unique.

La gestion des variables peut être particulièrement utile lorsque vous avez besoin de personnaliser vos images pour différents environnements (par exemple, développement, test, production) en utilisant la même configuration de base.

Création d'une image VM avec Packer

Une fois le fichier de configuration créé, il ne reste plus qu'à lancer le processus de build. Ouvrez une fenêtre de terminal et placez-vous dans le répertoire où se trouve votre fichier de configuration Packer. Ensuite, exécutez la commande suivante pour lancer le processus de création de l'image VM :

packer build nom_du_fichier_de_configuration

Par exemple, si votre fichier de configuration se nomme ma_configuration.pkr.hcl, la commande serait :

packer build ma_configuration.pkr.hcl

Packer commencera à créer l'image VM en fonction des spécifications que vous avez définies dans le fichier de configuration. Pendant ce processus, Packer peut communiquer avec l'hyperviseur ou le fournisseur de cloud cible pour créer la machine virtuelle, y installer un système d'exploitation de base, puis appliquer les scripts de provisionnement pour personnaliser l'image.

Packer affiche en temps réel les étapes du processus de création. Vous pourrez suivre les actions effectuées par Packer, y compris les scripts de provisionnement qui sont en cours d'exécution.

Une fois que Packer a terminé avec succès la création de l'image VM, il générera un fichier de sortie contenant l'ID de l'image ou d'autres informations pertinentes. Cette image est désormais prête à être utilisée dans votre environnement de déploiement.

Un exemple concret

Je vous propose deux de mes billets de blog où j'ai exposé comment j'utilisais Packer :

Les fichiers sont écrits en JSON, mais pour information Packer possède une option permettant de convertir les fichiers json en hcl.

packer hcl2_upgrade -with-annotations

Intégration dans un pipeline CI/CD

Packer peut être intégré dans un pipeline d'intégration continue pour automatiser la création d'images VM à chaque mise à jour d'une dépendance.

Pour la partie test des images, on peut imaginer détourner l'utilisation de Molecule (je le fais).

Bonnes pratiques et astuces

Lorsque vous travaillez avec Packer, il est essentiel de suivre certaines bonnes pratiques pour garantir l'efficacité, la sécurité et la reproductibilité de votre processus de création d'images VM. En voici quelques-unes :

1. Versionnez votre configuration : Utilisez un système de contrôle de version tel que Git pour gérer vos fichiers de configuration Packer. Cela vous permet de suivre les modifications au fil du temps, de collaborer avec d'autres membres de l'équipe et de revenir à des versions antérieures en cas de besoin.

2. Utilisez des variables : Profitez de la capacité de Packer à utiliser des variables pour rendre votre configuration plus dynamique. Les variables vous permettent de personnaliser les images pour différents environnements ou configurations.

3. Automatisez les mises à jour : Assurez-vous de maintenir régulièrement vos fichiers de configuration Packer pour inclure les dernières mises à jour de sécurité et de logiciels. L'automatisation de ce processus peut vous faire gagner du temps et garantir que vos images sont à jour.

4. Sécurisez vos variables sensibles : Si vous stockez des informations sensibles dans vos fichiers de configuration, utilisez des solutions telles que ansible-vault pour protéger ces informations.

6. Utilisez des outils de gestion de configuration : Utiliser des outils de gestion de configuration tels que Ansible, Chef ou Puppet pour garantir que vos images sont conformes aux normes de sécurité et de configuration.

7. Testez vos scripts de provisionnement : Avant de les déployer en production, testez soigneusement vos scripts de provisionnement pour vous assurer qu'ils fonctionnent comme prévu. Utilisez des environnements de test pour valider vos images.

8. Surveillez et optimisez la taille de vos images : Les images VM peuvent devenir volumineuses. Surveillez leur taille et optimisez-les si nécessaire en supprimant les fichiers inutiles ou en utilisant des techniques de compression.

9. Documentez votre processus : Tenez des notes détaillées sur votre processus de création d'images avec Packer. La documentation peut être précieuse pour comprendre les configurations spécifiques et pour former des membres de l'équipe.

10. Soyez conscient des coûts : Lorsque vous créez des images pour le cloud, tenez compte des coûts associés au stockage et à la bande passante. Supprimez les anciennes images inutilisées pour réduire les coûts.

Conclusion

Vous l'aurez compris Packer offre un moyen puissant et reproductible de créer des images VM pour une variété de plates-formes, qu'il s'agisse de machines locales, de fournisseurs de cloud ou d'environnements d'entreprise. Sa polyvalence et son intégration avec d'autres outils d'HashiCorp tels que Terraform et Vagrant en font un atout précieux pour automatiser et simplifier la gestion de l'infrastructure. L'intégration des outils de gestion de configuration tels qu'Ansible, Chef ou Puppet, apporte des moyens de rendre conforme les images produites.

En utilisant Packer, vous pouvez garantir la cohérence de vos images VM, automatiser les mises à jour du système d'exploitation, créer des environnements de développement cohérents et bien plus encore.

En conclusion, l'utilisation de Packer peut améliorer considérablement renforcer la sécurité de votre infrastructure et faciliter la gestion de vos environnements de développement et de production. Packer est un outil essentiel pour tout professionnel cherchant à automatiser la création d'images VM de manière fiable et reproductible.

Plus d'infos

Liens