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) degdcloud, 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:
Busca el nombre del servidor de la API Management o pregunta a tu administrador de plataforma cuál es.
Inicia sesión y genera el archivo kubeconfig del servidor de la API Management si no tienes uno.
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:
- 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.
- Impide que tus aplicaciones escriban en tu disco persistente.
- 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
Selecciona un proyecto.
En el menú de navegación, haz clic en Máquinas virtuales > Imágenes.
Haz clic en Crear imagen.
Introduce un nombre único para la imagen. El nombre no puede tener más de 35 caracteres.
Introduce una versión para añadirla al nombre de la imagen.
En el campo Disco de origen, selecciona un disco.
En el campo Tamaño mínimo del disco, introduce el tamaño del disco.
Escribe una descripción de la imagen.
Haz clic en Crear.
La imagen aparecerá en la lista de imágenes.
API
Lista de todos los objetos
VirtualMachineDisk:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECTSelecciona un objeto
VirtualMachineDiskpara usarlo como disco de origen de la nueva imagen.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":"...."}]- Si la salida devuelve un valor para
"name", el disco se adjunta a una VM, que se indica en el camponame. En este ejemplo, esvm1. Comprueba el estado de ejecución de la VM. - Si el resultado está vacío, ve a obtener el
sizedeVirtualMachineDisk.
- Comprueba
el estado de ejecución de la VM. Si el estado no es
Stopped, detén la máquina virtual y crea laVirtualMachineImage.
- Si la salida devuelve un valor para
Obtén el
sizedeVirtualMachineDiskpara crear la imagen:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \ DISK_NAME -o jsonpath='{.spec.size}'Crea un objeto
VirtualMachineImageImporten 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 EOFComprueba 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 }Comprueba que se ha creado la imagen:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \ CREATED_IMAGE_NAMESustituye las variables con las siguientes definiciones.
Variable Definición MANAGEMENT_API_SERVEREl archivo kubeconfigdel servidor de la API Management.PROJECTEl proyecto de GDC en el que se creará la imagen. DISK_NAMEEl nombre del disco de origen, como vm1-boot-disk.VM_IMAGE_IMPORT_NAMENombre de la importación de la imagen de VM. El nombre no puede tener más de 35 caracteres. IMAGE_NAMENombre de la imagen creada, como custom-image.OS_NAMEEl nombre del SO de la imagen debe ser uno de estos tres: ubuntu-2004,windows-2019orhel-8.MINIMUM_DISK_SIZEEl 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_NAMENombre 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.