Halaman ini menjelaskan cara membuat dan mengelola Spot VM, termasuk hal berikut:
- Cara membuat, memulai, dan mengidentifikasi Spot VM
- Cara mendeteksi, menangani, dan menguji preemption Spot VM
- Praktik terbaik untuk Spot VM
Spot VM adalah instance virtual machine (VM) dengan model penyediaan spot. Spot VM tersedia dengan diskon hingga 91% dari harga default VM standar. Namun, Compute Engine dapat mengklaim kembali resource dengan melakukan preemption terhadap Spot VM kapan saja. Spot VM hanya direkomendasikan untuk workload fault-tolerant yang dapat menangani preemption VM. Pastikan beban kerja Anda dapat mengelola preemption sebelum Anda memutuskan untuk membuat Spot VM.
Jika Anda ingin membuat dan mengelola Spot VM dengan TPU, lihat dokumentasi Cloud TPU untuk Spot VM.
Sebelum memulai
- Baca dokumentasi konseptual untuk Spot VM:
- Tinjau batasan dan harga Spot VM.
- Agar Spot VM tidak menggunakan kuota Anda untuk CPU, GPU, dan disk VM standar, pertimbangkan untuk meminta kuota yang dapat dihentikan untuk Spot VM.
-
Siapkan autentikasi jika Anda belum melakukannya.
Autentikasi memverifikasi identitas Anda untuk mengakses layanan Cloud de Confiance by S3NS dan API. Untuk menjalankan
kode atau sampel dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke
Compute Engine dengan memilih salah satu opsi berikut:
Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:
Konsol
Saat menggunakan konsol Cloud de Confiance untuk mengakses layanan Cloud de Confiance by S3NS dan API, Anda tidak perlu menyiapkan autentikasi.
gcloud
-
Instal Google Cloud CLI, lalu login ke gcloud CLI dengan identitas gabungan Anda. Setelah login, inisialisasi Google Cloud CLI dengan menjalankan perintah berikut:
gcloud init
-
- Tetapkan region dan zona default.
-
Instal Google Cloud CLI.
-
Konfigurasi gcloud CLI agar menggunakan identitas gabungan Anda.
Untuk mengetahui informasi selengkapnya, lihat Login ke gcloud CLI dengan identitas gabungan Anda.
-
Buat kredensial autentikasi lokal untuk akun pengguna Anda:
gcloud auth application-default login
Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.
Terraform
Untuk menggunakan contoh Terraform di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.
Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
REST
Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.
Instal Google Cloud CLI, lalu login ke gcloud CLI dengan identitas gabungan Anda.
Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Cloud de Confiance .
Membuat Spot VM
Spot VM adalah VM yang dikonfigurasi untuk menggunakan model penyediaan spot:
- Model penyediaan VM disetel ke Spot di konsol Cloud de Confiance
--provisioning-model=SPOTdi gcloud CLI"provisioningModel": "SPOT"di Compute Engine API
Untuk mempelajari cara membuat Spot VM, pilih salah satu metode berikut berdasarkan cara Anda ingin menangani preemption:
- Membuat Spot VM dengan waktu 120 detik untuk menangani preemption (Pratinjau)
- Membuat Spot VM dengan waktu hingga 30 detik untuk menangani preemption (default)
Atau, untuk membuat beberapa Spot VM dengan properti yang sama, Anda dapat membuat template instance, dan menggunakan template tersebut untuk membuat grup instance terkelola (MIG). Untuk mengetahui informasi selengkapnya, baca praktik terbaik.
Membuat Spot VM dengan waktu 120 detik untuk menangani preemption
Sebelum membuat Spot VM dengan pemberitahuan preemption 120 detik, pastikan Anda menangani preemption dalam workload Anda.
gcloud
Untuk membuat Spot VM dengan durasi pemberitahuan pelepasan 120 detik dari gcloud CLI, gunakan
perintah gcloud beta compute instances create
dan sertakan flag --preemption-notice-duration=120s. Untuk membuat
Spot VM, Anda harus menyertakan flag --provisioning-model=SPOT.
Secara opsional, Anda dapat menentukan tindakan penghentian untuk
Spot VM dengan menyertakan juga flag --instance-termination-action.
gcloud beta compute instances create VM_NAME \
--provisioning-model=SPOT \
--preemption-notice-duration=120s \
--instance-termination-action=TERMINATION_ACTION
Ganti kode berikut:
VM_NAME: nama VM baru.TERMINATION_ACTION: Opsional: tentukan tindakan penghentian yang akan dilakukan saat Compute Engine melakukan preempt terhadap VM, baikSTOP(perilaku default) atauDELETE.
Untuk mengetahui informasi selengkapnya tentang opsi yang dapat Anda tentukan saat membuat VM, lihat Opsi konfigurasi selama pembuatan instance. Misalnya, untuk membuat Spot VM dengan jenis mesin dan image tertentu, gunakan perintah berikut:
gcloud beta compute instances create VM_NAME \
--provisioning-model=SPOT \
--preemption-notice-duration=120s \
[--image=IMAGE | --image-family=IMAGE_FAMILY] \
--image-project=IMAGE_PROJECT \
--machine-type=MACHINE_TYPE \
--instance-termination-action=TERMINATION_ACTION
Ganti kode berikut:
VM_NAME: nama VM baru.IMAGE: menentukan salah satu dari hal berikut:IMAGE: versi tertentu dari image publik atau kelompok image. Misalnya, image tertentu adalah--image=debian-10-buster-v20200309.- Kelompok image.
Ini akan membuat VM dari OS image terbaru yang masih digunakan.
Misalnya, jika Anda menentukan
--image-family=debian-10, Compute Engine akan membuat VM dari OS image versi terbaru dalam kelompok image Debian 10.
IMAGE_PROJECT: project yang berisi image. Misalnya, jika Anda menentukandebian-10sebagai kelompok image, tentukandebian-cloudsebagai project image.MACHINE_TYPE: jenis mesin bawaan atau kustom untuk VM baru.Untuk mendapatkan daftar jenis mesin yang tersedia di zona, gunakan perintah
gcloud compute machine-types listdengan flag--zones.TERMINATION_ACTION: Opsional: tentukan tindakan penghentian yang akan dilakukan saat Compute Engine melakukan preempt terhadap VM, baikSTOP(perilaku default) atauDELETE.
REST
Untuk membuat Spot VM dengan durasi pemberitahuan penghentian sementara 120 detik dari Compute Engine API, gunakan metode instances.insert beta dan sertakan kolom "preemptionNoticeDuration": { "seconds": 120 }.
Anda harus menentukan jenis dan nama mesin untuk VM. Anda juga dapat
menentukan image untuk boot disk.
Untuk membuat Spot VM, Anda harus menyertakan kolom "provisioningModel": spot.
Anda juga dapat menentukan tindakan penghentian untuk Spot VM dengan
menyertakan juga kolom "instanceTerminationAction".
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances { "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "scheduling": { "provisioningModel": "SPOT", "preemptionNoticeDuration": { "seconds": 120 }, "instanceTerminationAction": "TERMINATION_ACTION" } }
Ganti kode berikut:
PROJECT_ID: Project ID dari project tempat VM dibuat.ZONE: zona tempat VM dibuat. Zona tersebut juga harus mendukung jenis mesin yang akan digunakan untuk VM baru.MACHINE_TYPE: jenis mesin bawaan atau kustom untuk VM baru.VM_NAME: nama VM baru.IMAGE_PROJECT: project yang berisi image. Misalnya, jika Anda menentukanfamily/debian-10sebagai kelompok image, tentukandebian-cloudsebagai project image.IMAGE: menentukan salah satu dari hal berikut:- Versi tertentu dari image publik. Misalnya, image tertentu adalah
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"dengandebian-cloudberupaIMAGE_PROJECT. - Kelompok image.
Ini akan membuat VM dari OS image terbaru yang masih digunakan.
Misalnya, jika Anda menentukan
"sourceImage": "projects/debian-cloud/global/images/family/debian-10"dengandebian-cloudberupaIMAGE_PROJECT, Compute Engine akan membuat VM dari versi terbaru OS image di kelompok image Debian 10.
- Versi tertentu dari image publik. Misalnya, image tertentu adalah
TERMINATION_ACTION: Opsional: tentukan tindakan penghentian yang akan dilakukan saat Compute Engine melakukan preempt terhadap VM, baikSTOP(perilaku default) atauDELETE.
Untuk mengetahui informasi selengkapnya tentang opsi yang dapat Anda tentukan saat membuat VM, lihat Opsi konfigurasi selama pembuatan instance.
Membuat Spot VM dengan waktu hingga 30 detik untuk menangani preemption (default)
Secara default, Spot VM diberi tahu tentang preemption di awal periode penonaktifan upaya terbaik 30 detik, dan Anda harus menangani preemption dalam skrip penonaktifan.
Konsol
Di konsol Cloud de Confiance , buka halaman Create an instance.
Di panel Machine configuration, yang terbuka secara default, selesaikan langkah-langkah berikut:
- Di bagian Model penyediaan, pilih Spot dari daftar Model penyediaan VM.
Opsional: Untuk memilih tindakan penghentian yang terjadi saat Compute Engine melakukan preempt terhadap VM, selesaikan langkah-langkah berikut:
- Luaskan bagian Setelan lanjutan model penyediaan VM.
- Dalam daftar Pada penghentian VM, pilih salah satu opsi berikut:
- Untuk menghentikan VM selama preemption, pilih Hentikan (default).
- Untuk menghapus VM selama preemption, pilih Hapus.
Di menu navigasi, klik Lanjutan. Di panel Advanced yang muncul, selesaikan langkah-langkah berikut:
- Di bagian Metadata, klik Tambahkan item.
- Di kolom Key, masukkan
shutdown-scriptuntuk kunci metadata. - Di kolom Value, tambahkan konten skrip shutdown yang menangani preempti. Untuk contoh skrip shutdown, lihat Menangani penghentian sementara dalam dokumen ini.
Opsional: Tentukan opsi konfigurasi lainnya. Untuk mengetahui informasi selengkapnya, lihat Opsi konfigurasi selama pembuatan instance.
Untuk membuat dan memulai VM, klik Create.
gcloud
Untuk membuat VM dari gcloud CLI, gunakan
perintah gcloud compute instances create.
Untuk membuat Spot VM, Anda harus menyertakan
flag --provisioning-model=SPOT. Untuk menangani preemption, sertakan flag
--metadata shutdown-script untuk menentukan skrip penonaktifan. Secara opsional,
Anda dapat menentukan tindakan penghentian untuk Spot VM dengan
menyertakan juga tanda --instance-termination-action.
gcloud compute instances create VM_NAME \
--provisioning-model=SPOT \
--metadata shutdown-script=SHUTDOWN_SCRIPT \
--instance-termination-action=TERMINATION_ACTION
Ganti kode berikut:
VM_NAME: nama VM baru.SHUTDOWN_SCRIPT: skrip shutdown, yang dapat Anda format seperti yang ditunjukkan di Menjalankan skrip shutdown. Untuk contoh skrip shutdown, lihat Menangani penghentian sementara dalam dokumen ini.TERMINATION_ACTION: Opsional: tentukan tindakan penghentian yang akan dilakukan saat Compute Engine melakukan preempt terhadap VM, baikSTOP(perilaku default) atauDELETE.
Untuk mengetahui informasi selengkapnya tentang opsi yang dapat Anda tentukan saat membuat VM, lihat Opsi konfigurasi selama pembuatan instance. Misalnya, untuk membuat Spot VM dengan jenis mesin dan image tertentu, gunakan perintah berikut:
gcloud compute instances create VM_NAME \
--provisioning-model=SPOT \
--metadata shutdown-script=SHUTDOWN_SCRIPT \
[--image=IMAGE | --image-family=IMAGE_FAMILY] \
--image-project=IMAGE_PROJECT \
--machine-type=MACHINE_TYPE \
--instance-termination-action=TERMINATION_ACTION \
Ganti kode berikut:
VM_NAME: nama VM baru.SHUTDOWN_SCRIPT: skrip shutdown yang menangani penghentian sementara. Untuk mengetahui informasi selengkapnya tentang cara memformat dan menentukan skrip shutdown, lihat Menjalankan skrip shutdown. Untuk contoh skrip shutdown, lihat Menangani penghentian sementara dalam dokumen ini.IMAGE: menentukan salah satu dari hal berikut:IMAGE: versi tertentu dari image publik atau kelompok image. Misalnya, image tertentu adalah--image=debian-10-buster-v20200309.- Kelompok image.
Ini akan membuat VM dari OS image terbaru yang masih digunakan.
Misalnya, jika Anda menentukan
--image-family=debian-10, Compute Engine akan membuat VM dari OS image versi terbaru dalam kelompok image Debian 10.
IMAGE_PROJECT: project yang berisi image. Misalnya, jika Anda menentukandebian-10sebagai kelompok image, tentukandebian-cloudsebagai project image.MACHINE_TYPE: jenis mesin bawaan atau kustom untuk VM baru.Untuk mendapatkan daftar jenis mesin yang tersedia di zona, gunakan perintah
gcloud compute machine-types listdengan flag--zones.TERMINATION_ACTION: Opsional: tentukan tindakan penghentian yang akan dilakukan saat Compute Engine melakukan preempt terhadap VM, baikSTOP(perilaku default) atauDELETE.
Terraform
Anda dapat menggunakan resource Terraform untuk membuat VM Spot menggunakan blok scheduling seperti yang ditunjukkan dalam contoh berikut.
Untuk menambahkan skrip shutdown guna menangani penghentian sementara, tambahkan juga blok metadata
seperti yang ditunjukkan di
Menjalankan skrip shutdown.
Untuk contoh skrip shutdown, lihat
Menangani penghentian sementara dalam dokumen ini.
REST
Untuk membuat VM dari Compute Engine API, gunakan
metode instances.insert.
Anda harus menentukan jenis dan nama mesin untuk VM. Anda juga dapat
menentukan image untuk boot disk.
Untuk membuat Spot VM, Anda harus menyertakan kolom "provisioningModel": spot.
Untuk menangani preemption, sertakan juga kolom "metadata" dan tentukan skrip shutdown.
Anda juga dapat menentukan tindakan penghentian untuk Spot VM dengan
menyertakan juga kolom "instanceTerminationAction".
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "scheduling": { "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION" }, "metadata": { "items": [ { "key": "shutdown-script", "value": "SHUTDOWN_SCRIPT" } ] } }
Ganti kode berikut:
PROJECT_ID: Project ID dari project tempat VM dibuat.ZONE: zona tempat VM dibuat. Zona tersebut juga harus mendukung jenis mesin yang akan digunakan untuk VM baru.MACHINE_TYPE: jenis mesin bawaan atau kustom untuk VM baru.VM_NAME: nama VM baru.IMAGE_PROJECT: project yang berisi image. Misalnya, jika Anda menentukanfamily/debian-10sebagai kelompok image, tentukandebian-cloudsebagai project image.IMAGE: menentukan salah satu dari hal berikut:- Versi tertentu dari image publik. Misalnya, image tertentu adalah
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"dengandebian-cloudberupaIMAGE_PROJECT. - Kelompok image.
Ini akan membuat VM dari OS image terbaru yang masih digunakan.
Misalnya, jika Anda menentukan
"sourceImage": "projects/debian-cloud/global/images/family/debian-10"dengandebian-cloudberupaIMAGE_PROJECT, Compute Engine akan membuat VM dari versi terbaru OS image di kelompok image Debian 10.
- Versi tertentu dari image publik. Misalnya, image tertentu adalah
TERMINATION_ACTION: Opsional: tentukan tindakan penghentian yang akan dilakukan saat Compute Engine melakukan preempt terhadap VM, baikSTOP(perilaku default) atauDELETE.SHUTDOWN_SCRIPT: skrip shutdown yang menangani penghentian sementara. Untuk mengetahui informasi selengkapnya tentang cara memformat dan menentukan skrip shutdown, lihat Menjalankan skrip shutdown. Untuk contoh skrip shutdown, lihat Menangani penghentian sementara dalam dokumen ini.
Untuk mengetahui informasi selengkapnya tentang opsi yang dapat Anda tentukan saat membuat VM, lihat Opsi konfigurasi selama pembuatan instance.
Go
Contoh berikut membuat Spot VM tanpa skrip penonaktifan untuk menangani preemption. Untuk mengetahui informasi selengkapnya tentang cara menentukan skrip shutdown untuk VM baru atau yang sudah ada, lihat Menjalankan skrip shutdown. Untuk contoh skrip penonaktifan, lihat Menangani penghentian sementara dalam dokumen ini.
Java
Contoh berikut membuat Spot VM tanpa skrip penonaktifan untuk menangani preemption. Untuk mengetahui informasi selengkapnya tentang cara menentukan skrip shutdown untuk VM baru atau yang sudah ada, lihat Menjalankan skrip shutdown. Untuk contoh skrip penonaktifan, lihat Menangani penghentian sementara dalam dokumen ini.
Python
Contoh berikut membuat Spot VM tanpa skrip penonaktifan untuk menangani preemption. Untuk mengetahui informasi selengkapnya tentang cara menentukan skrip shutdown untuk VM baru atau yang sudah ada, lihat Menjalankan skrip shutdown. Untuk contoh skrip penonaktifan, lihat Menangani penghentian sementara dalam dokumen ini.
Memulai Spot VM
Seperti VM lainnya, Spot VM dimulai saat pembuatan. Demikian pula, jika
Spot VM dihentikan, Anda dapat
memulai ulang VM
untuk melanjutkan status RUNNING.
Anda dapat menghentikan dan memulai ulang Spot VM yang di-preempt
sebanyak yang Anda inginkan, selama masih ada kapasitas.
Untuk mengetahui informasi selengkapnya, baca
Siklus proses instance VM.
Jika Compute Engine menghentikan satu atau beberapa Spot VM di cluster grup instance terkelola (MIG) atau Google Kubernetes Engine (GKE) penskalaan otomatis, grup akan memulai ulang VM saat resource tersedia kembali.
Mengidentifikasi model penyediaan dan tindakan penghentian VM
Identifikasi model penyediaan VM untuk melihat apakah VM tersebut adalah VM standar, Spot VM, atau preemptible VM. Untuk Spot VM, Anda juga dapat mengidentifikasi tindakan penghentian. Anda dapat mengidentifikasi model penyediaan dan tindakan penghentian VM menggunakan Cloud de Confiance konsol, gcloud CLI, atau Compute Engine API.
Konsol
Buka halaman VM instances.
Klik Nama VM yang ingin Anda identifikasi. Halaman Detail instance VM akan terbuka.
Buka bagian Pengelolaan di bagian bawah halaman. Di subbagian Kebijakan ketersediaan, periksa opsi berikut:
- Jika model penyediaan VM disetel ke Spot, VM tersebut adalah
Spot VM.
- Saat penghentian VM menunjukkan tindakan yang harus dilakukan saat Compute Engine melakukan preempt terhadap VM, baik Menghentikan atau Menghapus VM.
- Atau, jika model penyediaan VM disetel ke Standar
atau —:
- Jika opsi Kemungkinan untuk dihentikan disetel ke Aktif, VM tersebut adalah preemptible VM.
- Jika tidak, VM tersebut adalah VM standar.
- Jika model penyediaan VM disetel ke Spot, VM tersebut adalah
Spot VM.
gcloud
Untuk mendeskripsikan VM dari gcloud CLI, gunakan
perintah gcloud compute instances describe:
gcloud compute instances describe VM_NAME
dengan VM_NAME adalah
nama VM
yang ingin Anda periksa.
Pada output, periksa kolom scheduling untuk mengidentifikasi VM:
Jika outputnya menyertakan kolom
provisioningModelyang ditetapkan keSPOT, seperti yang berikut ini, VM tersebut adalah Spot VM.... scheduling: ... provisioningModel: SPOT instanceTerminationAction: TERMINATION_ACTION ...
dengan
TERMINATION_ACTIONmenunjukkan tindakan yang harus dilakukan saat Compute Engine melakukan preempt terhadap VM, baik menghentikan (STOP) atau menghapus (DELETE) VM. Jika kolominstanceTerminationActiontidak ada, nilai defaultnya adalahSTOP.Jika tidak, jika output menyertakan kolom
provisioningModelyang ditetapkan kestandardatau jika output tidak menyertakan kolomprovisioningModel:- Jika outputnya menyertakan kolom
preemptibleyang ditetapkan ketrue, VM tersebut adalah preemptible VM. - Jika tidak, VM tersebut adalah VM standar.
- Jika outputnya menyertakan kolom
REST
Untuk mendeskripsikan VM dari Compute Engine API, gunakan
metode instances.get:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Ganti kode berikut:
PROJECT_ID: Project ID dari project tempat VM berada.ZONE: zona tempat VM berada.VM_NAME: nama VM yang ingin Anda periksa.
Pada output, periksa kolom scheduling untuk mengidentifikasi VM:
Jika outputnya menyertakan kolom
provisioningModelyang ditetapkan keSPOT, seperti yang berikut ini, VM tersebut adalah Spot VM.{ ... "scheduling": { ... "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION" ... }, ... }dengan
TERMINATION_ACTIONmenunjukkan tindakan yang harus dilakukan saat Compute Engine melakukan preempt terhadap VM, baik menghentikan (STOP) atau menghapus (DELETE) VM. Jika kolominstanceTerminationActiontidak ada, nilai defaultnya adalahSTOP.Jika tidak, jika output menyertakan kolom
provisioningModelyang ditetapkan kestandardatau jika output tidak menyertakan kolomprovisioningModel:- Jika outputnya menyertakan kolom
preemptibleyang ditetapkan ketrue, VM tersebut adalah preemptible VM. - Jika tidak, VM tersebut adalah VM standar.
- Jika outputnya menyertakan kolom
Go
Java
Python
Mengelola preemption Spot VM
Untuk mempelajari cara mengelola preemption Spot VM, tinjau bagian berikut:
Menangani preemption
Saat Compute Engine mulai mem-preempt Spot VM, Anda dapat mencoba melakukan tindakan pembersihan sebelum VM selesai dimatikan. Penanganan penghentian sementara dapat mencakup penghentian proses yang sedang berjalan secara tuntas dan mentransfer status workload Anda.
Anda dapat menggunakan metode berikut untuk menangani penghentian sementara untuk VM Spot:
- Menangani penghentian sementara dalam workload Anda. Sebaiknya gunakan metode ini untuk Spot VM dengan durasi pemberitahuan penghentian sementara 120 detik (Pratinjau). Secara khusus, dalam workload Anda, konfigurasikan kode untuk menangani penghentian sementara agar menunggu untuk dijalankan hingga penghentian sementara dimulai seperti yang dijelaskan dalam Mendeteksi penghentian sementara dalam VM. Kemudian, kode Anda untuk menangani pengambilalihan berjalan selama durasi pemberitahuan pengambilalihan. (Secara opsional, VM ini juga dapat menentukan skrip penonaktifan, yang berjalan selama periode penonaktifan.)
- Menangani preemption dalam skrip penonaktifan. Kami merekomendasikan metode ini untuk VM Spot tanpa durasi pemberitahuan preemption, yang merupakan konfigurasi default. Secara khusus, konfigurasi kode Anda untuk menangani penghentian sementara dalam skrip penonaktifan seperti yang ditunjukkan dalam contoh berikut. Skrip shutdown otomatis berjalan hingga 30 detik selama periode shutdown upaya terbaik untuk semua jenis shutdown. Oleh karena itu, Anda mungkin ingin mengonfigurasi kode untuk menangani preemption agar hanya berjalan jika VM di-preempt seperti yang dijelaskan dalam Mendeteksi preemption dalam VM.
Contoh berikut menunjukkan cara menangani penghentian sementara dengan mengupload file titik pemeriksaan ke bucket Cloud Storage dalam skrip penonaktifan, dan cara menambahkan skrip penonaktifan saat membuat atau memperbarui Spot VM. Skrip ini berjalan saat VM mulai dinonaktifkan, sebelum perintah kill normal dari sistem operasi menghentikan semua proses yang tersisa. Setelah menghentikan program tertentu dengan lancar, skrip akan melakukan
upload paralel terhadap file checkpoint ke bucket Cloud Storage.
#!/bin/bash
MY_PROGRAM="PROGRAM_NAME" # For example, "apache2" or "nginx"
MY_USER="LOCAL_USER"
CHECKPOINT="/home/$MY_USER/checkpoint.out"
BUCKET_NAME="BUCKET_NAME" # For example, "my-checkpoint-files" (without gs://)
echo "Shutting down! Seeing if ${MY_PROGRAM} is running."
# Find the newest copy of $MY_PROGRAM
PID="$(pgrep -n "$MY_PROGRAM")"
if [[ "$?" -ne 0 ]]; then
echo "${MY_PROGRAM} not running, shutting down immediately."
exit 0
fi
echo "Sending SIGINT to $PID"
kill -2 "$PID"
# Portable waitpid equivalent
while kill -0 "$PID"; do
sleep 1
done
echo "$PID is done, copying ${CHECKPOINT} to gs://${BUCKET_NAME} as ${MY_USER}"
su "${MY_USER}" -c "gcloud storage cp $CHECKPOINT gs://${BUCKET_NAME}/"
echo "Done uploading, shutting down."
Skrip ini mengasumsikan hal berikut:
VM dibuat dengan setidaknya akses baca-tulis ke Cloud Storage. Untuk mengetahui petunjuk cara membuat VM dengan cakupan yang sesuai, baca dokumentasi autentikasi.
Anda sudah memiliki bucket Cloud Storage dan izin untuk menulis ke bucket tersebut.
Untuk menambahkan skrip ini ke VM, konfigurasikan skrip agar berfungsi dengan beban kerja di VM Anda dan tambahkan ke metadata VM.
Salin atau download skrip penonaktifan:
Salin skrip penonaktifan sebelumnya setelah mengganti yang berikut:
PROGRAM_NAMEadalah nama proses atau program yang ingin Anda hentikan. Misalnyaapache2ataunginx.LOCAL_USERadalah nama pengguna yang Anda gunakan untuk login ke virtual machine.BUCKET_NAMEadalah nama bucket Cloud Storage tempat Anda ingin menyimpan file checkpoint program. Perlu diperhatikan bahwa dalam hal ini, nama bucket tidak diawali dengangs://.
Download skrip penonaktifan ke workstation lokal, lalu ganti variabel berikut di file:
[PROGRAM_NAME]adalah nama proses atau program yang ingin Anda nonaktifkan. Misalnyaapache2ataunginx.[LOCAL_USER]adalah nama pengguna yang Anda gunakan untuk login ke virtual machine.[BUCKET_NAME]adalah nama bucket Cloud Storage tempat Anda ingin menyimpan file checkpoint program. Perlu diperhatikan bahwa dalam hal ini, nama bucket tidak diawali dengangs://.
Tambahkan skrip penonaktifan ke VM baru atau VM yang ada.
Mendeteksi preemption Spot VM
Bagian berikut menjelaskan metode yang dapat Anda gunakan untuk mendeteksi preempti VM Spot.
- Mendeteksi preemption dalam VM: Misalnya, gunakan metode ini untuk memeriksa preemption dalam skrip penonaktifan atau untuk memicu penanganan preemption untuk Spot VM dengan durasi pemberitahuan preemption 120 detik (Pratinjau).
- Melihat operasi preemption: Misalnya, gunakan metode ini saat Anda ingin menentukan alasan VM Spot dimatikan.
Mendeteksi preemption dalam VM
Untuk mendeteksi apakah VM di-preempt dari dalam VM itu sendiri, periksa nilai preempted di server metadata dalam metadata default VM Anda. Misalnya, gunakan metode berikut:
Periksa nilai
preemptedsaat ini. Anda dapat menjalankan perintahcurlberikut dari dalam VM untuk mendapatkan nilai saat ini untukpreempted:curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted" -H "Metadata-Flavor: Google" TRUEJika nilai ini
TRUE, VM akan di-preempt oleh Compute Engine. Jika tidak, VM adalahFALSE. Misalnya, gunakan perintah ini dalam skrip penonaktifan untuk memeriksa apakah penonaktifan disebabkan oleh preemption atau tidak.Tunggu hingga
preemptedTRUE. Untuk menunggu hinggapreemptedmenjadiTRUE, Anda dapat menambahkan?wait_for_change=trueke URL perintah sebelumnya. Perintah ini menjalankan permintaan HTTP GET yang tidak berfungsi, yang hanya ditampilkan saat metadata telah berubah dan VM telah di-preempt.curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted?wait_for_change=true" -H "Metadata-Flavor: Google" TRUEPerintah ini berguna saat Anda ingin memicu penanganan preemption di luar skrip penonaktifan. Misalnya, gunakan metode ini untuk memicu penanganan preempti untuk VM Spot dengan durasi pemberitahuan preempti 120 detik (Pratinjau).
Melihat operasi penghentian sementara
Anda dapat melihat operasi penghentian sementara dari Compute Engine menggunakan Cloud de Confiance console, gcloud CLI atau Compute Engine API.
Konsol
Anda dapat memeriksa apakah VM di-preempt dengan memeriksa log aktivitas sistem.
Di konsol Cloud de Confiance , buka halaman Logs.
Pilih project Anda, lalu klik Lanjutkan.
Tambahkan
compute.instances.preemptedke kolom filter menurut label atau penelusuran teks.Anda juga dapat memasukkan nama VM jika ingin melihat operasi preemption untuk VM tertentu.
Tekan enter untuk menerapkan filter yang ditentukan. Konsol Cloud de Confiance memperbarui daftar log untuk hanya menampilkan operasi dengan VM yang di-preempt.
Pilih operasi dalam daftar untuk melihat detail tentang VM yang di-preempt.
gcloud
Gunakan perintah gcloud compute operations list
dengan parameter filter untuk
mendapatkan daftar peristiwa preemption dalam project Anda.
gcloud compute operations list \
--filter="operationType=compute.instances.preempted"
Secara opsional, Anda dapat menggunakan parameter filter tambahan untuk menentukan cakupan hasil lebih lanjut. Misalnya, untuk melihat peristiwa preemption hanya untuk instance dalam grup instance terkelola, gunakan perintah berikut:
gcloud compute operations list \
--filter="operationType=compute.instances.preempted AND targetLink:instances/BASE_INSTANCE_NAME"
dengan BASE_INSTANCE_NAME adalah nama dasar
yang ditentukan sebagai awalan untuk nama semua VM dalam
grup instance terkelola ini.
Output-nya mirip dengan berikut ini:
NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP systemevent-xxxxxxxx compute.instances.preempted us-central1-f/instances/example-instance-xxx 200 DONE 2015-04-02T12:12:10.881-07:00
Jenis operasi compute.instances.preempted menunjukkan bahwa
instance VM di-preempt. Anda dapat menggunakan
perintah gcloud compute operations describe
untuk mendapatkan informasi lebih lanjut tentang operasi preemption tertentu.
gcloud compute operations describe SYSTEM_EVENT \
--zone=ZONE
Ganti kode berikut:
SYSTEM_EVENT: peristiwa sistem dari output perintahgcloud compute operations list—misalnya,systemevent-xxxxxxxx.ZONE: zona peristiwa sistem—misalnya,us-central1-f.
Outputnya mirip dengan hal berikut ini:
... operationType: compute.instances.preempted progress: 100 selfLink: https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/operations/systemevent-xxxxxxxx startTime: '2015-04-02T12:12:10.881-07:00' status: DONE statusMessage: Instance was preempted. ...
REST
Guna mendapatkan daftar operasi sistem terbaru untuk project dan zona tertentu,
gunakan metode zoneOperations.get.
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations
Ganti kode berikut:
PROJECT_ID: Project ID.ZONE: zona.
Secara opsional, untuk mencakup respons agar hanya menampilkan operasi preemption, Anda dapat menambahkan filter ke permintaan API:
operationType="compute.instances.preempted"
Atau, guna melihat operasi preemption
untuk VM tertentu, tambahkan parameter targetLink ke filter:
operationType="compute.instances.preempted" AND targetLink="https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Ganti kode berikut:
+ PROJECT_ID: project ID.
+ ZONE: zona.
+ VM_NAME: nama VM tertentu dalam
zona dan project ini.
Respons berisi daftar operasi terbaru. Misalnya, preemption terlihat serupa dengan berikut ini:
{
"kind": "compute#operation",
"id": "15041793718812375371",
"name": "systemevent-xxxxxxxx",
"zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f",
"operationType": "compute.instances.preempted",
"targetLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/instances/example-instance",
"targetId": "12820389800990687210",
"status": "DONE",
"statusMessage": "Instance was preempted.",
...
}
Menguji setelan preemption
Anda dapat menjalankan simulasi peristiwa pemeliharaan di Spot VM untuk memaksanya melakukan preempt. Gunakan fitur ini untuk menguji cara beban kerja Anda mendeteksi dan menangani penghentian sementara. Untuk mempelajari cara menguji peristiwa pemeliharaan di instance Anda, lihat Menyimulasikan peristiwa pemeliharaan host.
Praktik terbaik
Berikut ini beberapa praktik terbaik untuk membantu Anda memaksimalkan Spot VM.
Menggunakan template instance. Daripada membuat Spot VM satu per satu, Anda dapat menggunakan template instance untuk membuat beberapa Spot VM dengan properti yang sama. Template instance diperlukan untuk menggunakan MIG. Atau, Anda juga dapat membuat beberapa Spot VM menggunakan Bulk Instance API.
Menggunakan MIG untuk mendistribusikan Spot VM secara regional dan membuat ulang Spot VM secara otomatis. Gunakan MIG untuk membuat workload di Spot VM lebih fleksibel dan tangguh. Misalnya, gunakan MIG regional untuk mendistribusikan VM di beberapa zona, yang membantu mengurangi error ketersediaan resource. Selain itu, gunakan autohealing untuk membuat ulang Spot VM secara otomatis setelah di-preempt.
Memilih jenis mesin yang lebih kecil. Resource untuk Spot VM berasal dari kelebihan dan pencadangan Cloud de Confiance by S3NS kapasitas. Kapasitas untuk Spot VM sering kali lebih mudah didapatkan untuk jenis mesin yang lebih kecil, yaitu jenis mesin dengan resource yang lebih sedikit, seperti vCPU dan memori. Anda mungkin menemukan lebih banyak kapasitas untuk Spot VM dengan memilih jenis mesin kustom yang lebih kecil, tetapi kapasitas bahkan lebih mungkin tersedia untuk jenis mesin yang telah ditetapkan dengan ukuran lebih kecil. Misalnya, dibandingkan dengan kapasitas untuk jenis mesin yang telah ditetapkan
n2-standard-32, kapasitas untuk jenis mesin kustomn2-custom-24-96lebih mungkin tersedia, tetapi kapasitas untuk jenis mesin yang telah ditetapkann2-standard-16bahkan lebih mungkin lagi tersedia.Menjalankan cluster Spot VM yang besar selain masa sibuk. Beban pada pusat data bervariasi menurut lokasi dan waktu, tetapi umumnya paling rendah pada malam hari dan akhir pekan. Cloud de Confiance by S3NS Dengan demikian, malam hari dan akhir pekan adalah waktu terbaik untuk menjalankan cluster Spot VM yang besar.
Mendesain beban kerja Anda agar mampu menangani fault dan preemption. Anda harus siap dengan adanya perubahan pola preemption pada waktu yang berbeda. Misalnya, jika suatu zona mengalami pemadaman sebagian, sejumlah besar Spot VM dapat di-preempt untuk memberi ruang bagi VM standar yang perlu dipindahkan sebagai bagian dari pemulihan. Dalam jangka waktu yang singkat itu, tingkat preemption akan terlihat sangat berbeda dari hari lainnya. Jika beban kerja Anda berasumsi bahwa preemption selalu dilakukan dalam kelompok kecil, Anda mungkin tidak siap untuk peristiwa tersebut.
Mencoba lagi membuat Spot VM yang telah di-preempt. Jika Spot VM Anda telah di-preempt, coba buat Spot VM baru satu atau dua kali sebelum beralih kembali ke VM standar. Bergantung pada persyaratan Anda, sebaiknya gabungkan VM standar dan Spot VM di cluster Anda untuk memastikan bahwa pekerjaan dilakukan dengan kecepatan yang memadai.
Menggunakan skrip penonaktifan. Kelola pemberitahuan penonaktifan dan preemption dengan skrip penonaktifan yang dapat menyimpan progres tugas sehingga dapat melanjutkan tugas, bukan memulai dari awal.
Apa langkah selanjutnya?
- Menghubungkan ke instance VM.
- Pelajari skrip penonaktifan.
- Pelajari cara membatasi runtime VM.
- Pelajari template instance.
- Pelajari MIG.