Crear imágenes personalizadas

Puedes crear imágenes personalizadas a partir de discos de origen existentes y usarlas para crear y, luego, iniciar máquinas virtuales (VMs). Las imágenes personalizadas son ideales para usar cuando creaste y modificaste un disco de arranque persistente a un cierto estado y necesitas guardar ese estado para crear VMs. Crear y guardar una imagen personalizada para usarla como imagen de una VM nueva en la creación de VMs futuras evita duplicar los pasos de configuración más adelante.

Antes de comenzar

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 para el dispositivo aislado de GDC usan la CLI de gdcloud o kubectl, y requieren un entorno de Linux.

Obtén la ruta de acceso del archivo kubeconfig

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

  1. Ubica el nombre del servidor de la API de Management o pregúntale a tu administrador de la plataforma (PA) cuál es el nombre del servidor.

  2. Accede y genera el archivo kubeconfig para el servidor de la API de Management si no tienes uno.

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

Solicita permisos y acceso

Para crear una imagen personalizada, debes tener acceso a la imagen de VM a nivel del proyecto. Sigue los pasos indicados para que el administrador de IAM del proyecto te asigne el rol de 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 el rol de administrador de máquinas virtuales del proyecto (project-vm-admin) y el rol de visualizador del proyecto (project-viewer).

Crea una imagen personalizada

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

Prepara la VM para una imagen

Puedes crear una imagen desde un disco mientras está conectado 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.

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 o minimiza 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 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 apps o los procesos del SO que escriben datos en ese disco persistente. Si es necesario, ejecuta una limpieza de la app en el disco. Otras aplicaciones pueden tener procesos similares.
  2. Evita que tus apps escriban en el 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 si ese disco está conectado a una VM:

Console

  1. Selecciona un proyecto.

  2. En el menú de navegación, haz clic en Virtual Machines > Images.

  3. Haz clic en Create Image (Crear imagen).

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

  5. Ingresa una versión para agregar 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, ingresa un tamaño de disco.

  8. Ingresa una descripción de la imagen.

  9. Haz clic en Crear.

La imagen aparece en la lista de imágenes.

API

  1. Enumera 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 imagen nueva.

  3. Verifica si el disco de la VM está conectado 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 VM:

      [{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]
    
    1. Verifica el estado de ejecución de la VM. Si el estado no es Stopped, detén la VM y continúa con la creación del 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 de 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. Verifica que la importación de la imagen haya finalizado 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 verse de la siguiente manera cuando se complete la importación:

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

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

    Reemplaza las variables con las siguientes definiciones.

    VariableDefinición
    MANAGEMENT_API_SERVER El archivo kubeconfig del servidor de la API de Management
    PROJECT Es 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 Es el nombre de la importación de la imagen de VM. El nombre no debe 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, que debe ser uno de los siguientes:
    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 mayor o igual que el tamaño del disco de arranque de origen.
    CREATED_IMAGE_NAME Es el 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.