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. I passaggi seguenti spiegano come creare un personalizzata e installarla su un cluster Dataproc.

Note:

  • Le istruzioni riportate in questo documento si applicano solo ai sistemi operativi Linux. In futuro potrebbero essere supportati altri sistemi operativi Release di Dataproc.
  • Le build di immagini personalizzate richiedono di iniziare da un'immagine base Dataproc ( Immagini di base Debian, Rocky Linux e Ubuntu sono supportati).
  • Utilizzo di 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 dei pacchetti del sistema operativo predefiniti, ma devi specificare il nome del componente facoltativo quando crei il cluster (ad esempio, eseguendo il comando gcloud dataproc clusters create --optional-components=COMPONENT_NAME; consulta Aggiunta di componenti facoltativi). Se il nome del componente non è specificato al momento della creazione del cluster, (inclusi eventuali pacchetti e configurazioni del sistema operativo personalizzati) verrà eliminato.

Prima di iniziare

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.

Genera un'immagine personalizzata

Utilizzerai 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. Dopo lo script di personalizzazione viene arrestata, arresta l'istanza VM e crea una configurazione 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 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 in Immagini personalizzate di Dataproc. Quindi, esegui il programma 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]), ad esempio senza trattini bassi o spazi, meno di 64 caratteri.
  • --dataproc-version: la versione immagine di Dataproc da utilizzare nella tua immagine personalizzata. Specifica la versione nel 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 lo strumento eseguirà per installare i pacchetti personalizzati o eseguire altre personalizzazioni. Tieni presente che questo script viene eseguito solo sulla VM temporanea utilizzata per creare l'immagine personalizzata. Puoi specificare uno script di inizializzazione diverso per qualsiasi altra azione 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 l'immagine personalizzata.
  • --gcs-bucket: un URI, nel formato gs://BUCKET_NAME, che rimanda al bucket Cloud Storage che hai creato in Creare un bucket Cloud Storage nel progetto. generate_custom_image.py scriverà file di log in questo bucket.

Flag facoltativi

  • --family: la famiglia di immagini per l'immagine. Le famiglie di immagini vengono utilizzate per raggruppare immagini simili e possono essere utilizzati durante la creazione di un cluster come puntatore l'immagine più recente della famiglia. Ad esempio, "custom-1-5-debian10".
  • --no-smoke-test: questo è un flag facoltativo che disattiva i test di fumo un'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 del fumo viene eseguito per impostazione predefinita per verificare che l'immagine personalizzata appena creata può creare un progetto Dataproc funzionale in un cluster Kubernetes. La disattivazione di questo passaggio mediante l'utilizzo del flag --no-smoke-test accelererà la procedura di creazione dell'immagine personalizzata, ma il suo utilizzo non è consigliato.
  • --subnet: la subnet da utilizzare per creare la VM che crea l'immagine Dataproc personalizzata. Se il tuo progetto fa parte di In un VPC condiviso, devi specificare l'URL completo della subnet nel seguente formato: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Per un elenco di ulteriori flag facoltativi, vedi Argomenti facoltativi su GitHub.

Se generate_custom_image.py ha esito positivo, il imageURI dell'immagine personalizzata verrà elencato 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 dell'immagine personalizzate per utenti avanzati

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

Gli utenti avanzati che utilizzano la propria procedura per creare un'immagine Dataproc personalizzata devono aggiungere l'etichetta manualmente all'immagine personalizzata, come segue:

  1. Estrai l'etichetta goog-dataproc-version da 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 è stata salvata in Cloud Compute Images e è valida per creare un cluster Dataproc per 365 giorni dal suo data di creazione (vedi 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

Passi il valore 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

Comando gcloud

Esegui il seguente comando gcloud per elencare i nomi delle immagini personalizzate:

gcloud compute images list

Passa il nome della tua immagine personalizzata al seguente comando gcloud per elencare l'URI (selfLink) dell'immagine personalizzata:

gcloud compute images describe custom-image-name
...
name: CUSTOM_IMAGE_NAME
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

Console

  1. Apri l'app Compute Engine→Immagini nella console Google Cloud e fai clic sul nome dell'immagine. Puoi inserire una query nella casella di testo delle immagini con filtro per limitare il numero delle immagini visualizzate.
  2. Si apre la pagina dei dettagli dell'immagine. 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

Puoi creare un cluster con nodi master e worker che utilizzano un'immagine personalizzata con lo strumento a riga di comando gcloud, l'API Dataproc o la console Google Cloud.

Comando gcloud

Puoi creare 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

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

Esempio: richiesta REST per creare uno standard Cluster Dataproc (un master, due nodi worker) con un'architettura dell'immagine.

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. Nella console Google Cloud, apri la pagina Dataproc Crea un cluster. Il riquadro Configura cluster è selezionato.
  2. Nella sezione Versionamento, fai clic su CAMBIA. Seleziona la scheda IMMAGINE PERSONALIZZATA, scegli l'immagine personalizzata da utilizzare per il cluster Dataproc, quindi fai clic su SELEZIONA.

Quando invii il modulo Crea un cluster, le VM del cluster verranno provisionate con l'immagine personalizzata selezionata.

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

Puoi utilizzare immagini personalizzate per sovrascrivere proprietà del cluster durante la creazione del cluster. Se un utente crea un cluster con la tua immagine personalizzata, ma imposta proprietà del cluster diverse da quelle impostate con l'immagine personalizzata, avranno la precedenza le impostazioni delle proprietà del cluster dell'immagine personalizzata.

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

  1. Nell'immagine personalizzata script di personalizzazione, creare un file dataproc.custom.properties in /etc/google-dataproc, quindi Impostare i valori delle proprietà del cluster nel file.
    • Contenuti di esempio del file dataproc.custom.properties:
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      

Esempio di snippet per la creazione di file dello script di personalizzazione per sostituire 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. Puoi creare un cluster che utilizza un'immagine personalizzata scaduta completando i seguenti passaggi.

  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. L'interfaccia a riga di comando gcloud 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 il "valore del token" stringa negli appunti.

  3. Utilizza gcloud CLI per creare di nuovo il cluster Dataproc, aggiungendo il "valore token" copiato sopra 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.