Créer une image personnalisée Dataproc

Les clusters Dataproc peuvent être provisionnés avec une image personnalisée incluant les packages pré-installés de l'utilisateur. Les étapes suivantes expliquent comment créer une image personnalisée et l'installer sur un cluster Dataproc.

Notes :

  • Les instructions de ce document ne s'appliquent qu'aux systèmes d'exploitation Linux. D'autres systèmes d'exploitation pourraient être compatibles dans les prochaines versions de Cloud Dataproc.
  • Les compilations d'images personnalisées nécessitent de partir d'une image de base Dataproc (actuellement, les images de base Debian et Ubuntu sont compatibles).

Avant de commencer

Configurer votre projet

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activer les API Dataproc API, Compute Engine API, and Cloud Storage.

    Activer les API

  5. Installez et initialisez le SDK Cloud.
  6. Installez Python 2.7+
  7. Préparez un script de personnalisation qui installe des packages personnalisés et/ou met à jour les configurations, par exemple :
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

Créer un bucket Cloud Storage dans votre projet

  1. Dans Cloud Console, accédez à la page Navigateur Cloud Storage.

    Accéder au navigateur Cloud Storage

  2. Cliquez sur Créer un bucket.
  3. Dans la boîte de dialogue Créer un bucket, spécifiez les attributs suivants :
  4. Cliquez sur Créer.

Générer une image personnalisée

Pour créer une image personnalisée Dataproc, vous allez utiliser generate_custom_image.py, un programme Python.

Fonctionnement

Le programme generate_custom_image.py lance une instance de VM Compute Engine temporaire avec l'image de base Dataproc spécifiée, puis exécute le script de personnalisation dans l'instance de VM pour installer des packages personnalisés et/ou mettre à jour les configurations. Une fois le script de personnalisation terminé, il arrête l'instance de VM et crée une image Dataproc personnalisée à partir du disque de l'instance de VM. La VM temporaire est supprimée après la création de l'image personnalisée. L'image personnalisée est enregistrée et peut être utilisée pour créer des clusters Dataproc.

Le programme generate_custom_image.py utilise gcloud (par défaut) pour exécuter des workflows en plusieurs étapes sur Compute Engine.

Exécuter le code

Divisez ou clonez les fichiers sur GitHub dans Images personnalisées Dataproc. Exécutez ensuite le programme generate_custom_image.py pour que Dataproc génère et enregistre votre image personnalisée.

