Crear imágenes personalizadas


Puedes crear imágenes personalizadas a partir de discos de origen, imágenes, instantáneas o imágenes almacenadas en Cloud Storage y usarlas para crear instancias de máquinas virtuales (VM). Las imágenes personalizadas son ideales para situaciones en las que creaste y modificaste un disco de arranque persistente o una imagen específica a un cierto estado y necesitas guardar ese estado para crear las VM.

De forma alternativa, puedes usar la herramienta de importación de disco virtual para importar imágenes de disco de arranque a Compute Engine desde los sistemas existentes y agregarlas a tu lista de imágenes personalizadas.

Antes de comenzar

Crea una imagen personalizada

En esta sección, se describe cómo crear una imagen personalizada en una VM de Linux. Si deseas obtener información para crear una imagen de Windows, consulta Crea una imagen de Windows.

Selecciona una ubicación de almacenamiento de imágenes

Cuando creas una imagen personalizada, puedes especificar la ubicación de almacenamiento de la imagen en Cloud Storage, sin incluir las ubicaciones birregionales. Si especificas la ubicación de almacenamiento de imágenes, cumplirás con las necesidades de alta disponibilidad y los requisitos de cumplimiento y regulatorios para la localidad de datos mediante la garantía de la redundancia en todas las regiones. Para crear, modificar y borrar imágenes almacenadas en Cloud Storage, debes tener roles/compute.storageAdmin.

La función de ubicación de almacenamiento es opcional. Si no seleccionas una ubicación, Compute Engine almacena la imagen en la multirregión más cercana a la fuente de la imagen. Por ejemplo, cuando creas una imagen desde un disco de origen ubicado en us-central1, y si no especificas una ubicación para la imagen personalizada, Compute Engine almacena la imagen en la multirregión us.

Si la imagen no está disponible en una región en la que creas una VM, Compute Engine la almacena en caché la primera vez que creas una VM.

Para ver la ubicación en la que se almacena una imagen, usa el comando images describe de gcloud compute:

gcloud compute images describe IMAGE_NAME \
    --project=PROJECT_ID

Reemplaza lo siguiente:

  • IMAGE_NAME: Es el nombre de tu imagen.

  • PROJECT_ID: Es el ID del proyecto al que pertenece la imagen.

Todas las imágenes existentes antes del lanzamiento de esta función permanecen donde están, el único cambio es que puedes ver la ubicación de todas las imágenes. Si tienes una imagen existente que deseas mover, debes volver a crearla en la ubicación deseada.

Prepara la VM para una imagen

Puedes crear una imagen desde un disco aunque esté conectada a una VM en ejecución. Sin embargo, la imagen es más confiable si colocas la VM en un estado que sea más fácil de capturar para la imagen. En esta sección, se describe cómo preparar el disco de arranque para la imagen.

Minimiza la escritura de datos en el disco persistente

Usa uno de los siguientes procesos para reducir las escrituras en el disco:

  • Detén la VM para que pueda cerrarse y dejar de escribir datos en el disco persistente.

  • Si no puedes detener la VM antes de crear la imagen, minimiza la cantidad de escrituras en el disco y sincroniza el sistema de archivos. Para minimizar la escritura en tu disco persistente, sigue estos pasos:

    1. Pausa las apps o procesos del sistema operativo que escriben datos en ese disco persistente.
    2. Si es necesario, ejecuta una limpieza de la app en el disco. Por ejemplo, MySQL tiene una declaración FLUSH. Otras aplicaciones pueden tener procesos similares.
    3. Evita que tus apps escriban en el disco persistente.
    4. Ejecuta sudo sync.

Inhabilita la opción de eliminación automática para el disco

De forma predeterminada, la opción de eliminación automática está habilitada en los discos de arranque. Antes de crear una imagen desde un disco, inhabilita la eliminación automática para asegurarte de que el disco no se borre de forma automática cuando borres la VM.

