Membuat image kustom Dataproc

Anda dapat membuat cluster Dataproc dengan image kustom yang menyertakan paket bawaan. Halaman ini menunjukkan cara membuat image kustom dan menginstalnya di cluster Dataproc.

Pertimbangan dan batasan penggunaan

  • Masa aktif image kustom: Untuk membantu memastikan cluster menerima update layanan dan perbaikan bug terbaru, pembuatan cluster dengan image kustom dibatasi hingga 365 hari sejak tanggal pembuatan image kustom. Perhatikan bahwa cluster yang ada yang dibuat dengan image kustom dapat berjalan tanpa batas waktu.

    Anda mungkin perlu menggunakan otomatisasi jika ingin membuat cluster dengan image kustom tertentu selama lebih dari 365 hari. Untuk mengetahui informasi selengkapnya, lihat Cara membuat cluster dengan image kustom yang sudah tidak berlaku.

  • Khusus Linux: Petunjuk dalam dokumen ini hanya berlaku untuk sistem operasi Linux. Sistem operasi lainnya mungkin didukung dalam rilis Dataproc mendatang.

  • Image dasar yang didukung: Build image kustom harus dimulai dari image dasar Dataproc. Image dasar berikut didukung: Debian, Rocky Linux, dan Ubuntu.

    • Ketersediaan image dasar: Image baru yang diumumkan dalam catatan rilis Dataproc tidak tersedia untuk digunakan sebagai dasar image kustom hingga satu minggu sejak tanggal pengumumannya.
  • Menggunakan komponen opsional: Secara default, image kustom mewarisi semua komponen opsional Dataproc (paket dan konfigurasi OS) dari image dasarnya. Anda dapat menyesuaikan versi dan konfigurasi paket OS default, tetapi Anda harus menentukan nama komponen opsional saat membuat cluster.

    Contoh perintah pembuatan cluster:

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

    Jika nama komponen tidak ditentukan saat Anda membuat cluster, komponen opsional, termasuk paket dan konfigurasi OS kustom, akan dihapus.

  • Menggunakan image kustom yang dihosting: Jika Anda menggunakan image kustom yang dihosting di project lain, akun layanan Dataproc Service Agent di project Anda harus memiliki izin compute.images.get pada image di project host. Anda dapat memberikan izin ini dengan memberikan peran roles/compute.imageUser pada image yang dihosting ke akun layanan Agen Layanan Dataproc project Anda (lihat Membagikan image kustom dalam organisasi).

  • Menggunakan secret MOK (Kunci Pemilik Mesin) booting aman: Untuk mengaktifkan booting aman dengan image kustom Dataproc, lakukan tindakan berikut:

    1. Aktifkan Secret Manager API (secretmanager.googleapis.com. Dataproc membuat dan mengelola pasangan kunci menggunakan layanan Secret Manager.

    2. Tambahkan flag --service-account="SERVICE_ACCOUNT" ke perintah generate_custom_image.py saat Anda membuat image kustom. Catatan: Anda harus memberikan peran Secret Manager Viewer (roles/secretmanager.viewer) kepada akun layanan di project dan peran Secret Manager Accessor (roles/secretmanager.secretAccessor) pada secret publik dan pribadi.

      Untuk mengetahui informasi selengkapnya dengan contoh, lihat README.md dan file lainnya dalam direktori examples/secure-boot dari repositori GoogleCloudDataproc/custom-images di GitHub.

      Untuk menonaktifkan booting aman: Secara default, skrip image kustom Dataproc membuat dan mengelola pasangan kunci menggunakan Secret Manager saat dijalankan dari cluster Dataproc. Jika Anda tidak ingin menggunakan secure-boot dengan image kustom, sertakan --trusted-cert="" (nilai flag kosong) ke perintah generate_custom_image.py saat Anda membuat image kustom.

Sebelum memulai

Pastikan untuk menyiapkan project sebelum membuat image kustom.

Menyiapkan project

  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. Instal Python 3.11+
  13. Siapkan skrip penyesuaian yang menginstal paket kustom dan/atau mengupdate konfigurasi, misalnya:
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

Membuat bucket Cloud Storage di project Anda

  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.

Membuat image kustom

Anda menggunakan generate_custom_image.py, program Python, untuk membuat image kustom Dataproc.

Cara kerjanya

Program generate_custom_image.py meluncurkan instance VM Compute Engine sementara dengan image dasar Dataproc yang ditentukan, lalu menjalankan skrip penyesuaian di dalam instance VM untuk menginstal paket kustom dan/atau mengupdate konfigurasi. Setelah selesai, skrip penyesuaian akan menonaktifkan instance VM dan membuat image kustom Dataproc dari disk instance VM. VM sementara akan dihapus setelah image kustom dibuat. Gambar kustom disimpan dan dapat digunakan untuk membuat cluster Dataproc.

Program generate_custom_image.py menggunakan gcloud CLI untuk menjalankan alur kerja multi-langkah di Compute Engine.

Menjalankan kode

Buat fork atau clone file di GitHub di Image kustom Dataproc.

Kemudian, jalankan skrip generate_custom_image.py agar Dataproc membuat dan menyimpan image kustom Anda.

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 yang diperlukan

  • --image-name: nama output untuk image kustom Anda. Catatan: nama gambar harus cocok dengan ekspresi reguler [a-z](?:[-a-z0-9]{0,61}[a-z0-9]) tanpa garis bawah atau spasi, dan kurang dari 64 karakter.
  • --dataproc-version: Versi image Dataproc yang akan digunakan dalam image kustom Anda. Tentukan versi dalam format x.y.z-os atau x.y.z-rc-os, misalnya, "2.0.69-debian10".

  • --customization-script: jalur lokal ke skrip yang akan dijalankan alat untuk menginstal paket kustom atau melakukan penyesuaian lainnya. Skrip ini dijalankan sebagai skrip startup Linux hanya di VM sementara yang digunakan untuk membuat image kustom. Anda dapat menentukan skrip inisialisasi yang berbeda untuk tindakan inisialisasi lain yang ingin dilakukan saat membuat cluster dengan image kustom.

    Image lintas project: Jika image kustom Anda digunakan untuk membuat cluster di project yang berbeda, error dapat terjadi karena cache perintah gcloud atau gsutil yang disimpan dalam image. Anda dapat menghindari masalah ini dengan menyertakan perintah berikut dalam skrip penyesuaian untuk menghapus kredensial yang di-cache.

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

  • --zone: zona Compute Engine tempat generate_custom_image.py akan membuat VM sementara untuk digunakan guna membuat image kustom Anda.

  • --gcs-bucket: URI, dalam format gs://BUCKET_NAME, yang mengarah ke bucket Cloud Storage Anda. generate_custom_image.py menulis file log ke bucket ini.

Flag opsional

  • --family: kelompok image untuk image kustom. Kelompok image digunakan untuk mengelompokkan image yang serupa, dan dapat digunakan saat membuat cluster sebagai pointer ke image terbaru dalam kelompok. Contoh, custom-2-2-debian12.
  • --no-smoke-test: Ini adalah flag opsional yang menonaktifkan pengujian smoke pada image kustom yang baru dibuat. Pengujian smoke membuat cluster pengujian Dataproc dengan image yang baru di-build, menjalankan tugas kecil, lalu menghapus cluster di akhir pengujian. Pengujian smoke berjalan secara default untuk memverifikasi bahwa image kustom yang baru dibuat dapat membuat cluster Dataproc yang berfungsi. Menonaktifkan langkah ini dengan menggunakan flag --no-smoke-test akan mempercepat proses build image kustom, tetapi penggunaannya tidak direkomendasikan.
  • --subnet: Subnet yang akan digunakan untuk membuat VM yang mem-build image Dataproc kustom. Jika project Anda adalah bagian dari VPC bersama, Anda harus menentukan URL subnetwork lengkap dalam format berikut: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Untuk mengetahui daftar flag opsional tambahan, lihat Argumen Opsional di GitHub.

Jika generate_custom_image.py berhasil, imageURI gambar kustom akan ditampilkan di output jendela terminal (imageUri lengkap ditampilkan dalam cetak tebal di bawah):

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

Label versi gambar kustom (Penggunaan lanjutan)

Saat menggunakan alat image kustom standar Dataproc, alat tersebut akan menetapkan label goog-dataproc-version pada image kustom yang dibuat. Label ini mencerminkan kemampuan fitur dan protokol yang digunakan oleh Dataproc untuk mengelola software pada image.

Penggunaan lanjutan: Jika menggunakan proses Anda sendiri untuk membuat image Dataproc kustom, Anda harus menambahkan label goog-dataproc-version secara manual ke image kustom, sebagai berikut:

  1. Ekstrak label goog-dataproc-version dari image Dataproc dasar yang digunakan untuk membuat image kustom.

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

  2. Tetapkan label pada gambar kustom.

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

Menggunakan gambar kustom

Anda menentukan image kustom saat membuat cluster Dataproc. Image kustom disimpan di Image Cloud Compute, dan valid untuk membuat cluster Dataproc selama 365 hari sejak tanggal pembuatannya (lihat Cara membuat cluster dengan image kustom yang sudah tidak berlaku untuk menggunakan image kustom setelah tanggal habis masa berlakunya 365 hari).

URI gambar kustom

Anda meneruskan imageUri image kustom ke operasi pembuatan cluster. URI ini dapat ditentukan dengan salah satu dari tiga cara berikut:

  1. URI lengkap:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
  2. URI Sebagian: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. Nama pendek: CUSTOM_IMAGE_NAME

Image kustom juga dapat ditentukan oleh URI kelompoknya, yang selalu memilih image terbaru dalam kelompok image.

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

Cara menemukan URI gambar kustom

Google Cloud CLI

Jalankan perintah berikut untuk menampilkan nama image kustom Anda.

gcloud compute images list

Teruskan nama gambar kustom Anda ke perintah berikut untuk mencantumkan URI (selfLink) gambar kustom Anda.

gcloud compute images describe custom-image-name

Cuplikan output:

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

Konsol

  1. Buka halaman Compute Engine→Images di konsol Google Cloud, lalu klik nama image. Anda dapat menyisipkan kueri di kolom filter images untuk membatasi jumlah gambar yang ditampilkan.
  2. Halaman Detail gambar akan terbuka. Klik REST yang Setara.
  3. Respons REST mencantumkan informasi tambahan tentang gambar, termasuk selfLink, yang merupakan URI gambar.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
      "sourceDisk": ...,
      ...
    }
    

