Layanan Cloud Run secara default tidak memiliki lingkungan eksekusi yang ditentukan, yang berarti Cloud Run memilih lingkungan eksekusi berdasarkan fitur yang digunakan. Jadi, kecuali jika Anda menentukan lingkungan eksekusi untuk layanan Anda, Cloud Run dapat memilih antara atau lingkungan generasi kedua.
Perlu diperhatikan bahwa tugas Cloud Run hanya menggunakan generasi kedua dan tidak bisa diubah untuk tugas.
Lingkungan eksekusi generasi pertama memiliki waktu cold start dan emulasi yang cepat hampir semua, tetapi tidak semua panggilan sistem operasi. Awalnya, ini adalah satu-satunya lingkungan eksekusi yang tersedia untuk layanan di Cloud Run.
Lingkungan eksekusi generasi kedua 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 sebagian besar layanan.
Anda dapat memilih lingkungan eksekusi untuk layanan Cloud Run saat Anda men-deploy layanan baru atau revisi baru dari layanan Anda. Jika Anda tidak menentukan lingkungan eksekusi, generasi pertama akan digunakan secara default.
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 untuk menggunakan sistem file jaringan, 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 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.
Praktik terbaik saat menggunakan lingkungan eksekusi generasi kedua
Kami merekomendasikan container Anda untuk menginstal pengendali SIGTERM, terutama jika Anda menggunakan model penagihan CPU On-Demand.
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 dapat 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, maka repositori REPO_NAME harus sudah dibuat. URL memiliki bentukLOCATION-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 run
untuk 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.
Sebagai alternatif, Anda dapat mengubah aplikasi Anda untuk secara langsung menangani SIGTERM.
Langkah berikutnya
- Untuk menentukan lingkungan eksekusi bagi layanan Cloud Run Anda, lihat Memilih lingkungan eksekusi.
- Guna menentukan memori untuk layanan Cloud Run Anda, lihat Batas memori.
- 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.
- Untuk menggunakan sistem file jaringan seperti NFS, NDB, 9P, CIFS/Samba, dan Ceph dengan Cloud Run, lihat Menggunakan sistem file jaringan