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:
- Penyedia mendeteksi kode keluar
3010, menjeda eksekusi, dan menandai indeks progres langkah. - Penyedia akan memulai ulang VM pekerja.
- 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 propertinewArguments, Image Builder akan menghapus parameter yang dikonfigurasi di propertioldArgumentssepenuhnya 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:
- Menentukan jalur perangkat booting aktif.
- Memasang partisi 12, partisi EFI, dari perangkat booting.
- Memperbarui parameter bootloader secara langsung di dalam
/efi/boot/grub.cfg. - Melepas partisi 12 dengan aman.
Ubuntu
Pada image Ubuntu, penyedia penyesuaian melakukan hal berikut:
- Membuka
/etc/default/grubdan file di/etc/default/grub.d/*.cfg. - Menyisipkan, mengubah, atau menghapus argumen target di bawah blok
GRUB_CMDLINE_LINUX. - Menjalankan perintah paket
update-grubuntuk 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 formatgs://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:
- Tentukan file hanya di dalam lokasi stateful yang dapat ditulis, seperti
/varatau/home. - Lihat Referensi Sistem file dan disk Container-Optimized OS resmi untuk mengidentifikasi jalur yang sesuai.
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 menentukanversion, 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 formatgs://BUCKET_NAME/OBJECT_NAME.run.sourceRunfile(string): Jalur relatif ke file.runpenginstal 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 gpuuntuk mengaktifkannya.Untuk melihat daftar versi driver pra-kompilasi yang didukung untuk rilis COS Anda, jalankan
sudo cos-extensions listpada 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-imagespublik tempat driver NVIDIA telah diinstal sebelumnya.Untuk mencantumkan image akselerator yang tersedia, jalankan perintah berikut di
gcloudCLI: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.rundi 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
.runAnda di dalam container build dan menginstal paket yang dihasilkan ke/var/lib/nvidiadi VM pekerja. - Image x86-64: Melakukan kompilasi dalam tamu langsung di VM pekerja.
- Image ARM64: Karena VM COS ARM64 tidak mendukung kompilasi header dalam tamu, Image Builder secara otomatis melakukan kompilasi silang utilitas driver kustom
Langkah berikutnya
- Tinjau blok skema tingkat teratas dalam Skema file penyesuaian gambar.
- Konfigurasi parameter orkestrasi pipeline dalam skema file konfigurasi Cloud Build.
- Ikuti tutorial untuk Membuat pipeline Image Builder.