Creare un'immagine personalizzata di Dataproc

Puoi eseguire il provisioning dei cluster Dataproc con un'immagine personalizzata che include i pacchetti preinstallati di un utente. Questa pagina mostra come creare un'immagine personalizzata e installarla su un cluster Dataproc.

Considerazioni e limitazioni sull'utilizzo

  • Durata dell'immagine personalizzata: per garantire che i cluster ricevano gli aggiornamenti più recenti dei servizi e le correzioni di bug, la creazione di cluster con un'immagine personalizzata è limitata a 365 giorni dalla data di creazione dell'immagine personalizzata. Tieni presente che i cluster esistenti creati con un'immagine personalizzata possono essere eseguiti a tempo indeterminato.

    Potresti dover utilizzare l'automazione se vuoi creare cluster con un'immagine personalizzata specifica per un periodo superiore a 365 giorni. Per ulteriori informazioni, consulta Come creare un cluster con un'immagine personalizzata scaduta.

  • Solo Linux: le istruzioni riportate in questo documento si applicano solo ai sistemi operativi Linux. Altri sistemi operativi potrebbero essere supportati nelle future release di Dataproc.

  • Immagini di base supportate: le build di immagini personalizzate richiedono di iniziare da un'immagine di base Dataproc. Sono supportate le seguenti immagini di base: Debian, Rocky Linux e Ubuntu.

    • Disponibilità delle immagini di base: le nuove immagini annunciate nelle note di rilascio di Dataproc non possono essere utilizzate come base per le immagini personalizzate fino a una settimana dalla data di annuncio.
  • Utilizzo dei componenti facoltativi: per impostazione predefinita, le immagini personalizzate ereditano tutti i componenti facoltativi di Dataproc (pacchetti e configurazioni del sistema operativo) dalle immagini di base. Puoi personalizzare le versioni e le configurazioni del pacchetto del sistema operativo predefiniti, ma devi specificare il nome del componente facoltativo quando crei il cluster.

    Comando di creazione del cluster di esempio:

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

    Se il nome del componente non viene specificato durante la creazione del cluster, il componente facoltativo, inclusi eventuali pacchetti e configurazioni del sistema operativo personalizzati, verrà eliminato.

  • Utilizzo di immagini personalizzate ospitate: se utilizzi un'immagine personalizzata ospitata in un altro progetto, l'account di servizio Dataproc Service Agent nel tuo progetto deve disporre dell'autorizzazione compute.images.get sull'immagine nel progetto host. Puoi concedere questa autorizzazione concedendo il ruolo roles/compute.imageUser all'immagine ospitata all'account di servizio Dataproc Service Agent del tuo progetto (consulta Condividere immagini personalizzate all'interno di un'organizzazione).

  • Utilizzo dei secret MOK (Machine Owner Key) per il boot sicuro: per attivare il boot sicuro con l'immagine personalizzata Dataproc:

    1. Abilita l'API Secret Manager (secretmanager.googleapis.com). Dataproc genera e gestisce una coppia di chiavi utilizzando il servizio Secret Manager.

    2. Aggiungi il flag --service-account="SERVICE_ACCOUNT" al comando generate_custom_image.py quando generi un'immagine personalizzata. Nota: devi concedere all'account di servizio il ruolo Visualizzatore Secret Manager (roles/secretmanager.viewer) nel progetto e il ruolo Accesso a Secret Manager (roles/secretmanager.secretAccessor) sui secret pubblici e privati.

    Per ulteriori informazioni con esempi, consulta README.md e altri file all'interno della directory examples/secure-boot del repository GoogleCloudDataproc/custom-images su GitHub.

    Per disattivare il boot sicuro: per impostazione predefinita, gli script delle immagini personalizzate di Dataproc generano e gestiscono una coppia di chiavi utilizzando Secret Manager quando vengono eseguiti da un cluster Dataproc. Se non vuoi utilizzare il boot sicuro con l'immagine personalizzata, includi --trusted-cert="" (valore del flag vuoto) nel comando generate_custom_image.py quando generi l'immagine personalizzata.

Prima di iniziare

Assicurati di configurare il progetto prima di generare l'immagine personalizzata.

Configura il progetto

  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. Installa Python 3.11 o versioni successive
  13. Prepara uno script di personalizzazione che installa pacchetti personalizzati e/o aggiorna le configurazioni, ad esempio:
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

crea un bucket Cloud Storage nel tuo progetto

  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.

Generare un'immagine personalizzata

Utilizza generate_custom_image.py, un programma Python, per creare un'immagine personalizzata Dataproc.

Come funziona

