Tindakan penyesuaian yang didukung

Untuk menyesuaikan image virtual machine, seperti menjalankan skrip terminal, memperbarui parameter booting, mentransfer biner, atau menginstal driver GPU, Anda dapat menentukan tindakan helper tertentu di dalam blok spec.steps resep penyesuaian (imagebuilder.yaml).

Ringkasan

Selama fase eksekusi build Image Builder, orchestrator menjalankan langkah-langkah yang dideklarasikan dalam resep penyesuaian Anda (spec.steps) secara berurutan di worker VM sementara.

Setiap langkah harus menentukan blok name, action, dan inputs yang disesuaikan dengan jenis tindakan tersebut. Image Builder mendukung tindakan penyesuaian berikut:

  • Shell: Menjalankan skrip atau perintah terminal inline di OS tamu pekerja.
  • UpdateKernelCommandLine: Mengubah parameter boot dan tanda command line kernel.
  • FileCopy: Mentransfer file konfigurasi, skrip, atau aset dari Cloud Storage atau ruang kerja lokal ke VM.
  • InstallGPU: Mendownload, mengompilasi, dan mendaftarkan driver GPU NVIDIA.

Tindakan shell

Tindakan Shell memungkinkan Anda menjalankan skrip terminal inline atau perintah shell tunggal di OS tamu worker VM sementara untuk melakukan penyesuaian seperti mengupdate paket, mengonfigurasi akun pengguna, atau mengompilasi software.

Tentukan salah satu input berikut di bagian steps.inputs:

  • inlineScript (string): Perintah shell multiline mentah yang akan dijalankan.
  • command (string): String perintah sistem tunggal atau jalur relatif ke file biner yang dapat dieksekusi.

Contoh konfigurasi

Tab berikut menunjukkan contoh konfigurasi langkah untuk menjalankan skrip inline versus menjalankan satu perintah:

Menjalankan skrip inline

Konfigurasi berikut menjalankan skrip multiline yang mengupdate paket menggunakan apt:

- name: "Update guest packages and configure groups"
  action: Shell
  inputs:
    inlineScript: |
      #!/bin/bash
      apt-get update -y
      apt-get install -y fail2ban build-essential
      groupadd -r adminusers

Menjalankan satu perintah

Konfigurasi berikut menjalankan satu perintah shell untuk memverifikasi versi kernel sistem operasi aktif:

- name: "Log kernel identifier"
  action: Shell
  inputs:
    command: "uname -a"

Perilaku khusus

Saat Anda menjalankan tindakan Shell, penyedia penyesuaian mengelola audit keamanan dan reboot sistem otomatis seperti yang dijelaskan di bagian berikut:

Audit keamanan

Untuk mencegah token sensitif, rahasia, atau kode berpemilik bocor ke dalam log eksekusi, penyedia penyesuaian tidak mencetak baris mentah dari skrip Anda kecuali jika pen-debug-an interaktif diaktifkan (debug: true). Sebagai gantinya, penyedia ini mencatat hash integritas SHA-256 dari payload skrip Anda ke log build. Hash ini memberikan jejak audit yang tidak dapat diubah dari kode yang dijalankan pada image.

Sistem dimulai ulang (Kode Keluar 3010)

Beberapa tindakan shell, seperti update patch kernel atau penyesuaian partisi penyimpanan, memerlukan reboot sistem sebelum langkah berikutnya dapat dijalankan.

Untuk meminta mulai ulang sistem selama penyesuaian, skrip shell Anda harus diakhiri dengan perintah exit 3010. Saat penyedia penyesuaian menerima kode keluar 3010, penyedia akan menangani siklus proses mulai ulang sebagai berikut:

  1. Penyedia mendeteksi kode keluar 3010, menjeda eksekusi, dan menandai indeks progres langkah.
  2. Penyedia akan memulai ulang VM pekerja.
  3. Setelah VM dimulai ulang, penyedia akan memasang ruang kerja dan otomatis melanjutkan pipeline pada langkah berikutnya dalam antrean.
Contoh mulai ulang:

Contoh berikut menunjukkan konfigurasi langkah yang mengupdate paket dan meminta reboot:

- name: "Install core updates and request reboot"
  action: Shell
  inputs:
    inlineScript: |
      #!/bin/bash
      echo "Applying configuration package upgrades..."
      apt-get dist-upgrade -y
      # Terminate with return code 3010 to trigger a system reboot
      exit 3010
- name: "Post-reboot verification"
  action: Shell
  inputs:
    command: "uname -r"

Tindakan UpdateKernelCommandLine

Tindakan UpdateKernelCommandLine menemukan, mengganti, menyisipkan, atau menghapus tanda command line yang diteruskan ke kernel saat booting sistem, seperti saat Anda mengonfigurasi log konsol atau menyesuaikan parameter kernel.

