Bonnes pratiques pour la gestion des images

Cette solution fournit des conseils détaillés sur la gestion des images Google 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 vers une ou plusieurs partitions contenant des données. Pour qu'une image soit amorçable, elle doit contenir un enregistrement de démarrage maître et une partition amorçable. 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 Google Cloud Storage et l'enregistrer en tant qu'image dans Compute Engine, comme illustré dans le diagramme précédent. Après avoir enregistré une image, vous pouvez l'utiliser pour créer des instances dupliquées exactes du disque d'origine dans n'importe quelle région Google Cloud Platform. Les nouvelles images 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 sections Instances de VM et Images dans 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 Platform, qui sont mises à jour régulièrement. Cloud Platform 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 particulière, par exemple connaître 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 Cloud Platform 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 dans une configuration incohérente ou partielle. Si les instances font partie d'un groupe d'instances géré, vous pouvez utiliser Instance Group Updater 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 des configurations tel que Chef ou Ansible.

Créer des images personnalisées

Bien que la configuration du script de démarrage d'une instance soit un moyen viable de provisionner l'infrastructure, une méthode plus efficace consiste à créer une nouvelle image personnalisée en intégrant votre configuration à l'image publique. Vous pouvez personnaliser les images 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 nouvelle 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. Optez pour cette méthode si vous pouvez configurer vos images manuellement à partir de zéro plutôt que d'utiliser le processus "image baking" automatique ou Importer des 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, contrôlable, configurable et fiable. Pour en savoir plus sur la mise en place d'un pipeline de création d'images automatisé, consultez 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 migrer des images en les exportant de leur infrastructure existante vers Compute Engine. Pour les machines Linux, voici un guide détaillé sur la migration des images disque RAW, Amazon Machine Images (AMI) et VirtualBox.

Une autre option pour importer des images existantes consiste à utiliser un service de migration payant tel que CloudEndure. CloudEndure est une chaîne d'outils et de services en ligne qui facilite la migration des machines d'une plateforme vers une autre, avec un temps d'arrêt minimal grâce à une réplication continue au niveau du bloc. Avec CloudEndure, 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éé, pour en produire une image chiffrée, indiquez 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 section Chiffrement au repos de la documentation Google Cloud Platform.

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.

Utiliser des familles d'images

Compute Engine fournit des familles d'images pour vous aider à faire en sorte que vos systèmes d'automatisation et les utilisateurs exécutent les dernières images. En tant qu'administrateur, vous pouvez regrouper un ensemble d'images appartenant à la même application ou au même cas d'utilisation en tant que famille. Ainsi, les utilisateurs ne doivent retenir que le nom de la famille, plutôt que le nom exact d'une image. Comme les noms d'image doivent être uniques, les pipelines de création d'images créent souvent des noms avec des informations codées, telles que le nom de l'application, la date et la version, par exemple my-application-v3-20161011. Au lieu de modifier les outils automatisés qui dirigent les utilisateurs vers la dernière image en propageant le nom spécifique vers d'autres systèmes, vous pouvez simplement référencer le nom de la famille d'images, qui renverra toujours à la dernière image de la famille, par exemple, my-application.

Familles d'images

Pour ajouter une image à une famille ou créer une famille s'il n'en existe aucune, ajoutez l'indicateur --image-family à l'étape de la création de l'image. Par exemple :

gcloud compute images create my-application-v3-20161011 --source-disk my-application-disk-1 --source-disk-zone us-central1-f --family my-application

Une fois cette commande exécutée, tous les appels d'exécution d'une instance basée sur l'image my-application pointeront vers l'image qui vient d'être créée, my-application-v3-20161011.

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 afin qu'elle soit prochainement supprimée ou rendue obsolète, utilisez la commande gcloud compute images deprecate. Pour la marquer en vue de sa suppression prochaine, joignez-lui des métadonnées avec l'indicateur --delete-in ou --delete-on. Pour la marquer afin de la rendre obsolète à l'avenir, joignez-lui des métadonnées avec l'indicateur --obsolete-in ou --obsolete-on. Vous pouvez intégrer cette commande dans un processus de création d'image pour appliquer une règle de cycle de vie et limiter la prolifération d'images obsolètes 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 des images devant être marquées comme 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 via l'API et l'UI par défaut, vous pouvez toujours les voir via l'indicateur --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 Cloud Platform 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.

Partage d'images

Pour partager des images, vous devez attribuer 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 diagramme ci-dessus "Image Creation Project" (Projet de création d'image) doit disposer des rôles et des stratégies IAM suivants :

  1. Autorisez le groupe des utilisateurs d'images ("Image User Group") à créer des instances à partir de ces images en lui attribuant le rôle compute.imageUser.
  2. Autorisez l'utilisateur de création d'images ("Image Creation User") à créer des instances dans ce projet en lui attribuant le rôle compute.instanceAdmin.
  3. Autorisez l'utilisateur de création d'images ("Image Creation User") à créer des images et des disques dans ce projet en lui attribuant 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, attribuez-leur le rôle compute.instanceAdmin.

Pour en savoir plus sur le partage d'images entre projets, consultez Partager des images, des instantanés et des disques dans la documentation Compute Engine.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…