Il programma generate_custom_image.py avvia un'istanza VM Compute Engine temporanea con l'immagine di base Dataproc specificata, quindi esegue lo script di personalizzazione all'interno dell'istanza VM per installare i pacchetti personalizzati e/o aggiornare le configurazioni. Al termine dello script di personalizzazione, l'istanza VM viene arrestata e viene creata un'immagine personalizzata Dataproc dal disco dell'istanza VM. La VM temporanea viene eliminata dopo la creazione dell'immagine personalizzata. L'immagine personalizzata viene salvata e può essere utilizzata per creare cluster Dataproc.

Il programma generate_custom_image.py utilizza gcloud CLI per eseguire flussi di lavoro in più passaggi su Compute Engine.

Esegui il codice

Crea un fork o clona i file su GitHub all'indirizzo Immagini personalizzate di Dataproc.

Quindi, esegui lo script generate_custom_image.py per consentire a Dataproc di generare e salvare l'immagine personalizzata.

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]

Flag obbligatori

  • --image-name: il nome dell'output per l'immagine personalizzata. Nota:il nome dell'immagine deve corrispondere all'espressione regolare [a-z](?:[-a-z0-9]{0,61}[a-z0-9]) senza trattini bassi o spazi e deve contenere meno di 64 caratteri.
  • --dataproc-version: la versione dell'immagine Dataproc da utilizzare nell'immagine personalizzata. Specifica la versione in formato x.y.z-os o x.y.z-rc-os, ad esempio "2.0.69-debian10".
  • --customization-script: un percorso locale allo script che verrà eseguito dallo strumento per installare i pacchetti personalizzati o eseguire altre personalizzazioni. Questo script viene eseguito solo sulla VM temporanea utilizzata per creare l'immagine personalizzata. Puoi specificare un altro script di inizializzazione per altre azioni di inizializzazione che vuoi eseguire quando crei un cluster con la tua immagine personalizzata.
  • --zone: la zona Compute Engine in cui generate_custom_image.py creerà una VM temporanea da utilizzare per creare la tua immagine personalizzata.
  • --gcs-bucket: un URI, nel formato gs://BUCKET_NAME, che rimanda al tuo bucket Cloud Storage. generate_custom_image.py scrive i file di log in questo bucket.

Flag facoltativi

  • --family: la famiglia di immagini per l'immagine personalizzata. Le famiglie di immagini vengono utilizzate per raggruppare insieme immagini simili e possono essere utilizzate durante la creazione di un cluster come puntatore all'immagine più recente della famiglia. Ad esempio, custom-2-2-debian12.
  • --no-smoke-test: questo è un flag facoltativo che disattiva i test di fumosità dell'immagine personalizzata appena creata. Il test di fumosità crea un cluster di test Dataproc con l'immagine appena creata, esegue un piccolo job ed elimina il cluster al termine del test. Il test di fumosità viene eseguito per impostazione predefinita per verificare che l'immagine personalizzata appena creata possa creare un cluster Dataproc funzionante. La disattivazione di questo passaggio mediante l'utilizzo del flag --no-smoke-test consente di accelerare la processo di compilazione delle immagini personalizzate, ma l'utilizzo non è consigliato.
  • --subnet: la sottorete da utilizzare per creare la VM che crea l'immagine Dataproc personalizzata. Se il progetto fa parte di una VPC condivisa, devi specificare l'URL completo della subnet nel seguente formato: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Per un elenco di altri flag facoltativi, consulta Argomenti facoltativi su GitHub.

Se generate_custom_image.py ha esito positivo, il imageURI dell'immagine personalizzata viene visualizzato nell'output della finestra del terminale (il imageUri completo è mostrato in grassetto di seguito):

...
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.
#####################################################################

Etichette delle versioni delle immagini personalizzate (utilizzo avanzato)

Quando utilizzi lo strumento per le immagini personalizzate standard di Dataproc, lo strumento imposta un'etichetta goog-dataproc-version sull'immagine personalizzata creata. L'etichetta riflette le funzionalità e i protocolli delle funzionalità utilizzati da Dataproc per gestire il software nell'immagine.

Utilizzo avanzato: se utilizzi la tua procedura per creare un'immagine Dataproc personalizzata, devi aggiungere manualmente l'etichetta goog-dataproc-version all'immagine personalizzata, come segue:

  1. Estrai l'etichetta goog-dataproc-version dall'immagine Dataproc di base utilizzata per creare l'immagine personalizzata.

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

  2. Imposta l'etichetta sull'immagine personalizzata.

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

Utilizza un'immagine personalizzata

Specifica l'immagine personalizzata quando crei un cluster Dataproc. Un'immagine personalizzata viene salvata in Cloud Compute Images ed è valida per creare un cluster Dataproc per 365 giorni dalla data di creazione (consulta Come creare un cluster con un'immagine personalizzata scaduta per utilizzare un'immagine personalizzata dopo la data di scadenza di 365 giorni).