Tentukan properti berikut di peta steps.inputs:

  • oldArguments (string, Wajib): Argumen command line persis yang akan dicari, dihapus, atau diganti di dalam konfigurasi bootloader.
  • newArguments (string, Opsional): Argumen pengganti yang akan ditulis di tempat flag target. Jika Anda menghilangkan properti newArguments, Image Builder akan menghapus parameter yang dikonfigurasi di properti oldArguments sepenuhnya dari baris booting.

Contoh konfigurasi

Tab berikut menunjukkan contoh konfigurasi langkah untuk mengganti atau menghapus argumen booting kernel:

Mengganti argumen booting

Konfigurasi berikut menemukan kunci tingkat log kernel loglevel=4 dan menggantinya dengan parameter yang lebih verbose loglevel=6 console=ttyS0:

- name: "Configure detailed boot logging"
  action: UpdateKernelCommandLine
  inputs:
    oldArguments: "loglevel=4"
    newArguments: "loglevel=6 console=ttyS0"

Menghapus argumen booting

Konfigurasi berikut menelusuri parameter quiet dan menghapusnya dari argumen booting untuk mengaktifkan logging verbose selama fase pemeriksaan startup:

- name: "Enable verbose startup diagnostics"
  action: UpdateKernelCommandLine
  inputs:
    oldArguments: "quiet"

Detail eksekusi khusus OS

Tab berikut menjelaskan cara penyedia penyesuaian menangani modifikasi gambar, bergantung pada sistem operasi tamu sumber:

Container-Optimized OS (COS)

Karena memiliki tata letak partisi hanya baca, COS tidak menyertakan alat konfigurasi standar. Penyedia penyesuaian melakukan hal berikut:

  1. Menentukan jalur perangkat booting aktif.
  2. Memasang partisi 12, partisi EFI, dari perangkat booting.
  3. Memperbarui parameter bootloader secara langsung di dalam /efi/boot/grub.cfg.
  4. Melepas partisi 12 dengan aman.

Ubuntu

