Bonnes pratiques pour la gestion des images

Cette solution fournit des conseils détaillés sur la gestion des images Compute Engine. Les images fournissent l'environnement d'exploitation de base pour les applications exécutées dans Compute Engine. Elles sont essentielles pour garantir que votre application se déploie et évolue rapidement et de manière fiable. Vous pouvez également utiliser des images pour archiver des versions d'applications dans des scénarios de reprise après sinistre ou de rollback.

Comprendre les images

Dans Compute Engine, une image est une ressource cloud qui renvoie à un disque immuable. Cette représentation de disque est ensuite encapsulée dans différents formats de données.

Comprendre les images

Une image est un lot d'octets bruts utilisé pour créer un disque dur prérempli. Tous les disques formatés comportent une table de partition qui pointe sur une ou plusieurs partitions contenant des données. Pour qu'une image soit amorçable, elle doit contenir les éléments suivants :

Pour qu'un disque soit importé en tant qu'image Compute Engine, ses octets doivent être écrits dans un fichier nommé disk.raw.

Une fois la séquence complète d'octets du disque écrite dans le fichier, celui-ci est archivé au format TAR, puis compressé au format GZIP. Vous pouvez ensuite importer le fichier *.tar.gz dans Cloud Storage et l'enregistrer en tant qu'image dans Compute Engine, comme indiqué dans le schéma précédent. Après avoir enregistré une image, vous pouvez l'utiliser pour créer des instances dupliquées à l'identique du disque d'origine, dans n'importe quelle région Google Cloud. Les images nouvellement enregistrées sont souvent utilisées en tant que volumes de démarrage pour les instances Compute Engine.

Pour une présentation plus sommaire de ces termes Compute Engine, consultez les pages Instances de machines virtuelles et Images de la documentation.

Choisir une image de démarrage

Lorsque vous utilisez Compute Engine, la première étape consiste à choisir l'image que vous souhaitez utiliser en tant que système d'exploitation pour votre instance de machine virtuelle (VM). Vous pouvez vous servir d'images publiques fournies par Google Cloud, qui sont mises à jour régulièrement. Google Cloud propose différents systèmes d'exploitation, tels que Debian, Ubuntu et CentOS, sans frais supplémentaires. L'image de certains systèmes d'exploitation, tels que Red Hat Enterprise Linux et Microsoft Windows, est payante et entraîne des frais supplémentaires pour chaque heure d'exécution des instances.

Pour en savoir plus sur une image donnée, par exemple pour obtenir des informations sur les règles de mise à jour automatique, l'application de correctifs de sécurité et les canaux d'assistance, consultez la section Détails des systèmes d'exploitation de la documentation.

Image de démarrage

Vous pouvez utiliser une image publique Google Cloud pour démarrer une instance Compute Engine, puis personnaliser l'instance de sorte qu'elle exécute votre application.

Pour configurer l'instance, une approche consiste à utiliser le script de démarrage pour exécuter les commandes permettant de déployer votre application au démarrage. N'oubliez pas que ce script s'exécute à chaque démarrage de l'instance. Vous devez donc le rendre idempotent pour éviter de vous retrouver avec une configuration incohérente ou partielle. Si les instances font partie d'un groupe d'instances géré, vous pouvez utiliser l'outil de mise à jour de groupe d'instances pour les redémarrer ou les recompiler, ce qui réexécute le script de démarrage. Une pratique courante consiste à utiliser le script de démarrage pour exécuter un outil de gestion de la configuration tel que Chef ou Ansible.

Créer des images personnalisées

Même si la configuration du script de démarrage d'une instance permet effectivement de provisionner l'infrastructure, ce n'est pas la méthode la plus efficace : vous pouvez aussi créer une image personnalisée en intégrant votre configuration dans l'image publique. Les images peuvent être personnalisées de plusieurs manières :

  • Manuellement
  • Automatiquement
  • Par importation

Le processus de création d'une image personnalisée s'appelle baking.

