Prácticas recomendadas para la administración de imágenes

En esta solución, se proporciona una guía detallada sobre cómo administrar imágenes de Compute Engine. Las imágenes brindan el entorno operativo básico para las aplicaciones que se ejecutan en Compute Engine y son fundamentales a fin de garantizar que tu aplicación se implemente y escale con rapidez y confiabilidad. También puedes usar imágenes para archivar las versiones de la aplicación en caso de recuperación ante desastres o situaciones de reversión.

Información sobre las imágenes

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

Información sobre las imágenes

Una imagen es un conjunto de bytes sin procesar que se usa para crear un disco duro propagado con anterioridad. La escritura en cualquier disco formateado es una tabla particionada que apunta a una o más particiones que contienen datos. Para que una imagen se pueda iniciar, debe contener un registro de inicio principal y una partición que se pueda iniciar. Para que un disco se importe como una imagen de Compute Engine, los bytes del disco deben escribirse en un archivo llamado disk.raw.

Una vez que la secuencia completa de bytes del disco se escribe en el archivo, este se guarda con el formato tar y, luego, se comprime mediante el formato GZIP. Luego, puedes subir el archivo *.tar.gz resultante a Cloud Storage y registrarlo como una imagen en Compute Engine, 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 que recién se registran se usan, con frecuencia, como volúmenes de inicio para las instancias de Compute Engine.

Para obtener una introducción más básica sobre estos términos de Compute Engine, consulta Instancias de máquina virtual y, también, Imágenes en la documentación.

Elige una imagen de arranque

El primer paso a fin de usar Compute Engine es elegir la imagen que deseas como sistema operativo para tu instancia de máquina virtual (VM). Puedes usar imágenes públicas que proporciona Google Cloud, que se actualizan con regularidad. Google Cloud ofrece una variedad de sistemas operativos, incluidos Debian, Ubuntu y CentOS, sin costo adicional. Algunos sistemas operativos, como Red Hat Enterprise Linux y Microsoft Windows, son imágenes premium que generan tarifas adicionales por cada hora en que las instancias se ejecutan.

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

Imagen de arranque

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

Un enfoque para configurar la instancia es usar la secuencia de comandos de inicio a fin de ejecutar los comandos que implementan la aplicación mientras se inicia. Recuerda que esta secuencia de comandos se ejecuta cada vez que la instancia se inicia, por lo que debes hacer que la secuencia de comandos sea idempotente para evitar terminar en un estado de configuración incoherente o incompleto. Si tus instancias forman parte de un grupo de instancias administrado, puedes usar el actualizador de grupos de instancias para reiniciar tus instancias o volverlas a compilar, lo que vuelve a ejecutar tu secuencia de comandos de inicio. Una práctica común es usar la secuencia de comandos de inicio para ejecutar una herramienta de administración de configuración como Chef o Ansible.

Crea imágenes personalizadas

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

  • Manual
  • Automatizada
  • Importada

El proceso de creación de una imagen personalizada se llama preparación.

La preparación de tus imágenes tiene los siguientes beneficios:

  • Menos tiempo desde el inicio hasta la preparación de aplicaciones
  • Mayor confiabilidad para las implementaciones de aplicaciones
  • Mayor facilidad para la reversión a versiones anteriores
  • Menos dependencias en servicios externos durante el arranque de aplicaciones
  • El escalamiento crea instancias que contienen versiones del software idénticas

Preparación manual

Puedes crear una imagen personalizada sencilla si creas una instancia de VM nueva desde una imagen pública. Para ello, configura la instancia con las aplicaciones y los parámetros que desees y, a continuación, crea una imagen personalizada de esa instancia. Usa este método si puedes configurar tus imágenes desde cero de forma manual, en lugar de usar la preparación automatizada o la importación de imágenes existentes.

Puedes crear una imagen personalizada simple mediante estos pasos:

  1. Crea una instancia a partir de una imagen pública.
  2. Conéctate a instancias.
  3. Personaliza la instancia según tus necesidades.
  4. Detén la instancia.
  5. Crea una imagen personalizada desde el disco de arranque de esa instancia. Este proceso requiere que borres la instancia, pero que conserves el disco de arranque.

Preparación automatizada

La preparación manual es una forma fácil de comenzar si tienes una cantidad pequeña de imágenes, sin embargo, es difícil auditar y administrar una gran cantidad de imágenes. Packer es una herramienta de código abierto que permite que preparar la creación de imágenes sea más reproducible, auditable, configurable y confiable. Para obtener más información sobre cómo crear una canalización de creación de imágenes automatizada, consulta Compilaciones automatizadas de imágenes con Jenkins, Packer y Kubernetes. También puedes usar Packer como parte de una canalización de Spinnaker para producir imágenes que se implementen en clústeres de instancias.

Importa imágenes existentes

Puedes migrar imágenes si las exportas de su infraestructura existente a Compute Engine. En cuanto a las máquinas con Linux, esta es una guía detallada sobre la migración de las imágenes de disco RAW, las imágenes de máquina de Amazon (AMI) y las imágenes de VirtualBox.

