Créer une image Dataproc personnalisée

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.

Remarques :

  • 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 releases de Dataproc.
  • Les compilations d'images personnalisées nécessitent de partir d'une image de base Dataproc (les images de base Debian, Rocky Linux et Ubuntu sont prises en charge).
  • Utiliser des composants facultatifs Par défaut, les images personnalisées héritent de tous les Composants Dataproc facultatifs (Packages et configurations de système d'exploitation) à partir de leurs images de base. Vous pouvez personnaliser les versions et les configurations de package du système d'exploitation par défaut, mais vous devez spécifier le nom du composant facultatif lorsque vous créez votre cluster (par exemple, en exécutant la commande gcloud dataproc clusters create --optional-components=COMPONENT_NAME – voir Ajouter des composants facultatifs). Si le nom du composant n'est pas spécifié lors de la création du cluster, le composant (y compris les packages et configurations d'OS personnalisés) est supprimé.

Avant de commencer

Configurer votre projet

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

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

    Activer les API

  5. Installez Google Cloud CLI.
  6. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  7. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  8. Vérifiez que la facturation est activée pour votre projet Google Cloud.

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

    Activer les API

  10. Installez Google Cloud CLI.
  11. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  12. Installer Python 3.11 ou une version ultérieure
  13. Préparez un script de personnalisation qui installe des packages personnalisés et/ou met à jour des 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 la console Google Cloud, accédez à la page Buckets Cloud Storage.

    Accéder à la page "Buckets"

  2. Cliquez sur Créer un bucket.
  3. Sur la page Créer un bucket, saisissez les informations concernant votre bucket. Pour passer à l'étape suivante, cliquez sur Continuer.
    • Pour nommer votre bucket, saisissez un nom qui répond aux exigences de dénomination des buckets.
    • Pour Choisir l'emplacement de stockage des données, procédez comme suit :
      • Sélectionnez une option de type d'emplacement.
      • Sélectionnez une option Location (Emplacement).
    • Pour Choisir une classe de stockage par défaut pour vos données, sélectionnez une classe de stockage.
    • Pour le champ Choisir comment contrôler l'accès aux objets, sélectionnez une option de Contrôle des accès.
    • Sous Paramètres avancés (facultatif), choisissez une méthode de chiffrement, une règle de conservation ou des libellés de bucket.
  4. Cliquez sur Create (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 CLI 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.

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]

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 "2.0.69-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.
  • --subnet: sous-réseau à utiliser pour créer la VM qui compile l'image Dataproc personnalisée. Si votre projet fait partie d'un VPC partagé, vous devez spécifier l'URL complète du sous-réseau au format suivant: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

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

Si l'opération generate_custom_image.py réussit, 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.
#####################################################################

Libellés des versions d'images personnalisées pour les utilisateurs avancés

Lorsque vous utilisez l'outil standard de création d'image personnalisée de Dataproc, un libellé goog-dataproc-version obligatoire est automatiquement défini sur l'image personnalisée créée. Le libellé reflète les fonctionnalités et les protocoles de la caractéristique utilisés par Dataproc pour gérer le logiciel sur l'image.

Les utilisateurs avancés qui utilisent leur propre processus pour créer une image Dataproc personnalisée doivent ajouter le libellé manuellement à leur image personnalisée, comme suit :

  1. Extrayez le libellé goog-dataproc-version de l'image Dataproc de base utilisée pour créer l'image personnalisée.

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

  2. Définissez le libellé sur l'image personnalisée.

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

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 Images Cloud Compute. Elle permet de créer un cluster Dataproc pendant 365 jours à compter de sa date de création (consultez la section Créer un cluster avec une image personnalisée arrivée à expiration pour utiliser une image personnalisée passée sa date d'expiration de 365 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/`gs://`BUCKET_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/var>
  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 la console Google Cloud, 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 correspond à l'URI de l'image.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
      "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 utilisant une image personnalisée à l'aide de l'outil de ligne de commande gcloud, de l'API Dataproc ou de la console Google Cloud.

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 l'URI d'image personnalisée dans le champ InstanceGroupConfig.imageUri des objets masterConfig, workerConfig et, le cas échéant, secondaryWorkerConfig inclus dans une requête API cluster.create.

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

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. Dans la console Google Cloud, ouvrez la page Dataproc Créer un cluster. Le panneau "Configurer un cluster" est sélectionné.
  2. Dans la section "Gestion des versions", cliquez sur MODIFIER. Sélectionnez l'onglet IMAGE PERSONNALISÉE, choisissez 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.

Remplacer les propriétés du cluster Dataproc par une image personnalisée

Vous pouvez utiliser des images personnalisées pour écraser toutes les propriétés de cluster définies lors de la création du cluster. Si un utilisateur crée un cluster avec votre image personnalisée, mais définit des propriétés de cluster différentes de celles que vous avez définies avec l'image personnalisée, vos paramètres de propriété des clusters d'images personnalisées sont prioritaires.

Pour définir les propriétés de cluster avec votre image personnalisée :

  1. Dans votre script de personnalisation d'image personnalisée, créez un fichier dataproc.custom.properties dans /etc/google-dataproc, puis définissez les valeurs de propriété du cluster dans le fichier.
    • Exemple de contenu de fichier dataproc.custom.properties :
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      

Exemple d'extrait de fichier de création de script de personnalisation pour remplacer deux propriétés de cluster :

     cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
     dataproc.conscrypt.provider.enable=true
     dataproc.logging.stackdriver.enable=false
     EOF

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

Par défaut, les images personnalisées expirent 365 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 une image personnalisée qui expirera dans 10 jours.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --region=REGION \
        ... other flags ...
    

  2. La gcloud CLI émet un message d'erreur indiquant 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 la gcloud CLI pour créer à nouveau 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.