Ce processus présente les avantages suivants :

  • Délai raccourci entre le démarrage et la préparation de l'application
  • Fiabilité améliorée pour le déploiement d'applications
  • Rollback plus facile vers des versions antérieures
  • Moins de dépendance à l'égard de services externes lors de l'amorçage de l'application
  • Capacité augmentée permettant de créer des instances contenant des versions de logiciel identiques

Processus "image baking" manuel

Pour obtenir une image personnalisée simple, créez une instance de VM à partir d'une image publique en configurant l'instance avec les applications et les paramètres de votre choix, puis en produisant une image personnalisée à partir de cette instance. Si vous pouvez configurer vos images manuellement à partir de zéro, préférez cette méthode à l'utilisation du processus "image baking" automatique ou à l'importation d'images existantes.

Pour créer une image personnalisée simple, procédez comme suit :

  1. Créez une instance à partir d'une image publique.
  2. Connectez-vous à l'instance.
  3. Personnalisez l'instance en fonction de vos besoins.
  4. Arrêtez l'instance.
  5. Créez une image personnalisée à partir du disque de démarrage de cette instance. Pour ce processus, vous devez supprimer l'instance, mais conserver le disque de démarrage.

Processus "image baking" automatique

Le processus "image baking" manuel est un moyen facile de commencer si vous avez un petit nombre d'images, mais pas idéal si vous disposez d'un grand nombre d'images, car elles seront difficiles à auditer et à gérer. Packer est un outil Open Source qui rend la création d'images plus reproductible, auditable, configurable et fiable. Pour en savoir plus sur la mise en place d'un pipeline de création d'images automatisé, consultez la page Générer une image automatisée avec Jenkins, Packer et Kubernetes. Vous pouvez également utiliser Packer dans le cadre d'un pipeline Spinnaker pour produire des images déployées sur des clusters d'instances.

Importer des images existantes

Vous pouvez importer des images de disque de démarrage depuis leur infrastructure existante vers Compute Engine à l'aide de l'outil d'importation de disque virtuel qui automatise le processus d'importation d'images. Pour les machines Linux, voici un guide détaillé sur la migration manuelle des images disque RAW, des images AMI (Amazon Machine Images) et des images VirtualBox.

Une autre option pour importer des images existantes consiste à utiliser Google Cloud Migrate for Compute Engine.

Migrate for Compute Engine se compose d'une chaîne d'outils et d'un service qui facilitent la migration des machines d'une plate-forme à une autre avec un temps d'arrêt minimal grâce à la réplication continue au niveau du bloc. Vous pouvez migrer vos machines vers Compute Engine, puis utiliser le processus "image baking" manuel pour créer des images.

Chiffrer des images

Tous les disques Compute Engine sont chiffrés par défaut à l'aide des clés de chiffrement de Google, de même que les images disque. Vous avez également la possibilité de fournir vos propres clés de chiffrement lors de la création des disques. Une fois le disque créé, vous pouvez en produire une image chiffrée en indiquant vos clés de chiffrement dans la commande de création de l'image. Pour en savoir plus sur le chiffrement au repos et les clés de chiffrement fournies par le client, consultez la page Chiffrement au repos de la documentation Google Cloud.

Cycle de vie des images

Une fois que vous avez configuré un pipeline de création d'images, vous pouvez utiliser des images pour lancer les instances d'une application de manière fiable. Même si le pipeline peut gérer la création d'images, vous devez également vous assurer que vos mécanismes de déploiement utilisent les versions les plus récentes des images. Enfin, vous avez besoin d'un processus de traitement des images, de sorte que les images anciennes et obsolètes ne soient pas utilisées par inadvertance.

Familles d'images

Les familles d'images vous aident à gérer les images de votre projet en regroupant les images corrélées pour que vous puissiez déployer ou restaurer des versions spécifiques d'une image. Pour en savoir plus, consultez les bonnes pratiques concernant les familles d'images.

Rendre une image obsolète

