Crear imágenes personalizadas

Puedes crear imágenes personalizadas a partir de discos de origen y usarlas para crear e iniciar máquinas virtuales (VMs). Las imágenes personalizadas son ideales cuando has creado y modificado un disco de arranque persistente hasta un estado determinado y necesitas guardar ese estado para crear VMs. Si creas y guardas una imagen personalizada para usarla como imagen de máquina virtual en futuras creaciones de máquinas virtuales, no tendrás que repetir los pasos de configuración más adelante.

Antes de empezar

Para usar los comandos de la interfaz de línea de comandos (CLI) de gdcloud, asegúrate de haber descargado, instalado y configurado la CLI de gdcloud. Todos los comandos del dispositivo aislado de GDC usan la CLI gdcloud o kubectl y requieren un entorno Linux.

Obtener la ruta del archivo kubeconfig

Para ejecutar comandos en el servidor de la API Management, asegúrate de tener los siguientes recursos:

  1. Busca el nombre del servidor de la API Management o pregunta a tu administrador de plataforma cuál es.

  2. Inicia sesión y genera el archivo kubeconfig del servidor de la API Management si no tienes uno.

  3. Usa la ruta para sustituir MANAGEMENT_API_SERVER{"</var>"}} en estas instrucciones.

Solicitar permisos y acceso

Para crear una imagen personalizada, debes tener acceso a la imagen de VM a nivel de proyecto. Sigue los pasos indicados para que el administrador de gestión de identidades y accesos del proyecto te asigne el rol Administrador de imágenes de máquinas virtuales del proyecto (project-vm-image-admin) en el espacio de nombres del proyecto en el que reside la VM. Si usas la consola de GDC o la CLI de gdcloud para crear una imagen, también necesitas los roles Administrador de máquinas virtuales de proyecto (project-vm-admin) y Lector de proyecto (project-viewer).

Crear una imagen personalizada

En esta sección se describe cómo crear una imagen personalizada en una VM Linux.

Preparar una VM para crear una imagen

Puedes crear una imagen a partir de un disco mientras esté conectado a una VM en ejecución. Sin embargo, la imagen será más fiable si pones la VM en un estado para que se capture la imagen.

Minimizar la escritura de datos en el disco persistente

Sigue uno de estos procesos para reducir las escrituras en disco. Detén la VM o minimiza las escrituras en el disco:

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

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

  1. Pausa las aplicaciones o los procesos del SO que escriban datos en ese disco persistente. Ejecuta una aplicación para vaciarla en el disco, si es necesario. Es posible que otras aplicaciones tengan procesos similares.
  2. Impide que tus aplicaciones escriban en tu disco persistente.
  3. Ejecuta sudo sync.

Crea la imagen

Sigue estos pasos para crear imágenes de disco a partir de un disco persistente, incluso cuando esté conectado a una VM:

Consola

  1. Selecciona un proyecto.

  2. En el menú de navegación, haz clic en Máquinas virtuales > Imágenes.

  3. Haz clic en Crear imagen.

  4. Introduce un nombre único para la imagen. El nombre no puede tener más de 35 caracteres.

  5. Introduce una versión para añadirla al nombre de la imagen.

  6. En el campo Disco de origen, selecciona un disco.

  7. En el campo Tamaño mínimo del disco, introduce el tamaño del disco.

  8. Escribe una descripción de la imagen.

  9. Haz clic en Crear.

La imagen aparecerá en la lista de imágenes.

API

  1. Lista de todos los objetos VirtualMachineDisk:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
       get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT
    
  2. Selecciona un objeto VirtualMachineDisk para usarlo como disco de origen de la nueva imagen.

  3. Comprueba si el disco de la VM está asociado a una VM:

      kubectl --kubeconfig MANAGEMENT_API_SERVER \
          get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
          DISK_NAME -o jsonpath='{.status.virtualMachineAttachments}'
    

    Ejemplo de resultado que muestra que un disco está conectado a una máquina virtual:

      [{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]
    
    1. Comprueba el estado de ejecución de la VM. Si el estado no es Stopped, detén la máquina virtual y crea la VirtualMachineImage.
  4. Obtén el size de VirtualMachineDisk para crear la imagen:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
        DISK_NAME -o jsonpath='{.spec.size}'
    
  5. Crea un objeto VirtualMachineImageImport en el servidor de la API Management:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        apply -n PROJECT -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImageImport
    metadata:
      name: VM_IMAGE_IMPORT_NAME
    spec:
      source:
        diskRef:
          name: DISK_NAME
      imageMetadata:
        name: IMAGE_NAME
        operatingSystem: OS_NAME
        minimumDiskSize: MINIMUM_DISK_SIZE
    EOF
    
  6. Comprueba que la importación de la imagen se haya completado y que el estado sea Ready:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimageimports.virtualmachine.gdc.goog --namespace PROJECT \
        VM_IMAGE_IMPORT_NAME -o jsonpath='{.status}'
    

    El estado debería tener este aspecto cuando se haya completado la importación:

    {
      "conditions": [
        {
          "lastTransitionTime": "",
          "message": "",
          "observedGeneration": 1,
          "reason": "ImportJobComplete",
          "status": "True",
          "type": "Ready"
        }
      ],
      "imageName": IMAGE_NAME
    }
    
  7. Comprueba que se ha creado la imagen:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \
        CREATED_IMAGE_NAME
    

    Sustituye las variables con las siguientes definiciones.

    VariableDefinición
    MANAGEMENT_API_SERVER El archivo kubeconfig del servidor de la API Management.
    PROJECT El proyecto de GDC en el que se creará la imagen.
    DISK_NAME El nombre del disco de origen, como vm1-boot-disk.
    VM_IMAGE_IMPORT_NAME Nombre de la importación de la imagen de VM. El nombre no puede tener más de 35 caracteres.
    IMAGE_NAME Nombre de la imagen creada, como custom-image.
    OS_NAME El nombre del SO de la imagen debe ser uno de estos tres:
    ubuntu-2004, windows-2019 o rhel-8.
    MINIMUM_DISK_SIZE El tamaño mínimo del disco en la importación de imágenes de VM, como 20G:
    minimumDiskSize, siempre debe ser igual o superior al tamaño del disco de arranque de origen.
    CREATED_IMAGE_NAME Nombre de la imagen creada. El nombre de la imagen creada debe ser único. No puede ser un nombre de imagen que ya exista en el proyecto.