Benutzerdefiniertes Dataproc-Image erstellen

Sie können einen Dataproc-Cluster mit einem benutzerdefinierten Image erstellen, das die vorinstallierten Pakete enthält. Auf dieser Seite erfahren Sie, wie Sie ein benutzerdefiniertes Image erstellen und in einem Dataproc-Cluster installieren.

Überlegungen und Einschränkungen zur Nutzung

  • Lebensdauer von benutzerdefinierten Images:Damit Cluster immer die neuesten Dienstaktualisierungen und Fehlerkorrekturen erhalten, muss die Erstellung von Clustern mit einem benutzerdefinierten Image innerhalb von 365 Tagen ab dem Erstellungsdatum des benutzerdefinierten Images erfolgen. Vorhandene Cluster, die mit einem benutzerdefinierten Image erstellt wurden, können unbegrenzt laufen.

    Möglicherweise müssen Sie eine Automatisierung verwenden, wenn Sie Cluster mit einem bestimmten benutzerdefinierten Image für einen Zeitraum von mehr als 365 Tagen erstellen möchten. Weitere Informationen finden Sie unter Cluster mit abgelaufenem benutzerdefiniertem Image erstellen.

  • Nur Linux:Die Anleitung in diesem Dokument gilt nur für Linux-Betriebssysteme. Andere Betriebssysteme werden möglicherweise in zukünftigen Dataproc-Releases unterstützt.

  • Unterstützte Basis-Images:Benutzerdefinierte Image-Builds müssen auf einem Dataproc-Basis-Image basieren. Folgende Basis-Images werden unterstützt: Debian, Rocky Linux und Ubuntu.

    • Verfügbarkeit von Basis-Images:Neue Images, die in den Dataproc-Versionshinweisen angekündigt werden, können erst eine Woche nach ihrer Ankündigung als Basis für benutzerdefinierte Images verwendet werden.
  • Optionale Komponenten verwenden:Standardmäßig werden benutzerdefinierte Images mit allen optionalen Dataproc-Komponenten (Betriebssystempakete und ‑konfigurationen) aus ihren Basis-Images erstellt. Sie können die Standardversionen und ‑konfigurationen der Betriebssystempakete anpassen, müssen aber beim Erstellen des Clusters den Namen der optionalen Komponente angeben.

    Beispiel für einen Befehl zum Erstellen eines Clusters:

    gcloud dataproc clusters create --optional-components=COMPONENT_NAME \
        --image=CUSTOM_IMAGE_URI  \
         ... other flags
    

    Wenn der Komponentenname beim Erstellen des Clusters nicht angegeben wird, wird die optionale Komponente gelöscht (einschließlich benutzerdefinierter Betriebssystempakete und -konfigurationen).

  • Gehostete benutzerdefinierte Images verwenden: Wenn Sie ein benutzerdefiniertes Image verwenden, das in einem anderen Projekt gehostet wird, muss das Dienstkonto des Dataproc-Dienst-Agents in Ihrem Projekt die Berechtigung compute.images.get für das Image im Hostprojekt haben. Dazu weisen Sie dem Dataproc-Dienst-Agent-Dienstkonto Ihres Projekts die Rolle roles/compute.imageUser für das gehostete Image zu (siehe Benutzerdefinierte Images innerhalb einer Organisation freigeben).

  • MOK-Geheimnisse (Machine Owner Key) für den sicheren Start verwenden:So aktivieren Sie den sicheren Start mit Ihrem benutzerdefinierten Dataproc-Image:

    1. Aktivieren Sie die Secret Manager API (secretmanager.googleapis.com). Dataproc generiert und verwaltet ein Schlüsselpaar mit dem Secret Manager-Dienst.

    2. Fügen Sie dem Befehl generate_custom_image.py das Flag --service-account="SERVICE_ACCOUNT" hinzu, wenn Sie ein benutzerdefiniertes Image generieren. Hinweis: Sie müssen dem Dienstkonto die Rolle „Secret Manager Viewer“ (roles/secretmanager.viewer) für das Projekt und die Rolle „Secret Manager Accessor“ (roles/secretmanager.secretAccessor) für die öffentlichen und privaten Secrets zuweisen.

      Weitere Informationen mit Beispielen finden Sie in der README.md und anderen Dateien im Verzeichnis „examples/secure-boot“ des GoogleCloudDataproc/custom-images-Repositorys auf GitHub.

      Secure Boot deaktivieren:Standardmäßig generieren und verwalten die Scripts für benutzerdefinierte Dataproc-Images ein Schlüsselpaar mit Secret Manager, wenn sie von einem Dataproc-Cluster aus ausgeführt werden. Wenn Sie Secure Boot nicht mit Ihrem benutzerdefinierten Image verwenden möchten, fügen Sie beim Erstellen des benutzerdefinierten Images das Flag --trusted-cert="" (leerer Flag-Wert) in den Befehl generate_custom_image.py ein.