Otra opción para importar tus imágenes existentes es usar Google Cloud Migrate for Compute Engine.

Migrate for Compute Engine 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 una replicación continua a nivel de bloque. Puedes migrar tus máquinas a Compute Engine y, luego, usar la preparación manual para crear imágenes.

Encripta imágenes

Todos los discos en Compute Engine se encriptan de forma predeterminada mediante claves de encriptación de Google. También se encriptan las imágenes compiladas desde discos. Por otra parte, puedes proporcionar tus propias claves de encriptación cuando se crean los discos. Una vez creado el disco, puedes crear una imagen encriptada si proporcionas tus claves de encriptación al comando de creación de imagen. Para obtener más información sobre la encriptación en reposo y las claves de encriptación proporcionadas por el cliente, consulta Encriptación en reposo en la documentación de Google Cloud.

Ciclo de vida de la imagen

Después de configurar una canalización de compilación de imágenes, puedes usar imágenes para iniciar instancias de una aplicación de manera confiable. Si bien la canalización puede controlar la creación de 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, necesitarás un proceso para seleccionar imágenes, de modo tal que las imágenes anteriores y obsoletas no se usen de forma involuntaria.

Familias de imágenes

Las familias de imágenes te ayudan a administrar las imágenes de tu proyecto, ya que agrupan las imágenes relacionadas para que puedas implementar o revertir entre versiones de imágenes específicas. Para obtener más información, consulta las Prácticas recomendadas de familias de imágenes.

Da de baja una imagen

Como administrador, también puedes revertir la imagen a la que apunta la familia de imágenes. Para ello, debes dar de baja la imagen mediante el siguiente comando:

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

Puedes elegir entre varios estados de baja:

Estado Descripción
DEPRECATED Imágenes que ya no son las más recientes, pero que los usuarios aún pueden lanzar. Los usuarios verán una advertencia al momento del lanzamiento que ya no usan la imagen más reciente.
OBSOLETE Imágenes que los usuarios o la automatización no deberían lanzar. No se podrá crear una instancia desde estas imágenes. Puedes usar este estado de imagen para guardar imágenes, por lo que tus datos aún estarán disponibles cuando se activen como un disco que no sea de arranque.
DELETED Las imágenes que ya se borraron o se marcaron para su eliminación en el futuro. Estas no se pueden iniciar y debes borrarlas cuanto antes.

Aplica políticas de ciclo de vida

Puedes marcar imágenes para su obsolescencia o eliminación mediante el comando gcloud compute images deprecate. Puedes adjuntar metadatos a las imágenes a fin de marcarlas para su eliminación futura si proporcionas una de las marcas --delete-in o --delete-on. Si deseas adjuntar metadatos a fin de marcar imágenes para su obsolescencia futura, 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 del ciclo de vida de la imagen que restrinja la proliferación de imágenes obsoletas y expiradas en tu proyecto. Por ejemplo, al final de tu canalización de compilación de imágenes, puedes incluir una marca adicional para las imágenes que deben quedar obsoletas o borrarse y, luego, realizar esas acciones de forma explícita.

Si bien las imágenes obsoletas y borradas ya no se mostrarán a través de la API y la IU de forma predeterminada, puedes verlas si proporcionas la marca --show-deprecated. Para borrar de forma completa la imagen y sus datos, debes enviar un comando delete explícito a esa imagen.

Comparte imágenes entre proyectos

A menudo, las organizaciones crean varios proyectos de Google Cloud para particionar sus recursos, entornos y acceso del usuario. El aislamiento de los recursos en proyectos permite la facturación detallada, la aplicación de políticas de seguridad y las Herramientas de redes segregadas. A pesar de que la mayoría de los recursos no necesitan abarcar varios proyectos, las imágenes son buenas candidatas para compartirse en todos los proyectos. Si usas un conjunto compartido de imágenes, puedes seguir un proceso común a fin de entregar imágenes con las prácticas recomendadas de seguridad, autorización, administración de paquetes y operaciones configuradas con anterioridad para el resto de la organización.

Compartir imágenes

Puedes compartir imágenes mediante la asignación de funciones de IAM a proyectos de una organización. El proyecto que contiene las imágenes que deseas compartir con otros proyectos, definido en el diagrama anterior como “Proyecto de creación de imágenes”, debe tener aplicadas las siguientes políticas y funciones de IAM:

  1. Permitir que los usuarios del “Grupo de usuarios de imágenes” creen instancias a partir de estas imágenes otorgándoles la función compute.imageUser
  2. Permitir que el “Usuario de creación de imágenes” cree instancias en este proyecto otorgándole la función compute.instanceAdmin
  3. Permitir que el “Usuario de creación de imágenes” cree imágenes y discos en este proyecto otorgándole la función compute.storageAdmin

Los proyectos que deseas que usen las imágenes compartidas deben permitir que los usuarios con la función compute.imageUser creen instancias mediante la asignación de la función compute.instanceAdmin.

Para obtener instrucciones más detalladas sobre cómo compartir imágenes entre proyectos, consulta Comparte imágenes en todos los proyectos en la documentación de Compute Engine.

Próximos pasos