Puedes usar Google Cloud Console, Google Cloud CLI o la API de Compute Engine a fin de inhabilitar la eliminación automática para el disco.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en la VM que usas como fuente para crear una imagen. Aparecerá la página Detalles de la instancia de VM.

  3. Haz clic en Edit.

  4. En la sección Disco de arranque, para la Regla de eliminación, asegúrate de que la opción Mantener disco esté seleccionada.

  5. Haz clic en Guardar.

gcloud

En Google Cloud CLI, usa el comando gcloud compute instances set-disk-auto-delete a fin de inhabilitar la opción de eliminación automática para el disco.

gcloud compute instances set-disk-auto-delete VM_NAME \
    --no-auto-delete \
    --disk=SOURCE_DISK

Reemplaza lo siguiente:

  • VM_NAME por el nombre de tu instancia de VM.
  • SOURCE_DISK: Es el nombre del disco a partir del cual deseas crear la imagen.

API

Si quieres configurar la opción de eliminación automática de un disco, realiza una solicitud POST al método instances.setDiskAutoDelete.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setDiskAutoDelete?autoDelete=false&deviceName=SOURCE_DISK

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto al que pertenece la VM de origen.
  • ZONE: Es la zona donde se ubica la VM de origen.
  • VM_NAME: Es el nombre de la VM de origen.
  • SOURCE_DISK: Es el nombre de dispositivo del disco a partir del cual deseas crear la imagen.

Después de preparar la VM, crea la imagen.

Crea la imagen

Puedes crear imágenes de disco desde las siguientes fuentes:

  • Un disco persistente, incluso si ese disco está conectado a una VM
  • Una instantánea de un disco persistente
  • Otra imagen en el proyecto
  • Una imagen que se comparte desde otro proyecto
  • Una imagen RAW comprimida en Cloud Storage

Puedes crear una imagen de disco una vez cada 10 minutos. Si deseas generar una gran cantidad de solicitudes para crear una imagen de disco, puedes emitir como máximo 6 solicitudes en 60 minutos. Para obtener más información, consulta Límites de frecuencia de las instantáneas.

Console

  1. En Google Cloud Console, ve a la página Crea una imagen.

    Ir a Crea una imagen

  2. Especifica el Nombre de la imagen.

  3. Especifica el Origen desde el que deseas crear una imagen. Puede ser un disco persistente, una instantánea, otra imagen o un archivo disk.raw en Cloud Storage.

  4. Si creas una imagen desde un disco conectado a una VM en ejecución, marca Keep instance running para confirmar que deseas crear la imagen mientras se ejecuta la VM. Puedes preparar tu VM antes de crear la imagen.

  5. En la lista desplegable Se basa en la ubicación del disco de origen (predeterminado), especifica la ubicación para almacenar la imagen. Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

  6. Especifica las propiedades de la imagen (opcional).

    • Familia: Es la familia de imágenes a la que pertenece esta imagen nueva.
    • Descripción: Es la descripción de la imagen personalizada.
    • Etiqueta: Es la etiqueta que agrupa los recursos.
  7. Especifica la clave de encriptación. Puedes elegir entre una clave administrada por Google, una clave de Cloud Key Management Service (Cloud KMS) o una clave de encriptación proporcionada por el cliente (CSEK). Si no se especifica una clave de encriptación, las imágenes se encriptarán mediante una clave administrada por Google

  8. Haz clic en Crear para crear la imagen.

gcloud

En Google Cloud CLI, usa el comando gcloud compute images create para crear una imagen personalizada.

Crea una imagen a partir de un disco de origen:

La marca --force es opcional y te permite crear la imagen desde una instancia en ejecución. De forma predeterminada, no puedes crear imágenes a partir de instancias en ejecución. Especifica esta marca solo si estás seguro de que deseas crear la imagen mientras se ejecuta la instancia.

