Cree imágenes BYOL de Windows personalizadas


Para crear una máquina virtual Windows en Google Cloud, debe utilizar una imagen de VM que tenga Windows o Windows Server preinstalado. Google Cloud proporciona imágenes públicas para las versiones de uso común de Windows Server, pero estas imágenes solo son adecuadas para licencias bajo demanda . Para traer su propia licencia de Windows (BYOL), debe importar una imagen existente o debe crear una imagen personalizada.

Esta guía describe cómo puede crear una imagen personalizada utilizando las mismas herramientas y procesos que Google Cloud utiliza para crear las imágenes públicas.

Para completar esta guía, necesitas:

  • Un archivo ISO que contiene los medios de instalación de Windows o Windows Server.
  • Opcionalmente, uno o más paquetes de actualización de Windows (en formato .msu ) para aplicar a la imagen.

Antes de comenzar

  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

Comprender el proceso de construcción

Para instalar Windows desde cero, un método común es iniciar una computadora desde un DVD o un archivo ISO que contenga los archivos de instalación de Windows. A diferencia de algunos hipervisores locales, Compute Engine no le permite iniciar desde un archivo ISO.

Por lo tanto, para instalar Windows desde cero, debe seguir un enfoque diferente que implica los siguientes pasos:

  1. Creando un nuevo disco.
  2. Extraer la imagen de Windows ( install.wim del medio de instalación) al disco.
  3. Agregar los controladores necesarios, configurar el programa de instalación de Windows para que se ejecute sin supervisión y hacer que el disco sea de arranque.
  4. Arrancando desde el nuevo disco para ejecutar la instalación de Windows.
  5. Instalación de software adicional, incluido el agente del sistema operativo invitado.
  6. Creando una imagen desde el disco.

En lugar de realizar estos pasos manualmente, esta guía describe cómo puede utilizar Cloud Build , la herramienta daisy y los flujos de trabajo de referencia que están disponibles en GitHub para automatizar el proceso.

daisy es una herramienta de línea de comandos de código abierto que le permite ejecutar flujos de trabajo. Los flujos de trabajo se crean como archivos JSON y contienen una secuencia de pasos. Cada uno de estos pasos describe una operación de Compute Engine, por ejemplo, crear un disco o apagar una instancia de VM. Por lo tanto, los flujos de trabajo de Daisy son adecuados para automatizar los pasos necesarios para crear una imagen de Windows desde cero.

Los flujos de trabajo en margarita para crear imágenes personalizadas de Windows crean dos instancias de VM temporales. La primera instancia de VM (con el prefijo bootstrap ) realiza los pasos necesarios para crear un disco de arranque. La segunda instancia de VM ( install con el prefijo) ejecuta la instalación de Windows y realiza todos los pasos restantes.

Preparar el proyecto para la construcción de imágenes.

Para evitar que la herramienta Daisy interfiera con sus instancias o infraestructura de VM existentes, cree un proyecto dedicado para crear imágenes:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Enable the APIs

Los siguientes pasos difieren dependiendo de si usa Windows o Linux en su computadora local:

ventanas

  1. En su computadora local, abra una ventana de Windows PowerShell.
  2. Inicializar una variable:

    $PROJECT_ID = "PROJECT_ID"
    

    donde PROJECT_ID es el ID del proyecto de Google Cloud que creaste en la sección anterior.

  3. Inicialice otra variable para que contenga el número de proyecto del proyecto:

    $PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
    

linux

  1. En su computadora local, abra una ventana de terminal.
  2. Inicializar una variable:

    PROJECT_ID=PROJECT_ID
    

    donde PROJECT_ID es el ID del proyecto de Google Cloud que creaste en la sección anterior.

  3. Inicialice otra variable para que contenga el número de proyecto del proyecto:

    PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
    

Cargar archivos de instalación

