Halaman ini menjelaskan cara membuat dan menggunakan instance preemptible virtual machine (VM). Preemptible VM tersedia dengan diskon hingga 60-91% dibandingkan dengan harga VM standar. Namun, Compute Engine dapat menghentikan (preempt) VM ini jika perlu mengklaim kembali resource tersebut untuk tugas lainnya. Preemptible VM selalu berhenti setelah 24 jam. Preemptible VM hanya direkomendasikan untuk aplikasi fault-tolerant yang dapat tahan terhadap preemption VM. Pastikan aplikasi Anda dapat menangani preemption sebelum Anda memutuskan untuk membuat preemptible VM. Untuk memahami risiko dan manfaat preemptible VM, baca dokumentasi instance preemptible VM.
Sebelum memulai
- Baca dokumentasi Instance preemptible VM.
-
Jika Anda belum melakukannya, siapkan autentikasi.
Autentikasi adalah
proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud.
Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Salin atau download skrip penonaktifan ke workstation lokal.
- Buka file untuk diedit dan ubah variabel berikut:
[PROGRAM_NAME]
adalah nama proses atau program yang ingin Anda nonaktifkan. Misalnyaapache2
ataunginx
.[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 nama bucket tidak diawali dengangs://
.
- Simpan perubahan Anda.
- Tambahkan skrip penonaktifan ke VM baru atau VM yang ada.
VM dibuat dengan setidaknya akses baca/tulis ke Cloud Storage. Baca dokumentasi autentikasi untuk mengetahui petunjuk cara membuat VM dengan cakupan yang sesuai.
Anda sudah memiliki bucket Cloud Storage dan izin untuk menulis ke bucket tersebut.
Di Konsol Google Cloud, buka halaman Logs.
Pilih project Anda, lalu klik Lanjutkan.
Tambahkan
compute.instances.preempted
ke 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 Google Cloud memperbarui daftar log untuk hanya menampilkan operasi dengan VM yang di-preempt.
Pilih operasi dalam daftar untuk melihat detail tentang VM yang di-preempt.
- Baca dokumentasi Instance preemptible VM.
- Baca Skrip penonaktifan.
- Menghubungkan ke VM Anda.
Go
Untuk menggunakan contoh Go di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.
Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.
Java
Untuk menggunakan contoh Java di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.
Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.
Node.js
Untuk menggunakan contoh Node.js di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.
Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.
Python
Untuk menggunakan contoh Python di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.
Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.
REST
Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.
Membuat preemptible VM
Buat preemptible VM menggunakan gcloud CLI atau Compute Engine API. Untuk menggunakan konsol Google Cloud, buat VM Spot.
gcloud
Dengan
gcloud compute
, gunakan perintahinstances create
yang sama seperti yang Anda gunakan untuk membuat VM normal, tetapi tambahkan flag--preemptible
.gcloud compute instances create [VM_NAME] --preemptible
dengan
[VM_NAME]
adalah nama VM.Go
Java
Node.js
Python
REST
Di API, buat permintaan normal untuk membuat VM, tetapi sertakan properti
preemptible
di bagianscheduling
dan tetapkan ketrue
singkat ini. Contoh:POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances { 'machineType': 'zones/[ZONE]/machineTypes/[MACHINE_TYPE]', 'name': '[INSTANCE_NAME]', 'scheduling': { 'preemptible': true }, ... }
Kuota CPU preemptible
Preemptible VM memerlukan kuota CPU yang tersedia seperti VM standar. Agar preemptible VM tidak menggunakan kuota CPU untuk VM standar, Anda dapat meminta kuota "Preemptible CPU" khusus. Setelah Compute Engine memberi Anda kuota CPU yang dapat dihentikan di region tersebut, semua preemptible VM akan mengurangi kuota tersebut, dan semua VM standar akan terus mengurangi kuota CPU standar.
Di region tempat Anda tidak memiliki kuota CPU yang dapat dihentikan, Anda dapat menggunakan kuota CPU standar untuk meluncurkan preemptible VM. Anda juga memerlukan IP dan kuota disk yang cukup, seperti biasa. Kuota CPU yang dapat dihentikan tidak terlihat di halaman kuota gcloud CLI atau Google Cloud Console, kecuali jika Compute Engine memberikan kuota tersebut.
Untuk mengetahui informasi selengkapnya tentang kuota, buka halaman Resource Quotas.
Memulai VM yang di-preempt
Seperti VM lainnya, jika preemptible VM dihentikan atau di-preempt, Anda dapat memulai VM lagi dan memulihkannya ke status
RUNNING
. Memulai preemptible VM akan mereset penghitung 24 jam, tetapi karena masih merupakan preemptible VM, Compute Engine dapat melakukan preempt sebelum 24 jam. Preemptible VM ke VM standar tidak dapat dikonversi saat sedang berjalan.Jika Compute Engine menghentikan preemptible VM di cluster grup instance terkelola (MIG) atau Google Kubernetes Engine (GKE) penskalaan otomatis, grup akan memulai ulang VM saat resource kembali tersedia.
Menangani preemption dengan skrip penonaktifan
Saat Compute Engine melakukan preempt VM, Anda dapat menggunakan skrip penonaktifan untuk mencoba melakukan tindakan pembersihan sebelum VM di-preempt. Misalnya, Anda dapat menghentikan dengan lancar proses yang sedang berjalan dan menyalin file checkpoint ke Cloud Storage. Secara khusus, durasi maksimum periode penonaktifan lebih singkat untuk pemberitahuan pengambilan alih daripada untuk penonaktifan yang dimulai pengguna. Untuk informasi selengkapnya tentang periode penonaktifan untuk pemberitahuan prioritas, lihat Proses prioritas dalam dokumentasi konseptual.
Berikut ini adalah skrip penonaktifan yang dapat ditambahkan ke preemptible VM yang sedang berjalan atau yang ditambahkan ke preemptible VM baru saat Anda membuatnya. Skrip ini dijalankan saat VM mulai dimatikan, sebelum perintah
kill
normal sistem operasi menghentikan semua proses yang tersisa. Setelah menghentikan program yang diinginkan secara halus, skrip akan melakukan upload paralel file checkpoint ke bucket Cloud Storage.#!/bin/bash MY_PROGRAM="[PROGRAM_NAME]" # For example, "apache2" or "nginx" MY_USER="[LOCAL_USERNAME]" 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."
Untuk menambahkan skrip ini ke VM, konfigurasikan skrip agar berfungsi dengan aplikasi di VM Anda dan tambahkan ke metadata VM.
Skrip ini mengasumsikan hal berikut:
Mengidentifikasi preemptible VM
Untuk memeriksa apakah VM adalah preemptible VM, ikuti langkah-langkah untuk Mengidentifikasi model penyediaan dan tindakan penghentian VM.
Menentukan apakah VM di-preempt
Tentukan apakah VM di-preempt dengan Google Cloud Console, gcloud CLI, atau API.
Konsol
Anda dapat memeriksa apakah VM di-preempt dengan memeriksa log aktivitas sistem.
gcloud
Gunakan perintahgcloud compute operations list
dengan parameter filter untuk mendapatkan daftar peristiwa preemption di project Anda.gcloud compute operations list \ --filter="operationType=compute.instances.preempted"
Anda dapat menggunakan parameter filter untuk menentukan cakupan hasil lebih lanjut. Misalnya, untuk melihat peristiwa preemption hanya untuk VM dalam grup instance terkelola:
gcloud compute operations list \ --filter="operationType=compute.instances.preempted AND targetLink:instances/[BASE_VM_NAME]"
gcloud
menampilkan respons yang mirip dengan:NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP systemevent-xxxxxxxx compute.instances.preempted us-central1-f/instances/example-vm-xxx 200 DONE 2015-04-02T12:12:10.881-07:00
Jenis operasi
compute.instances.preempted
menunjukkan bahwa VM di-preempt. Anda dapat menggunakan perintahoperations describe
untuk mendapatkan informasi lebih lanjut tentang operasi preemption tertentu.gcloud compute operations describe \ systemevent-xxxxxxxx
gcloud
menampilkan respons yang mirip dengan:... operationType: compute.instances.preempted progress: 100 selfLink: https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/operations/systemevent-xxxxxxxx startTime: '2015-04-02T12:12:10.881-07:00' status: DONE statusMessage: Instance was preempted. ...
REST
Untuk mendapatkan daftar operasi sistem terbaru, kirim permintaanGET
ke URI operasi zona.GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations
Respons berisi daftar operasi terbaru.
{ "kind": "compute#operation", "id": "15041793718812375371", "name": "systemevent-xxxxxxxx", "zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f", "operationType": "compute.instances.preempted", "targetLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-vm", "targetId": "12820389800990687210", "status": "DONE", "statusMessage": "Instance was preempted.", ... }
Untuk mencakup respons agar hanya menampilkan operasi preemption, Anda dapat menambahkan filter ke permintaan API:
operationType="compute.instances.preempted"
. Untuk melihat operasi preemption untuk VM tertentu, tambahkan parametertargetLink
ke filter:operationType="compute.instances.preempted" AND targetLink="https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[VM_NAME]"
.Atau, Anda dapat menentukan apakah VM di-preempt dari dalam VM itu sendiri. Hal ini berguna jika Anda ingin menangani penonaktifan karena preemption Compute Engine yang berbeda dengan penonaktifan normal dalam skrip penonaktifan. Untuk melakukannya, cukup periksa nilai
preempted
di server metadata dalam metadata instance default VM Anda.Misalnya, gunakan
curl
dari dalam VM Anda guna mendapatkan nilai untukpreempted
:curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted" -H "Metadata-Flavor: Google" TRUE
Jika nilai ini
TRUE
, VM akan di-preempt oleh Compute Engine. Jika tidak, VM adalahFALSE
.Jika ingin menggunakannya di luar skrip penonaktifan, Anda dapat menambahkan ?wait_for_change=true ke URL. Layanan 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" TRUE
Menguji setelan preemption
Anda dapat menjalankan simulasi peristiwa pemeliharaan di VM untuk memaksanya melakukan preempt. Gunakan fitur ini untuk menguji cara aplikasi Anda menangani preemptible VM. Baca menguji kebijakan ketersediaan Anda untuk mempelajari cara menguji peristiwa pemeliharaan di VM Anda.
Anda juga dapat melakukan simulasi preemption VM dengan menghentikan VM, yang dapat digunakan sebagai pengganti simulasi peristiwa pemeliharaan dan untuk menghindari batas kuota.
Praktik terbaik
Berikut ini beberapa praktik terbaik untuk membantu Anda memaksimalkan instance preemptible VM.
Menggunakan bulk instance API
Daripada membuat satu VM, Anda dapat menggunakan bulk instance API.
Memilih bentuk mesin yang lebih kecil
Resource untuk preemptible VM kelebihan dan mencadangkan kapasitas Google Cloud. Kapasitas sering kali lebih mudah diperoleh untuk jenis mesin yang lebih kecil, yang berarti jenis mesin dengan resource yang lebih sedikit seperti vCPU dan memori. Anda mungkin menemukan kapasitas yang lebih besar untuk preemptible VM dengan memilih jenis mesin kustom yang lebih kecil, tetapi kapasitas bahkan lebih cenderung untuk jenis mesin yang telah ditetapkan dengan ukuran lebih kecil. Misalnya, dibandingkan dengan kapasitas untuk jenis mesin yang telah ditetapkan dari
n2-standard-32
, kapasitas untuk jenis mesin kustomn2-custom-24-96
lebih mungkin, tetapi kapasitas untuk jenis mesin yang telah ditetapkan untukn2-standard-16
bahkan lebih mungkin terjadi.Menjalankan cluster preemptible VM berukuran besar selama masa sibuk
Muatan pada pusat data Google Cloud bervariasi menurut lokasi dan waktu, tetapi umumnya paling rendah pada malam hari dan akhir pekan. Dengan demikian, malam hari dan akhir pekan adalah waktu terbaik untuk menjalankan cluster preemptible VM yang besar.
Mendesain aplikasi Anda agar menjadi fault-tolerant dan preemption
Anda harus siap dengan adanya perubahan pola preemption pada waktu yang berbeda. Misalnya, jika suatu zona mengalami pemadaman sebagian, sejumlah besar preemptible 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 aplikasi Anda berasumsi bahwa preemption selalu dilakukan dalam kelompok kecil, Anda mungkin tidak siap untuk peristiwa tersebut. Anda dapat menguji perilaku aplikasi dalam peristiwa preemption dengan menghentikan instance VM.
Coba buat lagi VM yang telah di-preempt
Jika instance VM Anda di-preempt, coba buat preemptible VM baru satu atau dua kali sebelum beralih kembali ke VM standar. Bergantung pada persyaratan Anda, sebaiknya gabungkan VM standar dan preemptible 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?
Kecuali dinyatakan lain, konten di halaman ini dilisensikan berdasarkan Lisensi Creative Commons Attribution 4.0, sedangkan contoh kode dilisensikan berdasarkan Lisensi Apache 2.0. Untuk mengetahui informasi selengkapnya, lihat Kebijakan Situs Google Developers. Java adalah merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2024-12-22 UTC.
-