Prácticas recomendadas para gestionar imágenes


Esta solución ofrece información detallada sobre cómo gestionar imágenes de Compute Engine. Las imágenes proporcionan el entorno operativo base para las aplicaciones que se ejecutan en Compute Engine y son fundamentales para que tu aplicación se despliegue y se escale de forma rápida y fiable. También puedes usar imágenes para archivar versiones de aplicaciones en caso de recuperación tras fallos o de reversión.

Información sobre las imágenes

Una imagen de Compute Engine es un recurso de nube que proporciona una referencia a un disco inmutable. Esa representación del disco se encapsula mediante algunos formatos de datos.

Interpretar imágenes.

Una imagen es un paquete de bytes sin procesar que se usa para crear un disco duro rellenado previamente. En cualquier disco formateado se escribe una tabla de particiones que apunta a una o varias particiones que contienen datos. Para que una imagen sea arrancable, debe contener lo siguiente:

Para importar un disco como imagen de Compute Engine, los bytes del disco deben escribirse en un archivo llamado disk.raw.

Una vez que se ha escrito en el archivo la secuencia completa de bytes del disco, el archivo se archiva con el formato tar y, a continuación, se comprime con el formato GZIP. A continuación, puedes subir el archivo *.tar.gz resultante a Cloud Storage y registrarlo como imagen en Compute Engine, tal como se muestra en el diagrama anterior. Después de registrar una imagen, puedes usarla para crear réplicas exactas del disco original en cualquier región de Google Cloud. Las imágenes recién registradas se suelen usar como volúmenes de arranque para las instancias de Compute Engine.

Para obtener una introducción más básica a estos términos de Compute Engine, consulta los artículos sobre instancias de máquinas virtuales y imágenes de la documentación.

Elegir una imagen de arranque

El primer paso para usar Compute Engine es elegir la imagen que quieras usar como sistema operativo de tu instancia de máquina virtual (VM). Puedes usar imágenes públicas proporcionadas por Google Cloud, que se actualizan periódicamente. Google Cloud ofrece una variedad de sistemas operativos, como Debian, Ubuntu y CentOS, que puedes usar sin coste adicional. Algunos sistemas operativos, como Red Hat Enterprise Linux y Microsoft Windows, son imágenes premium, por lo que se aplican tarifas adicionales por cada hora que se ejecuten las instancias.

Para obtener más información sobre una imagen concreta, como las políticas de actualización automática, los parches de seguridad y los canales de asistencia, consulta la sección Detalles del sistema operativo de la documentación del producto.

Para aumentar la seguridad, también puedes usar la función de imagen de confianza para definir una política de la organización que impida que se usen imágenes de proyectos de imágenes públicas específicos para crear imágenes de arranque.

Imagen de arranque.

Puedes usar las Google Cloud imágenes públicas para arrancar una instancia de Compute Engine y, después, personalizarla para ejecutar tu aplicación.

Una forma de configurar tu instancia es usar la secuencia de comandos de inicio para ejecutar los comandos que implementan tu aplicación al arrancar. Ten en cuenta que esta secuencia de comandos se ejecuta cada vez que se inicia la instancia, por lo que debes hacer que la secuencia de comandos sea idempotente para evitar que se produzca un estado incoherente o parcialmente configurado. Si tus instancias forman parte de un grupo de instancias gestionado, puedes usar Instance Group Updater para reiniciar o recompilar tus instancias, lo que vuelve a ejecutar tu secuencia de comandos de inicio. Una práctica habitual es usar la secuencia de comandos de inicio para ejecutar una herramienta de gestión de la configuración, como Chef o Ansible.

Crear imágenes personalizadas

Aunque configurar la secuencia de comandos de inicio de una instancia es una forma viable de aprovisionar tu infraestructura, un método más eficiente es crear una imagen personalizada nueva con tu configuración incorporada en la imagen pública. Puedes personalizar las imágenes de varias formas:

  • Manual
  • Automatizada
  • Importar

El proceso de creación de una imagen personalizada se denomina compilación.

Al acoplar las imágenes, se obtienen las siguientes ventajas:

  • Se reduce el tiempo que transcurre desde el inicio hasta que la aplicación está lista.
  • Se ha mejorado la fiabilidad de las implementaciones de aplicaciones.
  • Restauración más sencilla de versiones anteriores.
  • Menor número de dependencias de servicios externos durante el arranque de la aplicación.
  • Al aumentar la escala, se crean instancias que contienen versiones de software idénticas.

Compilación manual

Puedes crear una imagen personalizada sencilla creando una instancia de VM a partir de una imagen pública, configurando la instancia con las aplicaciones y los ajustes que quieras y, a continuación, creando una imagen personalizada a partir de esa instancia. Usa este método si puedes configurar tus imágenes desde cero manualmente en lugar de usar la compilación automática o importar imágenes.

Para crear una imagen personalizada sencilla, siga estos pasos:

  1. Crea una instancia a partir de una imagen pública.
  2. Conéctate a la instancia.
  3. Personaliza la instancia según tus necesidades.
  4. Detén la instancia.
  5. Crea una imagen personalizada a partir del disco de arranque de esa instancia. Para llevar a cabo este proceso, debes eliminar la instancia, pero conservar el disco de arranque.

Compilación automatizada

El horneado manual es una forma sencilla de empezar si tienes un número reducido de imágenes, pero si tienes muchas, resulta difícil auditar y gestionar. Packer es una herramienta de código abierto que permite que la creación de imágenes sea más reproducible, auditable, configurable y fiable. También puedes usar Packer como parte de una canalización de Spinnaker para generar imágenes que se implementen en clústeres de instancias.

Importar imágenes

