Penskalaan manual

Halaman ini menjelaskan cara menskalakan layanan Anda secara manual. Dokumen ini juga memberikan petunjuk untuk kasus penggunaan umum, yaitu mengubah jumlah instance berdasarkan jadwal menggunakan tugas Cloud Scheduler dan Cloud Run Admin API.

Ringkasan

Secara default, Cloud Run secara otomatis melakukan penskalaan horizontal ke jumlah instance maksimum yang ditentukan atau default, bergantung pada traffic dan pemakaian CPU. Namun, untuk beberapa kasus penggunaan, Anda mungkin menginginkan kemampuan untuk menetapkan jumlah instance tertentu, menggunakan penskalaan manual.

Penskalaan manual memungkinkan Anda menetapkan jumlah instance tertentu, terlepas dari traffic atau pemanfaatan, dan tanpa memerlukan deployment ulang. Semua ini memberi Anda opsi untuk menulis logika penskalaan sendiri menggunakan sistem eksternal. Lihat Penskalaan berbasis jadwal untuk melihat contohnya.

Setelan minimum dan maksimum tingkat revisi serta penskalaan manual

Jika Anda menyetel layanan ke penskalaan manual, setelan instance minimum dan maksimum tingkat revisi akan diabaikan.

Pemisahan traffic untuk penskalaan manual

Daftar berikut menjelaskan cara mengalokasikan instance saat membagi traffic dalam penskalaan manual. Hal ini mencakup perilaku untuk revisi khusus tag traffic.

  • Selama pembagian traffic, setiap revisi dialokasikan instance secara proporsional, berdasarkan pembagian traffic, mirip dengan pembagian traffic dengan instance minimum tingkat layanan.

  • Jika jumlah revisi yang menerima traffic melebihi jumlah instance manual, beberapa revisi tidak akan memiliki instance. Traffic yang dikirim ke revisi tersebut akan mendapatkan error yang sama seperti jika revisi dinonaktifkan.

  • Untuk semua revisi yang menerima traffic dalam pembagian traffic, instance minimum dan maksimum tingkat revisi dinonaktifkan.

  • Jika revisi aktif hanya karena tag traffic:

    • Jika instance minimum tingkat revisi ditetapkan, jumlah instance yang ditentukan akan dimulai, tetapi tidak dihitung dalam jumlah instance manual layanan total. Revisi tidak diskalakan otomatis.
    • Jika instance minimum tingkat revisi tidak ditetapkan, revisi akan diskalakan hingga paling banyak satu instance, sebagai respons terhadap traffic yang dikirim ke URL tag.

Perilaku penagihan menggunakan penskalaan manual

Saat Anda menggunakan penskalaan manual, perilaku penagihan serupa dengan perilaku saat Anda menggunakan fitur instance minimum.

Artinya, dengan penskalaan manual dan penagihan berbasis instance, instance dalam kondisi tidak ada aktivitas yang diskalakan secara manual ditagih sebagai instance aktif.

Jika Anda menggunakan penskalaan manual dengan penagihan berbasis permintaan, instance tidak ada aktivitas yang diskalakan secara manual ditagih sebagai instance minimum tidak ada aktivitas. Untuk mengetahui detail penagihan lengkap, lihat halaman harga.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk men-deploy layanan Cloud Run, minta administrator Anda untuk memberi Anda peran IAM berikut:

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.

Mengonfigurasi penskalaan

Anda dapat mengonfigurasi mode penskalaan menggunakan konsol Google Cloud , Google Cloud CLI, file YAML, atau API saat Anda membuat atau memperbarui layanan:

Konsol

  1. Di konsol Google Cloud , buka Cloud Run:

    Buka Cloud Run

  2. Jika Anda mengonfigurasi layanan baru, pilih Layanan dari menu, lalu klik Deploy container untuk menampilkan formulir Buat layanan. Jika Anda mengonfigurasi layanan yang ada, klik layanan untuk menampilkan panel detailnya, lalu klik ikon pena di samping Penskalaan di kanan atas panel detail.

  3. Temukan formulir Penskalaan layanan (untuk layanan baru) atau formulir Edit penskalaan untuk layanan yang ada.

    gambar

    Di kolom berlabel Number of instances, tentukan jumlah instance container untuk layanan.

  4. Klik Buat untuk layanan baru atau Simpan untuk layanan yang ada.

gcloud

Untuk menentukan penskalaan layanan baru, gunakan perintah deploy:

gcloud beta run deploy SERVICE \
    --scaling=INSTANCE_COUNT \
    --image IMAGE_URL

Ganti kode berikut:

  • SERVICE dengan nama layanan Anda.
  • INSTANCE_COUNT dengan jumlah instance untuk layanan. Tindakan ini menyetel layanan ke penskalaan manual. Tentukan nilai 0 untuk menonaktifkan layanan. Tentukan nilai auto untuk menggunakan perilaku penskalaan otomatis Cloud Run default.
  • 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 memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