python generate_custom_image.py \
    --image-name custom_image_name \
    [--family custom_image_family_name] \
    --dataproc-version Dataproc version (example: "1.5.10-debian10") \
    --customization-script local path to your custom script \
    --zone Compute Engine zone to use for the location of the temporary VM \
    --gcs-bucket URI (gs://bucket-name) of a Cloud Storage bucket in your project \
    [--no-smoke-test]

Indicateurs requis

  • --image-name : nom de sortie de votre image personnalisée. Remarque : Le nom de l'image doit correspondre à l'expression régulière [a-z](?:[-a-z0-9]{0,61}[a-z0-9]) (par exemple, pas de traits de soulignement ni d'espaces de moins de 64 caractères).
  • --dataproc-version : version de l'image Dataproc à utiliser dans votre image personnalisée. Spécifiez la version au format "x.y.z-os" ou "x.y.z-rc-os", par exemple "1.5.10-debian10", "1.5.10-ubuntu18", "1.5.0-RC10-debian10".
  • --customization-script : chemin d'accès local au script que l'outil exécutera pour installer vos packages personnalisés ou effectuer d'autres personnalisations. Veuillez prendre en compte que ce script n'est exécuté que sur la VM temporaire permettant de créer l'image personnalisée. Vous pouvez spécifier un script d'initialisation différent pour toutes les autres actions d'initialisation que vous souhaitez effectuer lorsque vous créez un cluster avec votre image personnalisée.
  • --zone : zone Compute Enginegenerate_custom_image.py va créer une VM temporaire à utiliser pour créer votre image personnalisée.
  • --gcs-bucket : URI, au format gs://bucket-name, qui pointe vers le bucket Cloud Storage que vous avez créé dans la section Créer un bucket Cloud Storage dans votre projet. generate_custom_image.py va écrire des fichiers journaux dans ce bucket.

Indicateurs facultatifs

  • --family : famille de l'image. Les familles d'images permettent de regrouper des images similaires et peuvent être utilisées lors de la création d'un cluster en tant que pointeur vers l'image la plus récente de la famille. Par exemple, "custom-1-5-debian10".
  • --no-smoke-test : option facultative qui désactive le test de confiance de l'image personnalisée nouvellement créée. Le test de confiance crée un cluster de test Dataproc avec l'image nouvellement créée, exécute une petite tâche, puis supprime le cluster à la fin du test. Le test de confiance s'exécute par défaut pour vérifier que l'image personnalisée nouvellement créée est en mesure de créer un cluster Dataproc fonctionnel. La désactivation de cette étape à l'aide de l'option --no-smoke-test accélère le processus de création d'image personnalisée, mais son utilisation n'est pas recommandée.

Pour obtenir la liste des options facultatives supplémentaires, consultez la section Arguments facultatifs sur GitHub.

Si la commande gcloud aboutit, le imageURI de l'image personnalisée est répertorié dans le résultat de la fenêtre du terminal (le imageUri complet est affiché en gras ci-dessous) :

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

Utiliser une image personnalisée

Vous spécifiez l'image personnalisée lorsque vous créez un cluster Dataproc. Une image personnalisée est enregistrée dans les Images Cloud Compute. Elle permet de créer un cluster Dataproc pendant 60 jours à compter de sa date de création (consultez la section Créer un cluster avec une image personnalisée arrivée à expiration si vous souhaitez utiliser une image personnalisée au-delà de cette période de 60 jours.

URI de l'image personnalisée

Vous transmettez l'URI de l'image personnalisée imageUri à l'opération de création de cluster. Cet URI peut être spécifié de l'une des trois manières suivantes :

  1. URI complet :
    https://www.googleapis.com/compute/beta/projects/project-id/global/images/custom-image-name
  2. URI partiel : projects/project-id/global/images/custom-image-name
  3. Nom abrégé : custom-image-name

Les images personnalisées peuvent également être spécifiées par leur URI de famille, qui choisit toujours l'image la plus récente de la famille d'images.

  1. URI complet :
    https://www.googleapis.com/compute/beta/projects/project-id/global/images/family/custom-image-family-name
  2. URI partiel : projects/project-id/global/images/family/custom-image-family-name

Pour trouver l'URI de l'image personnalisée, procédez comme suit :

Commande gcloud

Exécutez la commande gcloud suivante pour répertorier les noms de vos images personnalisées :

gcloud compute images list

Transmettez le nom de votre image personnalisée à la commande gcloud suivante pour répertorier l'URI (selfLink) de votre image personnalisée :

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. Ouvrez la page Compute Engine → Images dans Cloud Console, puis cliquez sur le nom de l'image. Vous pouvez insérer une requête dans la zone de texte filter-images pour limiter le nombre d'images affichées.
  2. La page des détails d'images s'affiche. Cliquez sur Équivalent REST.
  3. La réponse REST répertorie des informations supplémentaires sur l'image, y compris selfLink, qui est l'URI de l'image.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/my-project-id/global/images/my-custom-image",
      "sourceDisk": ...,
      ...
    }
    

Créer un cluster avec une image personnalisée

Vous pouvez créer un cluster avec des nœuds maîtres et des nœuds de calcul qui utilisent une image personnalisée avec l'outil de ligne de commande gcloud, l'API Dataproc ou Google Cloud Console.

Commande gcloud

Vous pouvez créer un cluster Dataproc avec une image personnalisée à l'aide de la commande dataproc clusters create et l'option --image. Exemple :
gcloud dataproc clusters create cluster-name \
    --image=custom-image-URI \
    --region=region \
    ... other flags ...

API REST

Vous pouvez créer un cluster avec une image personnalisée en spécifiant un URI d'image personnalisé dans le champ InstanceGroupConfig.imageUri des objets masterConfig, workerConfig et, le cas échéant, secondaryWorkerConfig inclus dans une requête d'API cluster.create.

Exemple : requête REST pour créer un cluster Dataproc standard (un maître, deux nœuds de calcul) avec une image personnalisée.

POST /v1/projects/project-id/regions/global/clusters/
{
  "clusterName": "custom-name",
  "config": {
    "masterConfig": {
      "imageUri": "projects/project-id/global/images/custom-image-name"
    },
    "workerConfig": {
      "imageUri": "projects/project-id/global/images/custom-image-name"
    }
  }
}
  

Console

Vous pouvez créer un cluster qui utilise une image personnalisée à partir de la page Dataproc [Créer un cluster](https://console.cloud.google.com/dataproc/clustersAdd) de Cloud Console.
  1. Ouvrez le menu de développement Advanced options (Options avancées) au bas du formulaire.
  2. Dans la section Image, cliquez sur Change (Modifier).
  3. Sélectionnez l'onglet Image personnalisée, sélectionnez l'image personnalisée à utiliser pour votre cluster Dataproc, puis cliquez sur Sélectionner.
Lorsque vous envoyez le formulaire Créer un cluster, les VM de votre cluster seront provisionnées avec l'image personnalisée sélectionnée.

Créer un cluster avec une image personnalisée arrivée à expiration

Par défaut, les images personnalisées expirent 30 jours après leur date de création. Pour créer un cluster utilisant une image personnalisée arrivée à expiration, procédez comme suit :

  1. Essayez de créer un cluster Dataproc avec une image personnalisée arrivée à expiration ou qui expirera dans les 10 jours.

    gcloud dataproc clusters create cluster-name \
        --image=custom-image-name \
        --region=region \
        ... other flags ...
    

  2. L'outil gcloud émet un message d'erreur incluant le nom de la propriété dataproc:dataproc.custom.image.expiration.token du cluster et la valeur du jeton.

    dataproc:dataproc.custom.image.expiration.token=token value
    
    Copiez la chaîne de "valeur du jeton" dans le presse-papiers.

  3. Utilisez l'outil gcloud pour recréer le cluster Dataproc, en ajoutant la "valeur de jeton" copiée ci-dessus en tant que propriété de 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 création du cluster avec l'image personnalisée devrait réussir.