Crear imágenes personalizadas de BYOL de Windows


Para crear una VM de Windows en Google Cloud, debes usar una imagen de VM que tenga Windows o Windows Server preinstalado. Google Cloud proporciona imágenes públicas para las versiones de Windows Server que se usan con frecuencia, pero estas imágenes solo son adecuadas para la licencia bajo demanda. Para usar tu propia licencia de Windows (BYOL), debes importar una imagen que ya tengas o crear una imagen personalizada.

En esta guía se describe cómo puedes crear una imagen personalizada con las mismas herramientas y procesos que usa Google Cloud para crear las imágenes públicas.

Para completar esta guía, necesitas lo siguiente:

  • Un archivo ISO que contenga el medio de instalación de Windows o Windows Server.
  • Opcionalmente, uno o varios paquetes de actualización de Windows (en formato .msu) para aplicar a la imagen.

Antes de empezar

  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos 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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

Entender el proceso de compilación

Para instalar Windows desde cero, una práctica habitual es arrancar un ordenador 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 te permite arrancar desde un archivo ISO.

Por lo tanto, para instalar Windows desde cero, debes seguir otro procedimiento que consta de los siguientes pasos:

  1. Creando un disco.
  2. Extrayendo la imagen de Windows (install.wim del medio de instalación) al disco.
  3. Añadir los controladores necesarios, configurar la instalación de Windows para que se ejecute de forma desatendida y hacer que el disco sea de arranque.
  4. Arrancar desde el nuevo disco para ejecutar la configuración de Windows.
  5. Instalar software adicional, incluido el agente del SO invitado.
  6. Creando una imagen del disco.

En lugar de seguir estos pasos manualmente, en esta guía se describe cómo puedes usar 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 te permite ejecutar flujos de trabajo. Los flujos de trabajo se crean como archivos JSON y contienen una secuencia de pasos. Cada paso describe una operación de Compute Engine, como 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 de Daisy para crear imágenes de Windows personalizadas 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 (con el prefijo install) ejecuta la configuración de Windows y realiza el resto de los pasos.

Preparar el proyecto para crear imágenes

Para evitar que la herramienta Daisy interfiera con tus instancias de VM o tu infraestructura, crea un proyecto específico para compilar imágenes:

    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.

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

    Los pasos siguientes varían en función de si usas Windows o Linux en tu ordenador local:

    Windows

    1. En tu ordenador local, abre una ventana de Windows PowerShell.
    2. Inicializa una variable:

      $PROJECT_ID = "PROJECT_ID"
      

      donde PROJECT_ID es el ID del proyectoGoogle Cloud que has creado en la sección anterior.

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

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

    Linux

    1. En tu ordenador local, abre una ventana de terminal.
    2. Inicializa una variable:

      PROJECT_ID=PROJECT_ID
      

      donde PROJECT_ID es el ID del proyectoGoogle Cloud que has creado en la sección anterior.

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

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

    Subir archivos de instalación

    Ahora, recopila todos los archivos de instalación necesarios para la imagen personalizada y súbelos a un segmento de Cloud Storage. Al almacenar los archivos en un segmento de Cloud Storage, te aseguras de que daisy y las instancias de VM temporales que daisy usa para crear la imagen puedan acceder a ellos.

    1. En tu ordenador local, descarga los paquetes de instalación necesarios:

    2. Crea un segmento de Cloud Storage para almacenar los archivos de instalación:

      gcloud storage buckets create gs://$PROJECT_ID-media --project=$PROJECT_ID
      
    3. Concede el rol Visor de objetos de Storage 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. Sube 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. Sube 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 gcloud CLI:

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

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

    7. Sube el archivo ISO que contenga el medio de instalación de Windows:

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

      donde ISO es el nombre del archivo ISO.

    8. Si quieres, sube 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 ya puedes crear la imagen personalizada.

    Crear la imagen

    Ejecutar el flujo de trabajo daisy para crear una imagen personalizada puede tardar hasta cuatro horas. En lugar de ejecutar daisy de forma local, ahora puedes crear una configuración de Cloud Build para que Cloud Build ejecute el flujo de trabajo en segundo plano.

    1. En tu ordenador local, clona el repositorio de 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. Cambia al directorio windows:

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

      Versión de Windows Archivo de flujo de trabajo
      Windows Server Core 2022 (64 bits) windows-server-2022-dc-core-uefi-byol.wf.json
      Windows Server 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
      Windows Server 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

      Abre el archivo de flujo de trabajo que más se ajuste a la versión de Windows que quieras instalar. Si es necesario, cambia la edición de Windows (edition) y la clave de licencia (product_key) en los archivos de flujo de trabajo para que coincidan con tu medio de instalación.

      Si no sabes cuál es el nombre de la edición correcta, abre un símbolo del sistema de PowerShell con privilegios elevados y ejecuta los siguientes comandos para ver todas las ediciones compatibles con tu medio 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
      

      Sustituye ISO por la ruta local a la imagen ISO.

    4. En el directorio windows, crea un archivo llamado cloudbuild.yaml y pega 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
      

      Sustituye:

      • 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 usando.
      .
    5. Envía la compilación a Cloud Build:

      gcloud builds submit --project $PROJECT_ID --async
      

      La compilación puede tardar hasta cuatro horas en completarse. Puedes hacer un seguimiento del estado de la compilación en la Google Cloud consola, en Cloud Build > Historial.

      Historial de Cloud Build

    Usar la imagen personalizada

    Una vez que se haya completado la compilación, podrá encontrar la imagen BYOL personalizada en la consolaGoogle Cloud , en Compute Engine > Imágenes.

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

    Para crear una instancia de VM que use la imagen personalizada de licencia adquirida por el usuario, debes aprovisionar la instancia de VM en un nodo de único cliente.

    Solución de problemas

    Si sospechas que el proceso de compilación ha fallado o no avanza, utiliza los siguientes métodos para diagnosticar la situación:

    • Comprueba que hayas subido los paquetes de instalación y el archivo ISO correctos.
    • Verifica que hayas seleccionado un flujo de trabajo que coincida con la versión de Windows del archivo ISO.
    • Revisa el registro de compilación de Cloud Build y comprueba si hay mensajes de error.
    • Si parece que la compilación se ha quedado bloqueada, revisa la salida del puerto serie de la instancia de VM creada por la compilación y comprueba si hay mensajes de error.

    Siguientes pasos