Ahora recopila todos los archivos de instalación necesarios para la imagen personalizada y los carga en un depósito de Cloud Storage. Al almacenar los archivos en un depósito de Cloud Storage, te aseguras de que daisy y las instancias temporales de VM que daisy utiliza para crear la imagen puedan acceder a los archivos.

  1. En su computadora local, descargue los paquetes de instalación requeridos:

  2. Crea un nuevo depósito de Cloud Storage para almacenar los archivos de instalación:

    gcloud storage buckets create gs://$PROJECT_ID-media --project=$PROJECT_ID
    
  3. Otorgue la función Visor de objetos de almacenamiento a Cloud Build para que pueda leer los archivos de instalación:

    gcloud storage buckets add-iam-policy-binding gs://$PROJECT_ID-media --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role=roles/storage.objectViewer
    
  4. Cargue el paquete de instalación de PowerShell:

    gcloud storage cp POWERSHELL_PACKAGE gs://$PROJECT_ID-media/PowerShell.msi
    

    donde POWERSHELL_PACKAGE es la ruta al paquete de instalación de PowerShell.

  5. Cargue el paquete de instalación de .NET Framework:

    gcloud storage cp DOTNET_PACKAGE gs://$PROJECT_ID-media/dotnet-sdk.exe
    

    donde DOTNET_PACKAGE es la ruta al paquete de instalación de NET Framework.

  6. Sube el paquete de instalación de la CLI de gcloud:

    gcloud storage cp CLOUDSDK_PACKAGE gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe
    

    donde CLOUDSDK_PACKAGE es la ruta al paquete de instalación de la CLI de gcloud.

  7. Cargue el archivo ISO que contiene sus medios de instalación de Windows:

    gcloud storage cp ISO gs://$PROJECT_ID-media/
    

    donde ISO es el nombre del archivo ISO.

  8. Opcionalmente, cargue paquetes de actualización adicionales:

    gcloud storage cp UPDATE_DIR/*.msu gs://$PROJECT_ID-media/updates/
    

    donde UPDATE_DIR es el directorio que contiene los paquetes de actualización.

Ahora está listo para crear la imagen personalizada.

construir la imagen

La ejecución del flujo de trabajo daisy para crear una imagen personalizada lleva hasta cuatro horas. En lugar de ejecutar daisy localmente, ahora crea una configuración de Cloud Build para poder permitir que Cloud Build ejecute el flujo de trabajo en segundo plano.

  1. En su computadora local, clone el repositorio Git que contiene los flujos de trabajo daisy para crear imágenes de Windows:

    git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
    
  2. Cambiar al directorio windows :

    cd compute-image-tools/daisy_workflows/image_build/windows/
    
  3. En el directorio windows encontrará una selección de archivos con el sufijo .wf.json . Estos archivos contienen definiciones de flujo de trabajo de Daisy para las versiones de Windows más utilizadas:

    versión de Windows Archivo de flujo de trabajo
    Windows Server Core 2022 (64 bits) windows-server-2022-dc-core-uefi-byol.wf.json
    Servidor Windows 2019 (64 bits) windows-server-2019-dc-uefi-byol.wf.json
    Windows Server Core 2019 (64 bits) windows-server-2019-dc-core-uefi-byol.wf.json
    Servidor Windows 2016 (64 bits) windows-server-2016-dc-uefi-byol.wf.json
    Windows Server Core 2016 (64 bits) windows-server-2016-dc-core-uefi-byol.wf.json
    Windows 11 21H2 (64 bits) windows-11-21h2-ent-x64-uefi.wf.json
    Windows 11 22H2 (64 bits) windows-11-22h2-ent-x64-uefi.wf.json
    Windows 11 23H2 (64 bits) windows-11-23h2-ent-x64-uefi.wf.json
    Windows 10 21H2 (64 bits) windows-10-21h2-ent-x64-uefi.wf.json
    Windows 10 22H2 (64 bits) windows-10-22h2-ent-x64-uefi.wf.json

    Abra el archivo de flujo de trabajo que más se asemeje a la versión de Windows que desea instalar. Si es necesario, cambie la configuración de la edición de Windows ( edition ) y la clave de licencia ( product_key ) en los archivos de flujo de trabajo para que coincidan con su medio de instalación.

    Si no está seguro del nombre de edición correcto, abra un mensaje de PowerShell elevado y ejecute los siguientes comandos para enumerar todas las ediciones compatibles con sus medios de instalación:

    $IsoFile = "ISO"
    
    $Mount = Mount-DiskImage -ImagePath (Resolve-Path $IsoFile)
    
    $DriveLetter = ($Mount | Get-Volume).DriveLetter
    Get-WindowsImage -ImagePath "$($DriveLetter):\sources\install.wim" | select ImageName
    
    Dismount-DiskImage -InputObject $Mount | Out-Null
    

    Reemplace ISO con la ruta local a la imagen ISO.

  4. En el directorio windows , cree un nuevo archivo llamado cloudbuild.yaml y pegue el siguiente código:

    timeout: 14400s  # 4 hour timeout for entire build
    steps:
    - name: 'gcr.io/compute-image-tools/daisy'
      timeout: 14400s  # 4 hour timeout for build step
      waitFor: ['-']
      args:
        - -project=$PROJECT_ID
        - -zone=us-central1-a
        - -var:updates=gs://$PROJECT_ID-media/updates/
        - -var:pwsh=gs://$PROJECT_ID-media/PowerShell.msi
        - -var:dotnet48=gs://$PROJECT_ID-media/dotnet-sdk.exe
        - -var:cloudsdk=gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe
        - -var:media=gs://$PROJECT_ID-media/ISO
        - WORKFLOW
    

    Reemplazar:

    • ISO : nombre del archivo ISO en Cloud Storage.
    • WORKFLOW : nombre del archivo de flujo de trabajo que corresponde a la versión de Windows que estás utilizando.
  5. Envíe la compilación a Cloud Build:

    gcloud builds submit --project $PROJECT_ID --async
    

    La construcción tarda alrededor de cuatro horas en completarse. Puede realizar un seguimiento del estado de la compilación en la consola de Google Cloud en Cloud Build > Historial .

    Historial de construcción de la nube

Utilice la imagen personalizada

Una vez completada la compilación, puedes encontrar la imagen BYOL personalizada en la consola de Google Cloud en Compute Engine > Imágenes .

Para ayudar a diferenciar entre varias versiones de la misma imagen, el proceso de compilación incorpora una marca de tiempo en el nombre de la imagen, por ejemplo windows-server-2019-dc-v1613488342 . Además, el proceso asocia la imagen con una familia de imágenes personalizada, por ejemplo windows-server-2019 .

Para crear una instancia de VM que utilice la imagen BYOL personalizada, debe aprovisionar la instancia de VM en un nodo de único inquilino .

Solución de problemas

Si sospecha que el proceso de compilación falló o no avanza, utilice los siguientes enfoques para diagnosticar la situación:

  • Verifique que haya cargado los paquetes de instalación y el archivo ISO correctos.
  • Verifique que haya seleccionado un flujo de trabajo que coincida con la versión de Windows del archivo ISO.
  • Revise el registro de compilación en Cloud Build y verifique si hay algún mensaje de error.
  • Si la compilación parece atascada, revise la salida del puerto serie de la instancia de VM creada por la compilación y verifique si hay mensajes de error.

¿Qué sigue?