gcloud compute images create IMAGE_NAME \
    --source-disk=SOURCE_DISK \
    --source-disk-zone=ZONE \
    [--family=IMAGE_FAMILY] \
    [--storage-location=LOCATION] \
    [--force]

Reemplaza lo siguiente:

  • IMAGE_NAME: Es un nombre para la imagen nueva.
  • SOURCE_DISK: Es el disco desde el que deseas crear la imagen.
  • ZONE: Es la zona en la que se encuentra el disco.
  • IMAGE_FAMILY: Es una marca que especifica a qué familia de imágenes pertenece esta imagen (opcional).
  • LOCATION: Es una marca que te permite designar la región o multirregión en la que se almacena la imagen (opcional). Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

Crea una imagen a partir de una imagen de origen:

gcloud compute images create IMAGE_NAME \
  --source-image=SOURCE_IMAGE \
  [--source-image-project=IMAGE_PROJECT] \
  [--family=IMAGE_FAMILY] \
  [--storage-location=LOCATION]

Reemplaza lo siguiente:

  • IMAGE_NAME: Es un nombre para la imagen nueva.
  • SOURCE_IMAGE: Es la imagen desde la que deseas crear la imagen nueva.
  • IMAGE_PROJECT: Es el proyecto en el que se encuentra la imagen de origen (opcional). Usa este parámetro si deseas copiar una imagen desde otro proyecto.
  • IMAGE_FAMILY: Es la familia de imágenes a la que pertenece esta imagen nueva (opcional).
  • LOCATION: Te permite designar la región o multirregión en la que se almacena la imagen (opcional). Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

Crea una imagen a partir de una instantánea:

gcloud compute images create IMAGE_NAME \
    --source-snapshot=SOURCE_SNAPSHOT \
    [--storage-location=LOCATION]

Reemplaza lo siguiente:

  • IMAGE_NAME: Es un nombre para la imagen nueva.
  • SOURCE_SNAPSHOT: Es la instantánea desde la que deseas crear la imagen.
  • LOCATION: Es una marca que te permite designar la región o multirregión en la que se almacena la imagen (opcional). Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

Observa la ubicación de una imagen:

Usa el comando gcloud compute images describe para ver la ubicación de una imagen.

gcloud compute images describe IMAGE_NAME

Reemplaza IMAGE_NAME por el nombre de la imagen que deseas revisar.

API

Realiza una solicitud POST al método images().insert, una URL en el cuerpo de la solicitud que apunta al objeto de origen desde el que deseas crear la imagen. Usa tu propio ID del proyecto y nombres de recursos para especificar las URL de los recursos.

Crea una imagen a partir de un disco persistente:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
  "name": "IMAGE_NAME",
  "sourceDisk": "/zones/ZONE/disks/SOURCE_DISK",
  ("storageLocations": "LOCATION",)
  ("forceCreate": "TRUE")
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto al que pertenece la imagen.
  • IMAGE_NAME: Es un nombre para la imagen nueva que deseas crear.
  • ZONE: Es la zona en la que se encuentra el disco de origen.
  • SOURCE_DISK: Es el disco desde el que deseas crear la imagen.
  • LOCATION: Es la ubicación de almacenamiento de la imagen (opcional). Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

El parámetro opcional forceCreate te permite crear la imagen a partir de una VM en ejecución. Especifica TRUE solo si estás seguro de que quieres crear la imagen desde una VM en ejecución. La configuración predeterminada forceCreate es FALSE.

Crea una imagen a partir de otra imagen:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
  "name": "IMAGE_NAME",
  "sourceImage": "/global/images/SOURCE_IMAGE",
  ("storageLocations": "LOCATION")
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el proyecto al que pertenece la imagen.
  • IMAGE_NAME: Es un nombre para la imagen nueva que deseas crear.
  • SOURCE_IMAGE: Es la imagen desde la que deseas crear la imagen.
  • LOCATION: Es la ubicación de almacenamiento de la imagen (opcional). Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