URI immagine personalizzato

Trasmetti il imageUri dell'immagine personalizzata all'operazione di creazione del cluster. Questo URI può essere specificato in uno dei tre modi seguenti:

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
  2. URI parziale: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. Nome breve: CUSTOM_IMAGE_NAME

Le immagini personalizzate possono essere specificate anche tramite l'URI della famiglia, che sceglie sempre l'immagine più recente all'interno della famiglia di immagini.

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
  2. URI parziale: projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME

Come trovare l'URI immagine personalizzato

Google Cloud CLI

Esegui il comando seguente per elencare i nomi delle immagini personalizzate.

gcloud compute images list

Passa il nome dell'immagine personalizzata al comando seguente per elencare l'URI (selfLink) dell'immagine personalizzata.

gcloud compute images describe custom-image-name

Snippet di output:

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

Console

  1. Apri la pagina Compute Engine→Immagini nella console Google Cloud e fai clic sul nome dell'immagine. Puoi inserire una query nel campo filter images per limitare il numero di immagini visualizzate.
  2. Viene visualizzata la pagina Dettagli immagini. Fai clic su REST equivalente.
  3. La risposta REST elenca ulteriori informazioni sull'immagine, tra cui il selfLink, ovvero l'URI dell'immagine.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
      "sourceDisk": ...,
      ...
    }
    

Creare un cluster con un'immagine personalizzata

Crea un cluster con nodi master e worker che utilizzano un'immagine personalizzata utilizzando gcloud CLI, l'API Dataproc o la console Google Cloud.

Interfaccia a riga di comando gcloud

Crea un cluster Dataproc con un'immagine personalizzata utilizzando il comando dataproc clusters create con il flag --image.

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

API REST

Crea un cluster con un'immagine personalizzata specificando l'URI dell'immagine personalizzata nel campo InstanceGroupConfig.imageUri nell'oggetto masterConfig, workerConfig e, se applicabile, secondaryWorkerConfig incluso in una richiesta dell'API cluster.create.

Esempio: richiesta REST per creare un cluster Dataproc standard (un nodo master, due nodi worker) con un'immagine personalizzata.

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. Apri la pagina Dataproc Crea un cluster. Il riquadro Configura cluster è selezionato.
  2. Nella sezione Controllo delle versioni, fai clic su Cambia. Seleziona la scheda Immagine personalizzata, scegli l'immagine personalizzata da utilizzare per il cluster Dataproc e poi fai clic su Seleziona. Verrà eseguito il provisioning delle VM del cluster con l'immagine personalizzata selezionata.

Sostituisci le proprietà del cluster Dataproc con un'immagine personalizzata

Puoi utilizzare immagini personalizzate per sovrascrivere le proprietà del cluster impostate durante la creazione del cluster. Se crei un cluster con un'immagine personalizzata e l'operazione di creazione del cluster imposta proprietà con valori diversi da quelli impostati dall'immagine personalizzata, avranno la precedenza i valori delle proprietà impostati dall'immagine personalizzata.

Per impostare le proprietà del cluster con l'immagine personalizzata:

  1. Nello script di personalizzazione dell'immagine personalizzata, crea un file dataproc.custom.properties in /etc/google-dataproc e imposta i valori delle proprietà del cluster nel file.

    • File dataproc.custom.properties di esempio:
    dataproc.conscrypt.provider.enable=VALUE
    dataproc.logging.stackdriver.enable=VALUE
    
    • Snippet di creazione di file di script di personalizzazione di esempio per eseguire l'override di due proprietà del cluster:
    cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
    dataproc.conscrypt.provider.enable=true
    dataproc.logging.stackdriver.enable=false
    EOF
    

Come creare un cluster con un'immagine personalizzata scaduta

Per impostazione predefinita, le immagini personalizzate scadono 365 giorni dopo la data di creazione dell'immagine. Per creare un cluster che utilizza un'immagine personalizzata scaduta, completa i passaggi riportati di seguito.

  1. Prova a creare un cluster Dataproc con un'immagine personalizzata scaduta o un'immagine personalizzata che scadrà entro 10 giorni.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --region=REGION \
        ... other flags ...
    
  2. Gcloud CLI emetterà un messaggio di errore che include il nome della proprietà dataproc:dataproc.custom.image.expiration.token del cluster e il valore del token.

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

Copia la stringa TOKEN_VALUE negli appunti.

  1. Utilizza l'interfaccia a riga di comando gcloud per creare di nuovo il cluster Dataproc, aggiungendo TOKEN_VALUE copiato come proprietà del cluster.

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

La creazione del cluster con l'immagine personalizzata dovrebbe riuscire.