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) degdcloud, 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:
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.
Accede y genera el archivo kubeconfig para el servidor de la API de Management si no tienes uno.
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:
- 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.
- Evita que tus apps escriban en el disco persistente.
- 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
Selecciona un proyecto.
En el menú de navegación, haz clic en Virtual Machines > Images.
Haz clic en Create Image (Crear imagen).
Ingresa un nombre único para la imagen. El nombre no debe tener más de 35 caracteres.
Ingresa una versión para agregar al nombre de la imagen.
En el campo Disco de origen, selecciona un disco.
En el campo Tamaño mínimo del disco, ingresa un tamaño de disco.
Ingresa una descripción de la imagen.
Haz clic en Crear.
La imagen aparece en la lista de imágenes.
API
Enumera 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 imagen nueva.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":"...."}]- Si el resultado muestra un valor para
"name", el disco está conectado a una VM, lo que se indica en el camponame. En este ejemplo de resultado, esvm1. Continúa para verificar el estado de ejecución de la VM. - Si el resultado está vacío, continúa con obtén el
sizedeVirtualMachineDisk.
- 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 delVirtualMachineImage.
- Si el resultado muestra 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 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 EOFVerifica 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 }Verifica que se haya creado la imagen:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \ CREATED_IMAGE_NAMEReemplaza las variables con las siguientes definiciones.
Variable Definición MANAGEMENT_API_SERVEREl archivo kubeconfigdel servidor de la API de ManagementPROJECTEs el proyecto de GDC en el que se creará la imagen. DISK_NAMEEl nombre del disco de origen, como vm1-boot-disk.VM_IMAGE_IMPORT_NAMEEs el nombre de la importación de la imagen de VM. El nombre no debe tener más de 35 caracteres. IMAGE_NAMENombre de la imagen creada, como custom-image.OS_NAMEEl nombre del SO de la imagen, que debe ser uno de los siguientes: 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 mayor o igual que el tamaño del disco de arranque de origen.CREATED_IMAGE_NAMEEs 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.