Membuat cluster dengan image kustom

Buat cluster dengan node master dan pekerja yang menggunakan image kustom menggunakan gcloud CLI, Dataproc API, atau konsol Google Cloud.

gcloud CLI

Buat cluster Dataproc dengan image kustom menggunakan perintah pembuatan cluster dataproc dengan flag --image.

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

REST API

Buat cluster dengan image kustom dengan menentukan URI image kustom di kolom InstanceGroupConfig.imageUri dalam objek masterConfig, workerConfig, dan, jika berlaku, secondaryWorkerConfig yang disertakan dalam permintaan API cluster.create.

Contoh: Permintaan REST untuk membuat cluster Dataproc standar (satu master, dua node pekerja) dengan image kustom.

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"
    }
  }
}
  

Konsol

  1. Buka halaman Create a cluster Dataproc. Panel Siapkan cluster dipilih.
  2. Di bagian Versioning, klik Change. Pilih tab Custom Image, pilih image kustom yang akan digunakan untuk cluster Dataproc, lalu klik Select. VM cluster akan disediakan dengan image kustom yang dipilih.

Mengganti properti cluster Dataproc dengan image kustom

Anda dapat menggunakan image kustom untuk menimpa properti cluster yang ditetapkan selama pembuatan cluster. Jika Anda membuat cluster dengan image kustom, dan operasi pembuatan cluster menetapkan properti dengan nilai yang berbeda dari yang ditetapkan oleh image kustom, nilai properti yang ditetapkan oleh image kustom akan diprioritaskan.