Tentukan penskalaan untuk layanan yang ada menggunakan perintah update berikut:

gcloud beta run services update SERVICE \
   --scaling=INSTANCE_COUNT

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. Update atribut scalingMode dan manualInstanceCount:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/launch-stage: BETA
      run.googleapis.com/scalingMode: MODE
      run.googleapis.com/manualInstanceCount: INSTANCE_COUNT

    Ganti kode berikut:

    • SERVICE dengan nama layanan Cloud Run Anda
    • MODE dengan manual untuk penskalaan manual, atau automatic untuk perilaku penskalaan otomatis Cloud Run default.
    • INSTANCE_COUNT dengan jumlah instance yang Anda skalakan secara manual untuk layanan. Tentukan nilai 0 untuk menonaktifkan layanan.
  3. Buat atau perbarui layanan menggunakan perintah berikut:

    gcloud run services replace service.yaml

REST API

Untuk mengupdate instance minimum tingkat layanan untuk layanan tertentu, kirim permintaan HTTP PATCH ke endpoint service Cloud Run Admin API.

Misalnya, menggunakan curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"launchStage":"BETA","scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount

Ganti:

  • ACCESS_TOKEN dengan token akses yang valid untuk akun yang memiliki izin IAM untuk memperbarui layanan. Misalnya, jika login ke gcloud, Anda dapat mengambil token akses menggunakan gcloud auth print-access-token. Dari dalam instance container Cloud Run, Anda dapat mengambil token akses menggunakan server metadata instance container.
  • MANUAL_INSTANCE_COUNT dengan jumlah instance untuk layanan. Tindakan ini menyetel layanan ke penskalaan manual. Tentukan nilai 0 untuk menonaktifkan layanan.
  • SERVICE dengan nama layanan.
  • REGION dengan Google Cloud region tempat layanan di-deploy.
  • PROJECT_ID dengan Google Cloud project ID.

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     = "SERVICE_NAME"
  location = "REGION"
  launch_stage = "BETA"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  scaling {
    scaling_mode = "MANUAL"
    manual_instance_count = "INSTANCE_COUNT"
  }
}

Ganti:

  • SERVICE_NAME dengan nama layanan Cloud Run Anda.
  • REGION dengan region Google Cloud . Contohnya, europe-west1.
  • 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 memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • INSTANCE_COUNT dengan jumlah instance yang Anda skalakan secara manual untuk layanan. Jumlah instance ini dibagi di antara semua revisi dengan traffic yang ditentukan berdasarkan persentase traffic yang diterima.

Melihat konfigurasi penskalaan untuk layanan Anda

Untuk melihat instance konfigurasi penskalaan untuk layanan Cloud Run Anda:

Konsol

  1. Di konsol Google Cloud , buka Cloud Run:

    Buka Cloud Run

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

  3. Setelan penskalaan saat ini ditampilkan di kanan atas panel detail layanan, setelah label Penskalaan, di samping ikon pena.

gcloud

Gunakan perintah berikut untuk melihat konfigurasi penskalaan saat ini untuk layanan:

gcloud beta run services describe SERVICE

Ganti SERVICE dengan nama layanan Anda.

Cari kolom Scaling: Manual (Instances: ) di dekat bagian atas teks yang ditampilkan dari describe.

YAML

Gunakan perintah berikut untuk mendownload konfigurasi YAML layanan:

gcloud run services describe SERVICE --format export > service.yaml

Konfigurasi penskalaan terdapat dalam atribut scalingMode dan manualInstanceCount.

Menonaktifkan layanan

Saat Anda menonaktifkan layanan, semua permintaan yang sedang diproses akan diizinkan untuk diselesaikan. Namun, permintaan lebih lanjut ke URL layanan akan gagal dengan error Service unavailable atau Service disabled.

Permintaan untuk merevisi layanan yang hanya aktif karena tag traffic tidak terpengaruh karena revisi tersebut tidak dinonaktifkan.

Untuk menonaktifkan layanan, Anda menyetel penskalaan ke nol. Anda dapat menonaktifkan layanan menggunakan konsol Google Cloud , Google Cloud CLI, file YAML, atau API:

Konsol

  1. Di konsol Google Cloud , buka Cloud Run:

    Buka Cloud Run

  2. Klik layanan yang ingin Anda nonaktifkan untuk menampilkan panel detailnya, lalu klik ikon pena di samping Penskalaan di kanan atas panel detail.

  3. Temukan formulir Edit penskalaan dan pilih Penskalaan manual.

    gambar

    Di kolom berlabel Number of instances, masukkan nilai 0 (nol).

  4. Klik Simpan.

gcloud

Untuk menonaktifkan layanan, gunakan perintah berikut untuk menyetel penskalaan ke nol:

gcloud beta run services update SERVICE --scaling=0

Ganti SERVICE dengan nama layanan Anda.