Crea una imagen a partir de una instantánea:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images
{
  "name": "IMAGE_NAME",
  "sourceSnapshot": "(/SOURCE_PROJECT_ID)/global/snapshots/SOURCE_SNAPSHOT",
  ("storageLocations": "LOCATION")
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el proyecto al que pertenece la imagen.
  • IMAGE_NAME: Es un nombre para la imagen nueva que deseas crear.
  • SOURCE_PROJECT_ID: Es el proyecto en el que se encuentra la instantánea (opcional). Debes tener permiso para acceder al recurso de instantánea en ese proyecto.
  • SOURCE_SNAPSHOT: Es la instantánea desde la que deseas crear la imagen.
  • LOCATION: Es la ubicación de almacenamiento de la imagen (opcional). Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

Para obtener más información sobre cómo agregar imágenes, consulta la referencia de imágenes.

Comparte la imagen

Después de crear una imagen personalizada, puedes compartirla entre proyectos. Si permites que los usuarios de otro proyecto usen tus imágenes personalizadas, pueden acceder a estas imágenes si especificas el proyecto de imagen en su solicitud.

Habilita las funciones del sistema operativo invitado en imágenes personalizadas

Usa las funciones del sistema operativo (SO) invitado para configurar las siguientes opciones de herramientas de redes, seguridad, almacenamiento y SO en imágenes personalizadas. Las imágenes personalizadas con estas funciones configuradas se usan como discos de arranque.

gcloud

Usa el comando gcloud compute images create con la marca --guest-os-features para crear una imagen personalizada nueva a partir de una imagen personalizada existente.

gcloud compute images create IMAGE_NAME \
    --source-image=SOURCE_IMAGE \
    [--source-image-project=IMAGE_PROJECT] \
    --guest-os-features="FEATURES,..." \
    [--storage-location=LOCATION]

Reemplaza lo siguiente:

  • IMAGE_NAME: es el nombre de la imagen nueva
  • SOURCE_IMAGE: es una imagen en la que se basará la imagen nueva
  • IMAGE_PROJECT: es el proyecto que contiene la imagen de origen (opcional)

    Usa este parámetro para copiar una imagen de otro proyecto.

  • FEATURES: son etiquetas de SO invitado que permiten habilitar las funciones para las VM que creas a partir de imágenes

    Si deseas agregar varios valores, usa comas para separarlos. Establece este parámetro en uno o más de los siguientes valores:

    • VIRTIO_SCSI_MULTIQUEUE. Se usa en dispositivos SSD locales como alternativa a NVMe. Para obtener más información sobre las imágenes que admiten SCSI, consulta Elige una interfaz.

      Para imágenes de Linux, puedes habilitar SCSI de varias colas en dispositivos SSD locales en imágenes con versiones de kernel 3.17 o posteriores. Para imágenes de Windows, puedes habilitar SCSI de varias colas en dispositivos SSD locales en imágenes con la versión 1.2 del controlador de Windows de Compute Engine.

    • WINDOWS. Etiqueta las imágenes de arranque personalizadas de Windows Server como imágenes de Windows.
    • MULTI_IP_SUBNET. Configura interfaces con una máscara de red distinta de /32. Para obtener más información sobre las interfaces de red múltiples y su funcionamiento, consulta Descripción general y ejemplos de interfaces de red múltiples.
    • UEFI_COMPATIBLE. Inicia con firmware UEFI y las siguientes características de VM protegida:
    • GVNIC. Admite anchos de banda de red más altos de hasta 50 Gbps a velocidades de 100 Gbps. Para obtener más información, consulta Usa la NIC virtual de Google.
    • SEV_CAPABLE. Usa esta opción si creas una Confidential VM en la plataforma de CPU de virtualización segura encriptada (SEV) de AMD. Para obtener más información, consulta Crea una instancia nueva de Confidential VM.
    • SUSPEND_RESUME_COMPATIBLE. Admite la suspensión y la reanudación en una VM. Para obtener más información, consulta Compatibilidad con los SO.
  • LOCATION: es la región o multirregión en la que se almacena la imagen (opcional)

    Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

API

Usa el método images().insert con la marca guestOsFeatures para crear una imagen personalizada nueva a partir de una imagen personalizada existente.


POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
 "name": "IMAGE_NAME",
 "sourceImage": "(projects/IMAGE_PROJECT)/global/images/SOURCE_IMAGE",
 ("storageLocations": "LOCATION",)
 "guestOsFeatures": [
  {
   "type": "FEATURES"
  }
 ]
}

