Memilih lingkungan eksekusi untuk layanan

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:

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

  1. Di konsol Google Cloud , buka Cloud Run:

    Buka Cloud Run

  2. 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.

  3. Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal, lalu klik Container(s), Volume, Jaringan, Keamanan untuk meluaskan halaman konfigurasi layanan.

  4. Klik tab Container.

    gambar

    • Pilih lingkungan eksekusi yang diinginkan menggunakan tombol opsi. Biarkan "Default" agar Cloud Run memilih lingkungan eksekusi yang sesuai.
  5. 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 format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • ENVIRONMENT: lingkungan eksekusi yang diinginkan. Tentukan nilai gen1 untuk generasi pertama atau gen2 untuk generasi kedua.

YAML

  1. 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
  2. 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 gen1 untuk generasi pertama atau gen2 untuk generasi kedua.

    Hapus anotasi run.googleapis.com/execution-environment untuk perilaku default.

  3. 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 resource google_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_GEN1 untuk generasi pertama, atau EXECUTION_ENVIRONMENT_GEN2 untuk generasi kedua.

Tampilan setelan lingkungan eksekusi

Untuk melihat setelan lingkungan Eksekusi saat ini untuk layanan Cloud Run Anda:

Konsol

  1. Di konsol Google Cloud , buka halaman Services Cloud Run:

    Buka Cloud Run

  2. Klik layanan yang Anda minati untuk membuka halaman Detail layanan.

  3. Klik tab Revisi.

  4. Di panel detail di sebelah kanan, setelan lingkungan Eksekusi tercantum di bagian tab Container.

gcloud

  1. Gunakan perintah berikut:

    gcloud run services describe SERVICE
  2. 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:

  1. Mulai Cloud Shell Anda dapat menemukan Tombol Aktifkan Cloud Run 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.

  2. 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 format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

  3. 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.

  4. Dengan menggunakan ID container, kirimkan sinyal SIGTERM ke container Anda.

    docker kill -s SIGTERM CONTAINER_ID
  5. 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.

Atau, Anda dapat mengubah aplikasi Anda untuk menangani SIGTERM secara langsung.

Langkah berikutnya