Hinweise

Richten Sie Ihr Projekt ein, bevor Sie das benutzerdefinierte Image generieren.

Projekt einrichten

  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 Dataproc API, Compute Engine API, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

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

  9. Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Installieren Sie Python 3.11 oder höher.
  13. Erstellen Sie ein Anpassungsskript zur Installation benutzerdefinierter Pakete bzw. Aktualisierungskonfigurationen. Beispiel:
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

Cloud Storage-Bucket in Ihrem Projekt erstellen

  1. In the Google Cloud console, go to the Cloud Storage Buckets page.

    Go to Buckets page

  2. Click Create bucket.
  3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
    • For Name your bucket, enter a name that meets the bucket naming requirements.
    • For Choose where to store your data, do the following:
      • Select a Location type option.
      • Select a Location option.
    • For Choose a default storage class for your data, select a storage class.
    • For Choose how to control access to objects, select an Access control option.
    • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
  4. Click Create.

Benutzerdefiniertes Bild generieren

Sie verwenden das Python-Programm generate_custom_image.py, um ein benutzerdefiniertes Dataproc-Image zu erstellen.

Funktionsweise

Das generate_custom_image.py-Programm startet eine temporäre Compute Engine-VM-Instanz mit dem angegebenen Dataproc-Basis-Image und führt dann das Anpassungsskript in der VM-Instanz aus, um benutzerdefinierte Pakete zu installieren und/oder Konfigurationen zu aktualisieren. Nach Abschluss des Anpassungsskripts beendet es die VM-Instanz und erstellt ein benutzerdefiniertes Dataproc-Image vom Laufwerk der VM-Instanz. Die temporäre VM wird gelöscht, nachdem das benutzerdefinierte Image erstellt wurde. Das benutzerdefinierte Image wird gespeichert und kann zum Erstellen von Dataproc-Clustern verwendet werden.

Das generate_custom_image.py-Programm verwendet die gcloud CLI, um mehrstufige Workflows in der Compute Engine auszuführen.

Code ausführen

Verzweigen oder klonen Sie die Dateien auf GitHub unter Benutzerdefinierte Dataproc-Images.

Führen Sie dann das Script generate_custom_image.py aus, damit Dataproc Ihr benutzerdefiniertes Image generiert und speichert.

python3 generate_custom_image.py \
    --image-name=CUSTOM_IMAGE_NAME \
    [--family=CUSTOM_IMAGE_FAMILY_NAME] \
    --dataproc-version=IMAGE_VERSION \
    --customization-script=LOCAL_PATH \
    --zone=ZONE \
    --gcs-bucket=gs://BUCKET_NAME \
    [--no-smoke-test]