Puedes importar imágenes de disco de arranque desde tu infraestructura a Compute Engine mediante la herramienta de importación de discos virtuales, que automatiza el proceso de importación de imágenes. En el caso de las máquinas Linux, consulta esta guía detallada para migrar manualmente imágenes de disco RAW, imágenes de máquina de Amazon (AMI) e imágenes de VirtualBox.

Otra opción para importar tus imágenes es usar Migrate to Virtual Machines.

Migrate to Virtual Machines es una cadena de herramientas y un servicio que facilita la migración de máquinas de una plataforma a otra con un tiempo de inactividad mínimo mediante la replicación continua a nivel de bloque. Puedes migrar tus máquinas a Compute Engine y, a continuación, usar la compilación manual para crear imágenes.

Cifrar imágenes

Todos los discos de Compute Engine están encriptados de forma predeterminada con las claves de encriptado de Google. Las imágenes creadas a partir de discos también están cifradas. También puedes proporcionar tus propias claves de cifrado al crear los discos. Una vez que hayas creado el disco, podrás crear una imagen cifrada proporcionando tus claves de cifrado al comando de creación de imágenes. Para obtener más información sobre el cifrado en reposo y las claves de cifrado proporcionadas por el cliente, consulta el artículo Cifrado en reposo de la Google Cloud documentación.

Ciclo de vida de las imágenes

Una vez que hayas configurado una canalización de compilación de imágenes, podrás usar imágenes para iniciar instancias de una aplicación de forma fiable. Aunque la canalización puede crear imágenes, también debes asegurarte de que tus mecanismos de implementación usen las versiones más recientes de las imágenes. Por último, necesitas un proceso para seleccionar imágenes, de forma que no se usen imágenes antiguas ni obsoletas por error.

Familias de imágenes

Las familias de imágenes te ayudan a gestionar las imágenes de tu proyecto agrupando las imágenes relacionadas para que puedas avanzar y retroceder entre versiones específicas de una imagen. Para obtener más información, consulta las prácticas recomendadas para familias de imágenes.

Desactivar una imagen

Como administrador, también puedes restaurar la imagen a la que apunta la familia de imágenes retirando la imagen con el siguiente comando:

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

Puedes elegir entre varios estados de obsolescencia:

Estado Descripción
OBSOLETO Imágenes que ya no son las más recientes, pero que los usuarios pueden seguir iniciando. Los usuarios verán una advertencia al iniciar la aplicación que les indicará que ya no están usando la imagen más reciente.
OBSOLETE Imágenes que no deberían iniciar los usuarios ni la automatización. Si intentas crear una instancia a partir de estas imágenes, no funcionará. Puedes usar este estado de imagen para archivar imágenes de forma que sus datos sigan estando disponibles cuando se monten como un disco que no sea de arranque.
ELIMINADO Imágenes que ya se han eliminado o que se eliminarán en el futuro. No se pueden iniciar, por lo que debes eliminarlas lo antes posible.

Aplicar políticas de ciclo de vida

Puedes marcar imágenes para que se eliminen o se consideren obsoletas con el comando gcloud compute images deprecate. Puedes adjuntar metadatos a las imágenes para marcarlas y eliminarlas más adelante. Para ello, proporciona una de las marcas --delete-in o --delete-on. Para adjuntar metadatos que marquen las imágenes para que queden obsoletas en el futuro, proporciona las marcas --obsolete-in o --obsolete-on. Puedes incorporar este comando a un proceso de compilación de imágenes para aplicar una política de ciclo de vida de las imágenes que restrinja la proliferación de imágenes obsoletas y caducadas en tu proyecto. Por ejemplo, al final de tu canalización de compilación de imágenes, puedes incluir una comprobación adicional de las imágenes que deban retirarse o eliminarse y, a continuación, realizar esas acciones de forma explícita.

Aunque las imágenes obsoletas y eliminadas ya no se muestran de forma predeterminada a través de la API y la interfaz de usuario, puedes seguir viéndolas si proporcionas la marca --show-deprecated. Para eliminar por completo la imagen y sus datos, debes enviar un comando de eliminación explícito para esa imagen.

Compartir imágenes entre proyectos

Las organizaciones suelen crear varios Google Cloud proyectos para particionar sus recursos, entornos y acceso de usuarios. Aislar los recursos en proyectos permite una facturación granular, la aplicación de medidas de seguridad y la segregación de la red. Aunque la mayoría de los recursos en la nube no necesitan abarcar varios proyectos, las imágenes son una buena opción para compartirlas entre proyectos. Si usas un conjunto compartido de imágenes, puedes seguir un proceso común para ofrecer imágenes con las prácticas recomendadas de seguridad, autorización, gestión de paquetes y operaciones preconfiguradas para el resto de la organización.

Compartir imágenes.

Para compartir imágenes, debes asignar roles de IAM a los proyectos de una organización. El proyecto que contiene las imágenes que quieres compartir con otros proyectos, al que se hace referencia en el diagrama anterior como "Proyecto de creación de imágenes", debe tener aplicados los siguientes roles y políticas de gestión de identidades y accesos:

  1. Permite que los usuarios del grupo de usuarios de imágenes creen instancias a partir de estas imágenes concediéndoles el rol compute.imageUser.
  2. Permite que el usuario "Image Creation User" cree instancias en este proyecto asignándole el rol compute.instanceAdmin.
  3. Permite que el usuario "Image Creation User" cree imágenes y discos en este proyecto asignándole el rol compute.storageAdmin.

En los proyectos en los que quieras usar las imágenes compartidas, debes permitir que los usuarios con el rol compute.imageUser creen instancias asignándoles el rol compute.instanceAdmin.

Para obtener instrucciones más detalladas sobre cómo compartir imágenes entre proyectos, consulta el artículo Compartir imágenes entre proyectos de la documentación de Compute Engine.

Siguientes pasos