Wenn Sie eine Windows-VM in Google Clouderstellen möchten, müssen Sie ein VM-Image verwenden, auf dem Windows oder Windows Server vorinstalliert ist. Google Cloud bietet öffentliche Images für häufig verwendete Versionen von Windows Server. Diese Images sind jedoch nur für die On-Demand-Lizenzierung geeignet. Wenn Sie eine eigene Windows-Lizenz (BYOL) verwenden möchten, müssen Sie entweder ein vorhandenes Image importieren oder ein benutzerdefiniertes Image erstellen.
In dieser Anleitung wird beschrieben, wie Sie mit den gleichen Tools und Prozessen, die Google Cloud zum Erstellen der öffentlichen Images verwendet, ein benutzerdefiniertes Image erstellen.
Zum Durcharbeiten dieser Anleitung benötigen Sie Folgendes:
- Eine ISO-Datei, die das Windows- oder Windows Server-Installationsmedium enthält.
- Optional ein oder mehrere Windows-Updatepakete (im Format
.msu), die auf das Image angewendet werden sollen.
Hinweis
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren:
Wählen Sie den Tab aus, der Ihrer geplanten Verwendung der Beispiele auf dieser Seite entspricht:
Console
Wenn Sie über die Google Cloud Console auf Google Cloud Dienste und APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.
gcloud
-
Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:
gcloud initWenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
- Legen Sie eine Standardregion und -zone fest.
Build-Prozess verstehen
Um Windows von Grund auf zu installieren, wird empfohlen, einen Computer von einer DVD oder ISO-Datei zu starten, die die Windows-Installationsdateien enthält. Im Gegensatz zu einigen lokalen Hypervisoren lässt Compute Engine das Starten einer ISO-Datei nicht zu.
Um Windows komplett neu zu installieren, müssen Sie daher einen anderen Ansatz verfolgen, der die folgenden Schritte umfasst:
- Neues Laufwerk erstellen
- Windows-Image (
install.wimaus dem Installationsmedium) auf das Laufwerk extrahieren - Erforderliche Treiber hinzufügen, Windows Setup so konfigurieren, dass es unbeaufsichtigt ausgeführt wird und das Laufwerk bootfähig machen
- Von dem neuen Laufwerk aus booten, um Windows Setup auszuführen.
- Zusätzliche Software installieren, einschließlich des Gastbetriebssystem-Agents
- Image von dem Laufwerk erstellen
In diesem Leitfaden wird beschrieben, wie Sie Cloud Build, das daisy-Tool und die Referenzworkflows, die auf GitHub verfügbar sind, verwenden können, um den Prozess zu automatisieren.
daisy ist ein Open-Source-Befehlszeilentool, mit dem Sie Workflows ausführen können. Workflows werden als JSON-Dateien erstellt und enthalten eine Reihe von Schritten. Jeder dieser Schritte beschreibt einen Compute Engine-Vorgang, z. B. das Erstellen eines Laufwerks oder das Herunterfahren einer VM-Instanz. Daisy-Workflows sind daher geeignet, um die Schritte zu automatisieren, die zum Erstellen eines komplett neuen Windows-Images erforderlich sind.
Die Daisy-Workflows zum Erstellen benutzerdefinierter Windows-Images erstellen zwei temporäre VM-Instanzen.
Die erste VM-Instanz (mit dem Präfix bootstrap) führt die erforderlichen Schritte zum Erstellen eines Bootlaufwerks aus. Die zweite VM-Instanz (mit dem Präfix install) führt Windows Setup und alle verbleibenden Schritte aus.
Projekt für das Erstellen von Bildern vorbereiten
Erstellen Sie ein dediziertes Projekt für die Erstellung von Images, um zu verhindern, dass das Daisy-Tool Ihre vorhandenen VM-Instanzen oder Infrastruktur beeinträchtigt.
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles.
Die nächsten Schritte unterscheiden sich je nachdem, ob Sie Windows oder Linux auf Ihrem lokalen Computer verwenden:
Windows
- Öffnen Sie auf Ihrem lokalen Computer ein Windows PowerShell-Fenster.
Initialisieren Sie eine Variable:
$PROJECT_ID = "
PROJECT_ID"Dabei ist
PROJECT_IDdie Projekt-ID desGoogle Cloud -Projekts, das Sie zuvor erstellt haben.Initialisieren Sie eine weitere Variable, damit es die Projektnummer des Projekts enthält:
$PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
Linux
- Öffnen Sie ein Terminalfenster auf Ihrem lokalen Computer.
Initialisieren Sie eine Variable:
PROJECT_ID=
PROJECT_IDDabei ist
PROJECT_IDdie Projekt-ID desGoogle Cloud -Projekts, das Sie zuvor erstellt haben.Initialisieren Sie eine weitere Variable, damit es die Projektnummer des Projekts enthält:
PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
Installationsdateien hochladen
Sie erfassen jetzt alle Installationsdateien, die für das benutzerdefinierte Image erforderlich sind, und laden sie in einen Cloud Storage-Bucket hoch. Durch Speichern der Dateien in einem Cloud Storage-Bucket wird sichergestellt, dass daisy und die temporären VM-Instanzen, die daisy zum Erstellen des Image verwendet, auf die Dateien zugreifen können.
Ersetzen Sie in den folgenden Schritten UNIQUE_SUFFIX durch eine kurze Folge zufälliger Zeichen, um einen eindeutigen Bucket-Namen zu erstellen. Verwenden Sie zum Beispiel PROJECT_ID-media-a7g19. Durch das Anhängen eines zufälligen Suffixes an den Bucket-Namen wird Bucket-Squatting verhindert. Dabei handelt es sich um eine Sicherheitslücke, bei der ein Angreifer die Kontrolle über Ihren Build-Prozess erlangen kann, indem er einen Bucket mit einem vorhersehbaren Namen vorab beansprucht.
Laden Sie die erforderlichen Installationspakete auf Ihren lokalen Computer herunter:
Erstellen Sie einen neuen Cloud Storage-Bucket zum Speichern der Installationsdateien:
gcloud storage buckets create gs://$PROJECT_ID-media-
UNIQUE_SUFFIX--project=$PROJECT_IDErteilen Sie Cloud Build die Rolle Storage-Objekt-Betrachter, damit die Installationsdateien gelesen werden können:
gcloud storage buckets add-iam-policy-binding gs://$PROJECT_ID-media-
UNIQUE_SUFFIX--member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role=roles/storage.objectViewerLaden Sie das PowerShell-Installationspaket hoch:
gcloud storage cp
POWERSHELL_PACKAGEgs://$PROJECT_ID-media-UNIQUE_SUFFIX/PowerShell.msiDabei ist
POWERSHELL_PACKAGEder Pfad zum PowerShell-Installationspaket.Laden Sie das .NET Framework-Installationspaket hoch:
gcloud storage cp
DOTNET_PACKAGEgs://$PROJECT_ID-media-UNIQUE_SUFFIX/dotnet-sdk.exeDabei ist
DOTNET_PACKAGEder Pfad zum NET Framework-Installationspaket.Laden Sie das Installationspaket für die gcloud CLI hoch:
gcloud storage cp
CLOUDSDK_PACKAGEgs://$PROJECT_ID-media-UNIQUE_SUFFIX/GoogleCloudSDKInstaller.exeDabei ist
CLOUDSDK_PACKAGEder Pfad zum gcloud CLI-Installationspaket.Laden Sie die ISO-Datei, die enthält Ihr Windows-Installationsmedium hoch:
gcloud storage cp
ISOgs://$PROJECT_ID-media-UNIQUE_SUFFIX/Dabei ist
ISOder Name der ISO-Datei.Optional können Sie zusätzliche Updatepakete hochladen:
gcloud storage cp
UPDATE_DIR/*.msu gs://$PROJECT_ID-media-UNIQUE_SUFFIX/updates/Dabei ist
UPDATE_DIRdas Verzeichnis, das die Updatepakete enthält.
Sie können nun das benutzerdefinierte Image erstellen.
Image erstellen
Die Ausführung des Workflows daisy zum Erstellen eines benutzerdefinierten Images kann bis zu vier Stunden dauern.
Anstatt daisy lokal auszuführen, erstellen Sie jetzt eine Cloud Build-Konfiguration, mit der Cloud Build den Workflow im Hintergrund ausführen kann.
Klonen Sie das Git-Repository mit den
daisy-Workflows auf Ihrem lokalen Computer, um Windows-Images zu erstellen:git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
Wechseln Sie in das Verzeichnis
windows:cd compute-image-tools/daisy_workflows/image_build/windows/
Im Verzeichnis
windowsfinden Sie eine Auswahl von Dateien mit dem Suffix.wf.json. Diese Dateien enthalten Daisy-Workflow-Definitionen für häufig verwendete Windows-Versionen:Windows-Version Workflow-Datei Windows Server Core 2022 (64-Bit) windows-server-2022-dc-core-uefi-byol.wf.jsonWindows Server 2019 (64-Bit) windows-server-2019-dc-uefi-byol.wf.jsonWindows Server Core 2019 (64-Bit) windows-server-2019-dc-core-uefi-byol.wf.jsonWindows Server 2016 (64-Bit) windows-server-2016-dc-uefi-byol.wf.jsonWindows Server Core 2016 (64-Bit) windows-server-2016-dc-core-uefi-byol.wf.jsonWindows 11 21H2 (64-Bit) windows-11-21h2-ent-x64-uefi.wf.jsonWindows 11 22H2 (64-Bit) windows-11-22h2-ent-x64-uefi.wf.jsonWindows 11 23H2 (64-Bit) windows-11-23h2-ent-x64-uefi.wf.jsonWindows 10 21H2 (64-Bit) windows-10-21h2-ent-x64-uefi.wf.jsonWindows 10 22H2 (64-Bit) windows-10-22h2-ent-x64-uefi.wf.jsonÖffnen Sie die Workflow-Datei, die am ehesten mit der zu installierenden Windows-Version übereinstimmt. Ändern Sie bei Bedarf die Windows Edition- (
edition) und Lizenzschlüsseleinstellungen (product_key) in den Workflowdateien, damit sie mit Ihrem Installationsmedium übereinstimmen.Wenn Sie sich bezüglich des korrekten Versionsnamens unsicher sind, öffnen Sie eine PowerShell-Eingabeaufforderung mit den folgenden Befehlen. So können Sie alle von Ihrem Installationsmedium unterstützten Versionen auflisten:
$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-NullErsetzen Sie
ISOdurch den lokalen Pfad zum ISO-Image.Erstellen Sie im Verzeichnis
windowseine neue Datei mit dem Namencloudbuild.yamlund fügen Sie den folgenden Code ein: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-UNIQUE_SUFFIX/updates/ - -var:pwsh=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/PowerShell.msi - -var:dotnet48=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/dotnet-sdk.exe - -var:cloudsdk=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/GoogleCloudSDKInstaller.exe - -var:media=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/ISO-WORKFLOWErsetzen Sie:
ISO: den Namen der ISO-Datei in Cloud Storage.WORKFLOW: den Namen der Workflowdatei, die der von Ihnen verwendeten Windows-Version entspricht.
Senden Sie den Build an Cloud Build:
gcloud builds submit --project $PROJECT_ID --async
Der Build kann etwa vier Stunden in Anspruch nehmen. Sie können den Status des Builds in der Google Cloud Console unter Cloud Build > Verlauf verfolgen.
Benutzerdefiniertes Image verwenden
Nachdem der Build abgeschlossen ist, finden Sie das benutzerdefinierte BYOL-Image in derGoogle Cloud Console unter Compute Engine > Images.
Zur Unterscheidung zwischen mehreren Versionen desselben Images bettet der Build-Prozess einen Zeitstempel in den Image-Namen ein, z. B. windows-server-2019-dc-v1613488342.
Darüber hinaus verknüpft der Prozess das Image mit einer benutzerdefinierten Image-Familie, z. B. windows-server-2019.
Zum Erstellen einer VM-Instanz, die das benutzerdefinierte BYOL-Image verwendet, müssen Sie die VM-Instanz auf einem Knoten für einen einzelnen Mandanten bereitstellen.
Fehlerbehebung
Wenn Sie vermuten, dass der Build-Prozess fehlgeschlagen ist oder nicht voranschreitet, können Sie die Situation folgendermaßen diagnostizieren:
- Prüfen Sie, ob Sie die richtigen Installationspakete und ISO-Datei hochgeladen haben.
- Prüfen Sie, ob Sie einen Workflow ausgewählt haben, der mit der Windows-Version der ISO-Datei übereinstimmt.
- Prüfen Sie das Build-Log in Cloud Build und prüfen Sie, ob dort Fehlermeldungen angezeigt werden.
- Wenn der Build scheinbar hängt, prüfen Sie die Ausgabe des seriellen Ports der VM-Instanz, die vom Build erstellt wurde. Achten Sie dabei auf Fehlermeldungen.
Nächste Schritte
- Weitere Informationen zum Daisy-Tool
- Weitere Informationen zu Daisy-Workflows zum Erstellen von Images
- Vorhandene Lizenzen zu Compute Engine hinzufügen
- Best Practices für die Arbeit mit Image-Familien