Erforderliche Flags

  • --image-name: der Ausgabename für Ihr benutzerdefiniertes Image. Hinweis: Der Image-Name muss dem regulären Ausdruck [a-z](?:[-a-z0-9]{0,61}[a-z0-9]) entsprechen, darf keine Unterstriche oder Leerzeichen enthalten und darf maximal 64 Zeichen lang sein.
  • --dataproc-version: Die Dataproc-Image-Version, die Sie in Ihrem benutzerdefinierten Image verwenden möchten. Geben Sie die Version im Format x.y.z-os oder x.y.z-rc-os an, z. B. „2.0.69-debian10“.

  • --customization-script: Ein lokaler Pfad zu Ihrem Skript, mit dem das Tool Ihre benutzerdefinierten Pakete installiert oder andere Anpassungen vornimmt. Dieses Script wird nur auf der temporären VM ausgeführt, die zum Erstellen des benutzerdefinierten Images verwendet wird, und zwar als Linux-Startskript. Für alle anderen Initialisierungsaktionen, die Sie beim Erstellen eines Clusters mit Ihrem benutzerdefinierten Image ausführen möchten, können Sie ein anderes Initialisierungsskript angeben.

    Projektübergreifende Images:Wenn Ihr benutzerdefiniertes Image zum Erstellen von Clustern in verschiedenen Projekten verwendet wird, kann ein Fehler aufgrund des im Image gespeicherten gcloud- oder gsutil-Befehlscache auftreten. Sie können dieses Problem vermeiden, indem Sie den folgenden Befehl in Ihr Anpassungsskript aufnehmen, um die im Cache gespeicherten Anmeldedaten zu löschen.

    rm -r /root/.gsutil /root/.config/gcloud
    

  • --zone: Die Compute Engine-Zone, in der generate_custom_image.py eine temporäre VM zum Erstellen Ihres benutzerdefinierten Images erstellt.

  • --gcs-bucket: Ein URI im Format gs://BUCKET_NAME, der auf Ihren Cloud Storage-Bucket verweist. generate_custom_image.py schreibt Logdateien in diesen Bucket.

Optionale Flags

  • --family: Die Image-Familie für das benutzerdefinierte Image. Image-Familien werden verwendet, um ähnliche Images zu gruppieren, und können beim Erstellen eines Clusters als Zeiger auf das neueste Image in der Familie verwendet werden. Beispiel: custom-2-2-debian12.
  • --no-smoke-test: Dies ist ein optionales Flag, das das Testen des neu erstellten benutzerdefinierten Images deaktiviert. Der Smoke-Test erstellt einen Dataproc-Testcluster mit dem neu erstellten Image, führt einen kleinen Job aus und löscht den Cluster am Ende des Tests. Der Smoke-Test wird standardmäßig ausgeführt, um zu prüfen, ob das neu erstellte benutzerdefinierte Image einen funktionierenden Dataproc-Cluster erstellen kann. Das Deaktivieren dieses Schritts mit dem Flag --no-smoke-test beschleunigt die Erstellung des benutzerdefinierten Image, wird jedoch nicht empfohlen.
  • --subnet: Das Subnetzwerk, mit dem die VM erstellt wird, auf der das benutzerdefinierte Dataproc-Image erstellt wird. Wenn Ihr Projekt zu einer freigegebenen VPC gehört, müssen Sie die vollständige Subnetzwerk-URL im folgenden Format angeben: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Eine Liste weiterer optionaler Flags finden Sie unter Optionale Argumente von GitHub.

Wenn generate_custom_image.py erfolgreich ist, wird der imageURI des benutzerdefinierten Images in der Ausgabe des Terminalfensters angezeigt (der vollständige imageUri ist unten fett dargestellt):

...
managedCluster:
    clusterName: verify-image-20180614213641-8308a4cd
    config:
      gceClusterConfig:
        zoneUri: ZONE
      masterConfig:
        imageUri: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

INFO:__main__:Successfully built Dataproc custom image: CUSTOM_IMAGE_NAME
INFO:__main__:

#####################################################################
  WARNING: DATAPROC CUSTOM IMAGE 'CUSTOM_IMAGE_NAME'
           WILL EXPIRE ON 2018-07-14 21:35:44.133000.