Reemplaza lo siguiente:

  • PROJECT_ID: es el ID del proyecto en el que se creará la imagen nueva
  • IMAGE_NAME: Es un nombre para la imagen nueva.
  • IMAGE_PROJECT: es el proyecto que contiene la imagen de origen (opcional)

    Usa este parámetro para copiar una imagen de otro proyecto.

  • SOURCE_IMAGE: es la imagen en la que se basará la imagen nueva

  • LOCATION: es una región o multirregión para almacenar la imagen (opcional)

    Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.

  • FEATURES: son etiquetas de SO invitado que permiten habilitar las funciones para las VM que creas a partir de imágenes

    Si deseas agregar varios valores, usa comas para separarlos. Establece este parámetro en uno o más de los siguientes valores:

    • VIRTIO_SCSI_MULTIQUEUE. Se usa en dispositivos SSD locales como alternativa a NVMe. Para obtener más información sobre las imágenes que admiten SCSI, consulta Elige una interfaz.

      Para imágenes de Linux, puedes habilitar SCSI de varias colas en dispositivos SSD locales en imágenes con versiones de kernel 3.17 o posteriores. Para imágenes de Windows, puedes habilitar SCSI de varias colas en dispositivos SSD locales en imágenes con la versión 1.2 del controlador de Windows de Compute Engine.

    • WINDOWS. Etiqueta las imágenes de arranque personalizadas de Windows Server como imágenes de Windows.
    • MULTI_IP_SUBNET. Configura interfaces con una máscara de red distinta de /32. Para obtener más información sobre las interfaces de red múltiples y su funcionamiento, consulta Descripción general y ejemplos de interfaces de red múltiples.
    • UEFI_COMPATIBLE. Inicia con firmware UEFI y las siguientes características de VM protegida:
    • GVNIC. Admite anchos de banda de red más altos de hasta 50 Gbps a velocidades de 100 Gbps. Para obtener más información, consulta Usa la NIC virtual de Google.
    • SEV_CAPABLE. Usa esta opción si creas una Confidential VM en la plataforma de CPU de virtualización segura encriptada (SEV) de AMD. Para obtener más información, consulta Crea una instancia nueva de Confidential VM.
    • SUSPEND_RESUME_COMPATIBLE. Admite la suspensión y la reanudación en una VM. Para obtener más información, consulta Compatibilidad con los SO.

Consideraciones para las imágenes de Arm

Google ofrece la serie de máquinas Tau T2A, que se ejecuta en la plataforma de CPU Ampere Altra. Puedes iniciar una VM con la serie de máquinas T2A y, luego, usar esa VM de origen para crear una imagen de Arm. El proceso para crear una imagen de Arm personalizada es idéntico al proceso de creación de una imagen de x86.

Para ayudar a tus usuarios a diferenciar entre imágenes de Arm y x86, estas tendrán un campo architecture configurado como ARM64. Los valores posibles para este campo son los siguientes:

  • ARCHITECTURE_UNSPECIFIED
  • X86_64
  • ARM64

Luego, los usuarios de imágenes pueden filtrar este campo para encontrar imágenes de x86 o Arm.

¿Qué sigue?