Pada image Ubuntu, penyedia penyesuaian melakukan hal berikut:

  1. Membuka /etc/default/grub dan file di /etc/default/grub.d/*.cfg.
  2. Menyisipkan, mengubah, atau menghapus argumen target di bawah blok GRUB_CMDLINE_LINUX.
  3. Menjalankan perintah paket update-grub untuk membuat ulang konfigurasi bootloader.

Tindakan FileCopy

Tindakan FileCopy menyalin file konfigurasi, biner, atau sertifikat dari bucket jarak jauh atau repositori lokal Anda ke image kustom Anda. Penyedia kustomisasi mendownload atau membaca file sumber, menulisnya ke jalur tamu yang Anda tentukan di worker VM, dan mengonfigurasi izin.

Tentukan input berikut di bagian steps.inputs:

  • destination (string, Wajib): Jalur absolut di OS tamu tempat file dibuat.
  • permissions (string, Wajib): Representasi oktal izin konfigurasi target, seperti "0755" atau "0644".
  • Tentukan salah satu properti sumber berikut:
    • gcsSourcePath (string): Cloud Storage URI file sumber, yang harus mengikuti format gs://BUCKET_NAME/OBJECT_NAME.
    • localSourcePath (string): Jalur relatif ke file di dalam folder repositori ruang kerja lokal. Path traversal menggunakan ../ diblokir demi keamanan.

Contoh konfigurasi

Tab berikut menunjukkan contoh konfigurasi langkah untuk menyalin file dari Cloud Storage versus menyalin dari ruang kerja lokal Anda:

Cloud Storage

Konfigurasi berikut menyalin template konfigurasi dari bucket Cloud Storage ke image VM tamu:

- name: "Import licensing configuration"
  action: FileCopy
  inputs:
    gcsSourcePath: "gs://enterprise-configs-bucket/licensing/license.key"
    destination: "/etc/app/license.key"
    permissions: "0600"

Ruang kerja lokal

Konfigurasi berikut menyalin skrip aplikasi yang dikompilasi selama langkah-langkah Cloud Build sebelumnya:

- name: "Deploy setup automation daemon"
  action: FileCopy
  inputs:
    localSourcePath: "bin/setup-daemon"
    destination: "/usr/local/bin/setup-daemon"
    permissions: "0755"

Pedoman khusus OS

Tab berikut menjelaskan panduan lokasi file, bergantung pada sistem operasi tamu target:

Container-Optimized OS (COS)

Image COS berisi tata letak partisi hanya baca untuk tujuan keamanan. Beberapa target sistem standar, seperti /usr/ atau /bin/, dilindungi dari penulisan.

Saat mengonfigurasi tujuan file di COS:

Ubuntu

Image Ubuntu memiliki tata letak partisi root baca-tulis Linux standar (/). Anda dapat menentukan tujuan file di dalam jalur sistem standar apa pun, seperti /etc, /usr/local/bin, /var, atau /home, asalkan profil pengguna atau folder tujuan memiliki izin konfigurasi yang sesuai di worker VM.

Tindakan InstallGPU

Gunakan tindakan InstallGPU untuk membuat image VM yang dioptimalkan untuk machine learning, sains data, atau beban kerja ilmiah. Image Builder mendownload, mengompilasi, dan mendaftarkan driver GPU NVIDIA pada image kustom Anda. Bergantung pada jenis gambar dasar dan hardware target, Anda dapat memilih antara menginstal driver yang telah dikompilasi sebelumnya atau mengompilasi file driver .run kustom.

Tentukan salah satu input berikut di bagian steps.inputs:

  • version (string): Nomor versi driver NVIDIA target, seperti "595.129.03". Jika Anda hanya menentukan version, orkestrator akan mendownload driver dari repositori NVIDIA resmi (https://us.download.nvidia.com/tesla/<version>).
  • gcsRunfile (string): Jalur Cloud Storage file penginstal driver NVIDIA kustom, yang harus menggunakan format gs://BUCKET_NAME/OBJECT_NAME.run.
  • sourceRunfile (string): Jalur relatif ke file .run penginstal di dalam folder repositori ruang kerja lokal.

Contoh konfigurasi

Tab berikut menunjukkan contoh konfigurasi langkah untuk menginstal versi driver pra-paket tertentu versus menginstal runfile kustom:

Download versi standar

Konfigurasi berikut mendownload dan menginstal versi driver NVIDIA tertentu dari repositori resmi:

- name: "Configure default NVIDIA drivers"
  action: InstallGPU
  inputs:
    version: "<var>DRIVER_VERSION</var>"

File run Cloud Storage

Konfigurasi berikut men-deploy penginstal driver NVIDIA .run kustom langsung dari bucket Cloud Storage:

- name: "Deploy custom GPU driver from Cloud Storage"
  action: InstallGPU
  inputs:
    gcsRunfile: "gs://<var>BUCKET_NAME</var>/drivers/NVIDIA-Linux-aarch64-<var>DRIVER_VERSION</var>.run"

File run workspace lokal

Konfigurasi berikut men-deploy penginstal driver NVIDIA .run kustom dari ruang kerja repositori lokal Anda:

- name: "Deploy custom GPU driver from workspace"
  action: InstallGPU
  inputs:
    sourceRunfile: "drivers/NVIDIA-Linux-x86_64-<var>DRIVER_VERSION</var>.run"

Metode konfigurasi

Tab berikut menjelaskan metode yang didukung untuk mengonfigurasi driver GPU NVIDIA pada image kustom Anda:

Driver yang telah dikompilasi

Sebaiknya gunakan versi driver yang telah dipaketkan untuk menghindari overhead komputasi dan waktu build saat mengompilasi driver dari awal.

  • Container-Optimized OS (COS): Jika Anda menentukan versi driver yang telah dikemas sebelumnya oleh Google, penyedia penyesuaian akan menjalankan alat tamu cos-extensions install gpu untuk mengaktifkannya.

    Untuk melihat daftar versi driver pra-kompilasi yang didukung untuk rilis COS Anda, jalankan sudo cos-extensions list pada instance COS yang sedang berjalan, atau lihat Mengidentifikasi versi driver GPU.

  • Ubuntu: Untuk menghemat waktu build di Ubuntu, sebaiknya pilih image dasar yang telah dikonfigurasi sebelumnya dari project ubuntu-os-accelerator-images publik tempat driver NVIDIA telah diinstal sebelumnya.

    Untuk mencantumkan image akselerator yang tersedia, jalankan perintah berikut di gcloud CLI:

    gcloud compute images list \
        --project=ubuntu-os-accelerator-images \
        --no-standard-images
    

File yang dapat dijalankan kustom

Jika Anda harus menginstal versi driver kustom yang tidak dikompilasi sebelumnya oleh Google atau Canonical, Anda dapat menentukan file yang dijalankan penginstal langsung untuk kompilasi sebagai berikut:

  • Ubuntu: Melakukan kompilasi dalam tamu. Penyedia penyesuaian akan otomatis menginstal header kernel yang cocok (linux-headers-$(uname -r)), mengompilasi file driver NVIDIA .run di VM pekerja, dan mendaftarkannya dengan Dukungan Modul Kernel Dinamis (DKMS). Mendaftarkan diri dengan DKMS memastikan driver tetap aktif di seluruh update kernel kecil.
  • Container-Optimized OS (COS): Perilaku kompilasi bervariasi bergantung pada arsitektur CPU image VM dasar sumber Anda:
    • Image ARM64: Karena VM COS ARM64 tidak mendukung kompilasi header dalam tamu, Image Builder secara otomatis melakukan kompilasi silang utilitas driver kustom .run Anda di dalam container build dan menginstal paket yang dihasilkan ke /var/lib/nvidia di VM pekerja.
    • Image x86-64: Melakukan kompilasi dalam tamu langsung di VM pekerja.

Langkah berikutnya