#####################################################################

Benutzerdefinierte Image-Versionslabels (erweiterte Verwendung)

Wenn Sie das standardmäßige Tool zur Erstellung von benutzerdefinierten Images von Dataproc verwenden, legt das Tool ein goog-dataproc-version-Label für das erstellte benutzerdefinierte Image fest. Das Label spiegelt den Funktionsumfang und die Protokolle wider, die von Dataproc zur Verwaltung der Software im Image verwendet werden.

Fortgeschrittene Nutzer, die mithilfe eines eigenen Prozesses ein benutzerdefiniertes Dataproc-Image erstellen, müssen das Label manuell folgendermaßen zu ihrem benutzerdefinierten Image hinzufügen:goog-dataproc-version

  1. Extrahieren Sie das Label goog-dataproc-version aus dem Cloud Dataproc-Basis-Image, das zum Erstellen des benutzerdefinierten Images verwendet wird.

    gcloud compute images describe ${BASE_DATAPROC_IMAGE} \
        --project cloud-dataproc \
        --format="value(labels.goog-dataproc-version)"
    

  2. Legen Sie das Label für das benutzerdefinierte Image fest.

    gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
    

Benutzerdefiniertes Image verwenden

Sie geben das benutzerdefinierte Image an, wenn Sie einen Dataproc-Cluster erstellen. Ein benutzerdefiniertes Image wird unter Cloud Compute-Images gespeichert und kann ab dem Erstellungstag 365 Tage lang zum Erstellen eines Dataproc-Clusters verwendet werden. Informationen zur Verwendung eines benutzerdefinierten Images nach Ablauf der 365 Tage finden Sie unter Cluster mit abgelaufenem benutzerdefiniertem Image erstellen.

URI eines benutzerdefinierten Images

Sie übergeben den imageUri des benutzerdefinierten Images an den Cluster-Erstellungsvorgang. Es gibt drei Möglichkeiten, diesen URI anzugeben:

  1. Vollständiger URI:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
  2. Teil-URI: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. Kurzform: CUSTOM_IMAGE_NAME

Benutzerdefinierte Images können auch über ihren Familien-URI angegeben werden, der immer das neueste Bild innerhalb der Image-Familie auswählt.

  1. Vollständiger URI:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
  2. Teil-URI: projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME

URI des benutzerdefinierten Images ermitteln

Google Cloud CLI

Führen Sie den folgenden Befehl aus, um die Namen Ihrer benutzerdefinierten Images aufzulisten.

gcloud compute images list

Übergeben Sie den Namen Ihres benutzerdefinierten Images an den folgenden Befehl, um den URI (selfLink) Ihres benutzerdefinierten Images aufzulisten:

gcloud compute images describe custom-image-name

Ausgabe-Snippet:

...
name: CUSTOM_IMAGE_NAME
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

Console

  1. Öffnen Sie in der Google Cloud Console die Seite Compute Engine → Images und klicken Sie auf den Image-Namen. Sie können eine Abfrage in das Feld filter images einfügen, um die Anzahl der angezeigten Bilder zu begrenzen.
  2. Die Seite Bilddetails wird geöffnet. Klicken Sie auf Equivalent REST (Entsprechende REST-Anfrage/-Antwort).
  3. In der REST-Antwort werden zusätzliche Informationen über das Image angezeigt, beispielsweise der Image-URI selfLink.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
      "sourceDisk": ...,
      ...
    }
    

Cluster mit benutzerdefiniertem Image erstellen

Sie können einen Cluster mit Master- und Worker-Knoten erstellen, die ein benutzerdefiniertes Image verwenden. Verwenden Sie hierzu die gcloud CLI, die Dataproc API oder die Google Cloud Console.

gcloud-CLI

Sie können einen Dataproc-Cluster mit einem benutzerdefinierten Image mit dem Befehl dataproc clusters create und dem Flag --image erstellen.