Untuk menetapkan properti cluster dengan gambar kustom Anda:

  1. Dalam skrip penyesuaian gambar kustom, buat file dataproc.custom.properties di /etc/google-dataproc, lalu tetapkan nilai properti cluster dalam file.

    • Contoh file dataproc.custom.properties:
    dataproc.conscrypt.provider.enable=VALUE
    dataproc.logging.stackdriver.enable=VALUE
    
    • Contoh cuplikan pembuatan file skrip penyesuaian untuk mengganti dua properti cluster:
    cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
    dataproc.conscrypt.provider.enable=true
    dataproc.logging.stackdriver.enable=false
    EOF
    

Cara membuat cluster dengan image kustom yang sudah tidak berlaku

Secara default, masa berlaku image kustom adalah 365 hari sejak tanggal pembuatan image. Anda dapat membuat cluster yang menggunakan image kustom yang sudah tidak berlaku dengan menyelesaikan langkah-langkah berikut.

  1. Mencoba membuat cluster Dataproc dengan image kustom yang sudah tidak berlaku atau image kustom yang akan berakhir masa berlakunya dalam 10 hari.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --region=REGION \
        ... other flags ...
    
  2. gcloud CLI akan mengeluarkan pesan error yang menyertakan nama properti dataproc:dataproc.custom.image.expiration.token cluster dan nilai token.

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

Salin string TOKEN_VALUE ke papan klip.

  1. Gunakan gcloud CLI untuk membuat cluster Dataproc lagi, dengan menambahkan TOKEN_VALUE yang disalin sebagai properti cluster.

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

Pembuatan cluster dengan image kustom akan berhasil.