YAML

  1. Download konfigurasi YAML layanan Anda:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Tetapkan atribut manualInstanceCount ke nol (0):

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/launch-stage: BETA
      run.googleapis.com/scalingMode: manual
      run.googleapis.com/manualInstanceCount: `0`

    Ganti SERVICE dengan nama layanan Cloud Run Anda.

  3. Buat atau perbarui layanan menggunakan perintah berikut:

    gcloud run services replace service.yaml

REST API

Untuk menonaktifkan layanan, kirim permintaan HTTP PATCH ke endpoint service Cloud Run Admin API.

Misalnya, menggunakan curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"launchStage":"BETA","scaling":{"manualInstanceCount":0 }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount

Ganti:

  • ACCESS_TOKEN dengan token akses yang valid untuk akun yang memiliki izin IAM untuk memperbarui layanan. Misalnya, jika login ke gcloud, Anda dapat mengambil token akses menggunakan gcloud auth print-access-token. Dari dalam instance container Cloud Run, Anda dapat mengambil token akses menggunakan server metadata instance container.
  • SERVICE dengan nama layanan.
  • REGION dengan Google Cloud region tempat layanan di-deploy.
  • PROJECT_ID dengan Google Cloud project ID.

Terraform

Untuk menonaktifkan layanan, tetapkan atribut manual_instance_count ke nol (0):

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"
  launch_stage = "BETA"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  scaling {
    scaling_mode = "MANUAL"
    manual_instance_count = "0"
  }
}

Ganti:

  • SERVICE_NAME dengan nama layanan Cloud Run Anda.
  • REGION dengan region Google Cloud . Contohnya, europe-west1.
  • 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 memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Contoh penskalaan berbasis jadwal

Kasus penggunaan umum penskalaan manual adalah mengubah jumlah instance berdasarkan jadwal yang telah ditentukan. Dalam contoh ini, kita menggunakan Cloud Scheduler untuk menjadwalkan dua tugas, yang masing-masing memanggil Cloud Run Admin API untuk menskalakan jumlah instance. Tugas pertama menetapkan layanan untuk melakukan penskalaan manual hingga 10 instance selama jam kerja (09.00-17.00, Senin-Jumat). Pekerjaan kedua menyetel layanan untuk melakukan penyebaran skala ke nol instance di luar jam kerja.

Perhatikan bahwa menyetel instance ke nol seperti yang ditunjukkan dalam contoh akan menonaktifkan layanan, tetapi bukan tugas Cloud Scheduler. Tugas tersebut akan terus berjalan dan akan mereset (serta mengaktifkan kembali) layanan ke 10 instance sesuai jadwal.

Dalam contoh ini, kita menggunakan panduan memulai Cloud Run agar lebih sederhana, tetapi Anda dapat menggunakan layanan pilihan Anda.

Untuk menyiapkan penskalaan manual berbasis jadwal:

  1. Deploy layanan Anda menggunakan perintah berikut:

    gcloud beta run deploy SERVICE \
       --image=us-docker.pkg.dev/cloudrun/container/hello \
       --region=REGION \
       --project PROJECT_ID

    Ganti variabel berikut:

    • REGION dengan region tempat layanan Cloud Run di-deploy.
    • SERVICE dengan nama layanan Cloud Run.
  2. Konfigurasi layanan Anda untuk penskalaan manual ke 10 instance menggunakan perintah berikut:

    gcloud beta run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. Buat tugas Cloud Scheduler yang menskalakan instance layanan secara manual hingga 10 instance selama jam kerja:

    gcloud scheduler jobs create http hello-start-instances \
      --location=REGION \
      --schedule="0 9 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"launchStage":"BETA","scaling":{"manualInstanceCount":10}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Perintah ini membuat tugas Cloud Scheduler yang melakukan panggilan HTTP ke Cloud Run Admin API, dengan menetapkan jumlah instance ke 10. Contoh ini menggunakan akun layanan default Compute Engine PROJECT_NUMBER-compute@developer.gserviceaccount.com untuk tugas Cloud Scheduler. Anda dapat menggunakan akun layanan apa pun yang memiliki izin untuk memperbarui layanan Cloud Run.

  4. Buat tugas Cloud Scheduler yang menskalakan instance layanan secara manual menjadi nol instance selama jam tidak aktif, sehingga menonaktifkan layanan:

    gcloud scheduler jobs create http hello-stop-instances \
      --location=REGION \
      --schedule="0 17 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"launchStage":"BETA","scaling":{"manualInstanceCount":0}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Perintah ini membuat tugas Cloud Scheduler yang melakukan panggilan HTTP ke Cloud Run Admin API, yang menyetel instance penskalaan manual ke nol. Tindakan ini secara efektif menonaktifkan layanan, tetapi tidak menonaktifkan tugas Cloud Scheduler, yang akan terus berjalan dan mereset (serta mengaktifkan kembali) layanan ke 10 instance sesuai jadwal.