Beispiel:
gcloud dataproc clusters create CLUSTER-NAME \
    --image=CUSTOM_IMAGE_URI \
    --region=REGION \
    ... other flags ...

REST API

Sie können einen Cluster mit einem benutzerdefinierten Image erstellen. Geben Sie dazu den URI des benutzerdefinierten Images im Feld InstanceGroupConfig.imageUri in den Objekten masterConfig, workerConfig und gegebenenfalls secondaryWorkerConfig in der API-Anfrage cluster.create an.

Beispiel: REST-Anfrage zum Erstellen eines Standard-Dataproc-Clusters (ein Master, zwei Worker-Knoten) mit einem benutzerdefinierten Image.

POST /v1/projects/PROJECT_ID/regions/REGION/clusters/
{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "masterConfig": {
      "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
    },
    "workerConfig": {
      "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
    }
  }
}
  

Console

  1. Öffnen Sie die Dataproc-Seite Cluster erstellen. Der Bereich Cluster einrichten ist ausgewählt.
  2. Klicken Sie im Abschnitt Versionsverwaltung auf Ändern. Wählen Sie den Tab Benutzerdefiniertes Image aus, wählen Sie das benutzerdefinierte Image aus, das für Ihren Dataproc-Cluster verwendet werden soll, und klicken Sie dann auf Auswählen. Die VMs des Clusters werden mit dem ausgewählten benutzerdefinierten Image bereitgestellt.

Dataproc-Clusterattribute mit einem benutzerdefinierten Image überschreiben

Mithilfe von benutzerdefinierten Images können Sie alle Clusterattribute überschreiben, die während der Clustererstellung festgelegt wurden. Wenn Sie einen Cluster mit einem benutzerdefinierten Image erstellen und beim Erstellen des Clusters Attribute mit Werten festgelegt werden, die sich von denen des benutzerdefinierten Images unterscheiden, haben die vom benutzerdefinierten Image festgelegten Attributwerte Vorrang.

So legen Sie Clusterattribute mit Ihrem benutzerdefinierten Image fest:

  1. Erstellen Sie in dem Anpassungsskript Ihres benutzerdefinierten Images eine dataproc.custom.properties-Datei in /etc/google-dataproc und legen Sie dann die Attributwerte des Clusters in der Datei fest.

    • Beispieldatei dataproc.custom.properties:
    dataproc.conscrypt.provider.enable=VALUE
    dataproc.logging.stackdriver.enable=VALUE
    
    • Beispiel für ein Snippet zum Erstellen von Dateien zur Anpassung des Skripts, um zwei Clusterattribute zu überschreiben:
    cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
    dataproc.conscrypt.provider.enable=true
    dataproc.logging.stackdriver.enable=false
    EOF
    

Cluster mit abgelaufenem benutzerdefiniertem Image erstellen

Benutzerdefinierte Images laufen standardmäßig 365 Tage nach dem Datum der Erstellung des Images ab. So erstellen Sie einen Cluster mit einem abgelaufenen benutzerdefinierten Image:

  1. Versuchen Sie, einen Dataproc-Cluster mit einem abgelaufenen benutzerdefinierten Image oder einem benutzerdefinierten Image zu erstellen, das innerhalb von zehn Tagen abläuft.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --region=REGION \
        ... other flags ...
    
  2. Die gcloud CLI gibt eine Fehlermeldung aus, die den Attributnamen dataproc:dataproc.custom.image.expiration.token und den Tokenwert des Clusters enthält.

dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE

Kopieren Sie den TOKEN_VALUE-String in die Zwischenablage.

  1. Verwenden Sie die gcloud CLI, um den Dataproc-Cluster noch einmal zu erstellen. Fügen Sie dazu die kopierte TOKEN_VALUE als Clustereigenschaft hinzu.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \
        --region=REGION \
        ... other flags ...
    

Der Cluster mit dem benutzerdefinierten Image sollte nun erfolgreich erstellt werden.