En tant qu'administrateur, vous pouvez également effectuer le rollback de l'image vers laquelle la famille renvoie en la rendant obsolète, à l'aide de la commande suivante :

gcloud compute images deprecate my-application-v3-20161011 --state DEPRECATED

Différents états d'obsolescence sont possibles :

État Description
OBSOLÈTE Image qui n'est pas la plus récente, mais que les utilisateurs peuvent toujours lancer. Un avertissement s'affichera lors du lancement pour leur indiquer qu'ils n'utilisent plus l'image la plus récente.
PÉRIMÉE Image qui ne doit pas être lancée ni par les utilisateurs, ni de façon automatisée. Toute tentative de création d'une instance à partir d'une image de ce type échouera. Vous pouvez utiliser cet état pour archiver des images afin que leurs données soient toujours disponibles lorsqu'elles sont installées en tant que disque non amorçable.
SUPPRIMÉE Image supprimée ou marquée pour une suppression ultérieure. Les images de ce type ne peuvent pas être lancées et vous devez les supprimer dès que possible.

Appliquer des règles de cycle de vie

Pour marquer une image en vue de la supprimer ou de la rendre obsolète, utilisez la commande gcloud compute images deprecate. Si vous souhaitez la marquer pour qu'elle soit supprimée par la suite, joignez-lui des métadonnées avec l'option --delete-in ou --delete-on. Si vous souhaitez la marquer pour qu'elle soit rendue obsolète par la suite, joignez-lui des métadonnées avec l'option --obsolete-in ou --obsolete-on. Vous pouvez intégrer cette commande dans un processus de création d'images pour appliquer une règle de cycle de vie limitant la prolifération d'images non actualisées et expirées dans votre projet. Par exemple, à la fin de votre pipeline de création d'images, vous pouvez inclure une vérification supplémentaire permettant d'identifier les images devant être rendues obsolètes ou supprimées, puis effectuer ces actions de manière explicite.

Bien que les images obsolètes et supprimées ne soient plus affichées par défaut via l'API ni dans l'interface utilisateur, vous pouvez toujours les voir en spécifiant l'option --show-deprecated. Pour supprimer complètement l'image et ses données, envoyez une commande de suppression explicite.

Partager des images entre projets

Les organisations créent souvent plusieurs projets Google Cloud pour partitionner leurs ressources, leurs environnements et l'accès des utilisateurs. L'isolation des ressources dans des projets permet une facturation précise, l'application de mesures de sécurité et la mise en réseau séparée. Bien que la plupart des ressources cloud ne nécessitent pas ce type de répartition, les images se prêtent très bien au partage sur plusieurs projets. Avec un ensemble d'images partagé, vous pouvez suivre un processus commun de fourniture d'images qui respecte les bonnes pratiques en matière de sécurité, d'autorisation, de gestion des packages et d'opérations préconfigurées pour l'ensemble de l'organisation.

Partager des images

Pour partager des images, vous devez affecter des rôles IAM aux projets d'une organisation. Le projet contenant les images que vous souhaitez partager avec d'autres projets, appelé dans le schéma ci-dessus "Image Creation Project" (Projet de création d'images), doit être assorti des rôles et stratégies IAM suivants :

  1. Autorisez les membres du groupe des utilisateurs d'images ("Image User Group") à créer des instances à partir de ces images en leur affectant le rôle compute.imageUser.
  2. Autorisez l'utilisateur créateur d'images ("Image Creation User") à créer des instances dans ce projet en lui affectant le rôle compute.instanceAdmin.
  3. Autorisez l'utilisateur créateur d'images ("Image Creation User") à créer des images et des disques dans ce projet en lui affectant le rôle compute.storageAdmin.

Les projets pour lesquels vous souhaitez pouvoir utiliser les images partagées doivent permettre aux utilisateurs qui ont le rôle compute.imageUser de créer des instances. Pour ce faire, affectez-leur le rôle compute.instanceAdmin.

Pour en savoir plus, consultez la page traitant du partage d'images entre projets de la documentation Compute Engine.

Étapes suivantes