Semua instance Cloud Run di-sandbox, teknologi sandbox dan fitur yang tersedia berbeda-beda bergantung pada lingkungan eksekusi yang dipilih.
Lingkungan eksekusi generasi pertama didasarkan pada gVisor dan memiliki waktu cold start yang cepat serta emulasi sebagian besar, tetapi tidak semua panggilan sistem operasi.
Lingkungan eksekusi generasi kedua adalah microVM dan menyediakan kompatibilitas Linux penuh, bukan emulasi panggilan sistem. Lingkungan eksekusi ini menyediakan:
- Performa CPU yang lebih cepat
- Performa jaringan yang lebih cepat, terutama dengan hadirnya paket yang hilang
- Kompatibilitas Linux penuh, termasuk dukungan untuk semua panggilan sistem, namespace, dan cgroup
- Dukungan sistem file jaringan
Meskipun lingkungan eksekusi generasi kedua umumnya memiliki performa lebih cepat dalam beban berkelanjutan, lingkungan ini memiliki waktu cold start yang lebih lama dibandingkan generasi pertama untuk beberapa layanan.
Kedua lingkungan eksekusi memiliki harga yang sama. Lihat halaman harga Cloud Run untuk mengetahui detailnya.
Memilih lingkungan eksekusi untuk layanan Cloud Run
Layanan Cloud Run secara default tidak menentukan lingkungan eksekusi, yang berarti Cloud Run memilih lingkungan eksekusi berdasarkan fitur yang digunakan. Jika Anda tidak menentukan lingkungan eksekusi untuk layanan Anda, Cloud Run dapat memilih lingkungan generasi pertama atau generasi kedua.
Tugas dan pool worker Cloud Run hanya menggunakan lingkungan eksekusi generasi kedua, dan hal ini tidak dapat diubah.
Cara memilih lingkungan eksekusi
Anda harus menggunakan generasi pertama jika salah satu hal berikut berlaku:
- Layanan Cloud Run Anda memiliki traffic yang tinggi, dan perlu diskalakan dengan cepat ke banyak instance, atau layanan Anda akan sensitif terhadap waktu cold start.
- Layanan Cloud Run Anda memiliki traffic yang jarang terjadi sehingga menyebabkan seringnya penskalaan dari nol.
- Anda ingin menggunakan memori kurang dari 512 MiB. Lingkungan eksekusi generasi kedua memerlukan memori setidaknya sebesar 512 MiB.
Anda harus menggunakan generasi kedua jika salah satu dari hal berikut berlaku untuk layanan Cloud Run Anda:
- Layanan Anda perlu menggunakan NFS, yang hanya didukung oleh generasi kedua.
- Layanan Anda memiliki traffic yang cukup stabil dan toleran terhadap cold start yang agak lebih lambat.
- Layanan Anda memiliki workload CPU yang intensif.
- Layanan Anda dapat memanfaatkan performa jaringan yang lebih cepat.
- Layanan Anda menggunakan Traffic keluar VPC langsung untuk mengirim traffic ke jaringan VPC dan memerlukan performa jaringan terbaik.
- Layanan Anda perlu untuk menggunakan software yang memiliki masalah yang berjalan di generasi pertama dikarenakan oleh panggilan sistem yang tidak diimplementasikan.
- Layanan Anda memerlukan fungsionalitas Cgroup Linux.
- Layanan Anda menggunakan infrastruktur pihak ketiga untuk mengamankan container.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mengonfigurasi dan men-deploy layanan Cloud Run, minta administrator untuk memberi Anda peran IAM berikut:
-
Developer Cloud Run (
roles/run.developer) di layanan Cloud Run -
Pengguna Akun Layanan (
roles/iam.serviceAccountUser) di identitas layanan
Jika Anda men-deploy layanan atau fungsi dari kode sumber, Anda juga harus memiliki peran tambahan yang diberikan kepada Anda di project dan akun layanan Cloud Build.
Untuk mengetahui daftar peran dan izin IAM yang terkait dengan Cloud Run, lihat Peran IAM Cloud Run dan Izin IAM Cloud Run. Jika layanan Cloud Run Anda berinteraksi dengan Google Cloud API, seperti Library Klien Cloud, lihat panduan konfigurasi identitas layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat izin deployment dan mengelola akses.
Menetapkan dan memperbarui lingkungan eksekusi
Setiap perubahan konfigurasi akan menghasilkan revisi baru. Revisi selanjutnya juga akan otomatis mendapatkan setelan konfigurasi ini, kecuali jika Anda melakukan pembaruan eksplisit untuk mengubahnya.
Nilai default untuk layanan Cloud Run adalah unspecified, yang berarti Cloud Run akan memilih lingkungan eksekusi yang sesuai. Atau, Anda dapat menentukan lingkungan eksekusi. Untuk menggunakan generasi kedua, Anda harus menentukan memori minimal 512 MiB.
Anda dapat menetapkan lingkungan eksekusi menggunakan Google Cloud konsol, command line gcloud, atau file YAML saat membuat layanan baru atau men-deploy revisi baru:
Konsol
Di konsol Google Cloud , buka Cloud Run:
Pilih Services dari menu navigasi Cloud Run, lalu klik Deploy container untuk mengonfigurasi layanan baru. Jika Anda mengonfigurasi layanan yang ada, klik layanan, lalu klik Edit dan deploy revisi baru.
Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal, lalu klik Container(s), Volume, Jaringan, Keamanan untuk meluaskan halaman konfigurasi layanan.
Klik tab Container.
- Pilih lingkungan eksekusi yang diinginkan menggunakan tombol opsi. Biarkan "Default" agar Cloud Run memilih lingkungan eksekusi yang sesuai.
Klik Buat atau Deploy.
gcloud
Anda dapat memperbarui lingkungan eksekusi untuk layanan tertentu menggunakan perintah berikut:
gcloud run services update SERVICE --execution-environment ENVIRONMENT
Ganti SERVICE dengan nama layanan Anda dan ENVIRONMENT dengan lingkungan eksekusi yang diinginkan. Tentukan nilai gen1 untuk generasi
pertama atau gen2 untuk generasi kedua.
Anda juga dapat menetapkan lingkungan eksekusi selama deployment menggunakan perintah:
gcloud run deploy --image IMAGE_URL --execution-environment ENVIRONMENT
Ganti kode berikut:
- IMAGE_URL: referensi ke image container, misalnya,
us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. ENVIRONMENT: lingkungan eksekusi yang diinginkan. Tentukan nilaigen1untuk generasi pertama ataugen2untuk generasi kedua.
YAML
Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML-nya:
gcloud run services describe SERVICE --format export > service.yaml
setel anotasi
run.googleapis.com/execution-environment:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/execution-environment: ENVIRONMENT
Ganti kode berikut:
- SERVICE: nama layanan Cloud Run Anda.
- ENVIRONMENT: lingkungan eksekusi yang dipilih.
Tentukan nilai
gen1untuk generasi pertama ataugen2untuk generasi kedua.
Hapus anotasi
run.googleapis.com/execution-environmentuntuk perilaku default.Buat atau update layanan menggunakan perintah berikut:
gcloud run services replace service.yaml
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Tambahkan kode berikut ke resourcegoogle_cloud_run_v2_service
di konfigurasi Terraform Anda:resource "google_cloud_run_v2_service" "default" {
name = "cloudrun-service-execution-environment"
location = "REGION"
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
execution_environment = "ENVIRONMENT"
}
}
Ganti kode berikut:
- REGION: Google Cloud region. Contohnya,
europe-west1. - ENVIRONMENT:
EXECUTION_ENVIRONMENT_GEN1untuk generasi pertama, atauEXECUTION_ENVIRONMENT_GEN2untuk generasi kedua.
Tampilan setelan lingkungan eksekusi
Untuk melihat setelan lingkungan Eksekusi saat ini untuk layanan Cloud Run Anda:
Konsol
Di konsol Google Cloud , buka halaman Services Cloud Run:
Klik layanan yang Anda minati untuk membuka halaman Detail layanan.
Klik tab Revisi.
Di panel detail di sebelah kanan, setelan lingkungan Eksekusi tercantum di bagian tab Container.
gcloud
Gunakan perintah berikut:
gcloud run services describe SERVICE
Temukan setelan lingkungan Eksekusi dalam konfigurasi yang ditampilkan.
Penghentian tuntas
Saat instance Cloud Run dimatikan, instance tersebut menerima
sinyal SIGTERM
untuk mengaktifkan penonaktifan yang tuntas selama 10 detik.
Menangani sinyal SIGTERM
Sebaiknya container Anda menginstal pengendali SIGTERM, terutama jika Anda menggunakan penagihan berbasis permintaan.
Menangani SIGTERM memberikan container Anda kesempatan untuk melakukan tugas pembersihan yang diperlukan seperti upaya mengosongkan log sebelum keluar. Jika container Anda tidak menangkap SIGTERM, container masih akan diberi waktu 10 detik untuk melakukan tugas ini; 10 detik itu ditagihkan.
Cara memeriksa apakah container Anda menangani SIGTERM
Untuk menentukan apakah pengendali SIGTERM telah terinstal pada container Anda:
Mulai Cloud Shell Anda dapat menemukan
AKtifkan Cloud Shell dalam header halaman dokumentasi yang sedang Anda buka. Anda mungkin perlu untuk memberikan otorisasi dan menunggu hingga tersedia. Sebagai alternatif, mulai sesi mandiri.
Jalankan container secara lokal di Cloud Shell:
docker run IMAGE_URL
Ganti IMAGE_URL dengan referensi ke image container, misalnya,
us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.Buka tab lain dalam Cloud Shell dan dapatkan daftar container yang berjalan di sesi Cloud Shell saat ini:
docker container ls
Anda perlu menemukan ID container yang ditampilkan dari perintah.
Dengan menggunakan ID container, kirimkan sinyal SIGTERM ke container Anda.
docker kill -s SIGTERM CONTAINER_ID
Kembali ke tab tempat Anda memanggil
docker rununtuk melihat apakah container telah keluar (dihentikan). Jika sinyal SIGTERM menyebabkan container Anda keluar, berarti container Anda sedang menangani SIGTERM.
Cara menangani SIGTERM
Jika container Anda tidak menangani SIGTERM, cara paling sederhana untuk menambahkan pengendali SIGTERM
adalah dengan menggabungkan layanan Anda dengan tini. Dengan melakukan hal ini, layanan Anda akan berjalan
sebagai subproses tini, yang berperan sebagai proses init container.
Lihat petunjuk Docker
untuk mengetahui petunjuknya.
Atau, Anda dapat mengubah aplikasi Anda untuk menangani SIGTERM secara langsung.
Langkah berikutnya
- Untuk menggunakan Filestore dengan Cloud Run, lihat Menggunakan Filestore dengan Cloud Run.
- Untuk menggunakan Cloud Storage FUSE dengan Cloud Run, lihat Menggunakan Cloud Storage FUSE dengan Cloud Run.