Halaman ini menjelaskan cara menskalakan layanan secara manual. Panduan ini juga memberikan petunjuk untuk kasus penggunaan umum, yaitu mengubah jumlah instance berdasarkan jadwal menggunakan tugas Cloud Scheduler dan Cloud Run Admin API.
Ringkasan
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 Anda sendiri menggunakan sistem eksternal. Sebagai contoh, lihat Penskalaan berbasis jadwal.
Secara default, Cloud Run secara otomatis melakukan penyebaran skala ke jumlah maksimum instance yang ditentukan atau default, bergantung pada traffic, CPU, atau target pemanfaatan CPU atau konkurensi kustom Anda sendiri. Namun, untuk beberapa kasus penggunaan, Anda mungkin ingin dapat menetapkan jumlah instance tertentu dengan menggunakan penskalaan manual.
Setelan minimum dan maksimum tingkat revisi serta penskalaan manual
Jika Anda menetapkan layanan ke penskalaan manual, setelan instance maksimum dan minimum tingkat revisi akan diabaikan.
Pemisahan traffic untuk penskalaan manual
Daftar berikut menjelaskan cara instance dialokasikan saat memisahkan traffic dalam penskalaan manual. Hal ini mencakup perilaku untuk revisi khusus tag traffic.
Selama pemisahan traffic, setiap revisi dialokasikan instance secara proporsional, berdasarkan pemisahan traffic, mirip dengan pemisahan 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 pemisahan traffic, instance minimum dan maksimum tingkat revisi akan dinonaktifkan.
Jika revisi aktif hanya karena tag traffic:
- Jika instance minimum tingkat revisi ditetapkan, jumlah instance yang ditentukan akan dimulai, tetapi tidak dihitung dalam total jumlah instance manual layanan. Revisi tidak akan diskalakan otomatis.
- Jika instance minimum tingkat revisi tidak ditetapkan, revisi akan diskalakan ke maksimal satu instance, sebagai respons terhadap traffic yang dikirim ke URL tag.
Perilaku penagihan menggunakan penskalaan manual
Saat Anda menggunakan penskalaan manual, perilaku penagihan mirip dengan perilaku saat Anda menggunakan fitur instance minimum.
Artinya, dengan penskalaan manual dan penagihan berbasis instance, instance tidak ada aktivitas yang diskalakan secara manual akan ditagih sebagai instance aktif.
Jika Anda menggunakan penskalaan manual dengan penagihan berbasis permintaan, instance tidak ada aktivitas yang diskalakan secara manual akan 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 untuk memberi Anda peran IAM berikut:
- Cloud Run Developer (
roles/run.developer) di layanan Cloud Run - Pengguna Akun Layanan (
roles/iam.serviceAccountUser) pada identitas layanan - Artifact Registry Reader (
roles/artifactregistry.reader) di repositori Artifact Registry dari image container yang di-deploy (jika ada)
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 manual
Anda dapat mengonfigurasi mode penskalaan menggunakan konsol Google Cloud , Google Cloud CLI, file YAML, atau API saat Anda membuat layanan atau mengupdate revisi:
Konsol
Di konsol Google Cloud , buka Cloud Run:
Pilih Services dari menu navigasi Cloud Run:
Jika Anda mengonfigurasi layanan baru, klik Deploy container dan isi halaman setelan layanan awal.
Jika Anda mengonfigurasi layanan yang ada, klik layanan tersebut, lalu klik tab Scaling.
Klik Manual scaling.
Tentukan jumlah instance container untuk layanan di kolom Number of instances.
Klik Create untuk layanan baru. Klik View diff & redeploy, lalu Deploy changes untuk layanan yang ada.
gcloud
Untuk menentukan penskalaan layanan baru, gunakan perintah deploy:
gcloud run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
Ganti kode berikut:
- SERVICE: nama layanan Anda.
- INSTANCE_COUNT: jumlah instance untuk layanan.
Tindakan ini akan menetapkan layanan ke penskalaan manual. Tentukan nilai
0untuk menonaktifkan layanan. Tentukan nilaiautountuk menggunakan perilaku penskalaan otomatis Cloud Run default. 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.
Tentukan penskalaan untuk layanan yang ada menggunakan perintah update berikut:
gcloud run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang ada, download konfigurasi YAML-nya:
gcloud run services describe SERVICE --format export > service.yaml
Update atribut
scalingModedanmanualInstanceCount:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
Ganti kode berikut:
- SERVICE: nama layanan Cloud Run Anda
- MODE:
manualuntuk penskalaan manual, atauautomaticuntuk perilaku penskalaan otomatis Cloud Run default. - INSTANCE_COUNT: jumlah instance yang Anda skalakan secara manual untuk layanan. Tentukan nilai
0untuk menonaktifkan layanan.
Buat atau update layanan menggunakan perintah berikut:
gcloud run services replace service.yaml
Perintah
gcloud run services replacesecara default menggunakan fileservice.yamljika ada.
REST API
Untuk memperbarui jumlah instance untuk layanan tertentu dalam penskalaan manual, 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 '{"scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
Ganti kode berikut:
- ACCESS_TOKEN: token akses yang valid untuk akun yang memiliki izin IAM untuk mengupdate layanan.
Misalnya, jika login ke
gcloud, Anda dapat mengambil token akses menggunakangcloud auth print-access-token. Dari dalam instance container Cloud Run, Anda dapat mengambil token akses menggunakan server metadata instance container. - MANUAL_INSTANCE_COUNT: jumlah instance untuk layanan.
Tindakan ini akan menetapkan layanan ke penskalaan manual. Tentukan nilai
0untuk menonaktifkan layanan. - SERVICE: nama layanan.
- REGION: region Google Cloud tempat layanan di-deploy.
- PROJECT_ID: Google Cloud Project ID
Untuk mengalihkan mode penskalaan dari manual ke otomatis, kirim permintaan PATCH ke endpoint service Cloud Run Admin API dan tetapkan kolom scalingMode ke AUTOMATIC.
Contohnya, jalankan perintah curl berikut ini:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"scalingMode": "AUTOMATIC","manualInstanceCount":null}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.scalingMode,scaling.manualInstanceCount
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 = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "INSTANCE_COUNT"
}
}
Ganti kode berikut:
- SERVICE_NAME: nama layanan Cloud Run Anda.
- REGION: region Google Cloud . Contohnya,
europe-west1. 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.- INSTANCE_COUNT: 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
Di konsol Google Cloud , buka halaman Services Cloud Run:
Klik layanan yang Anda minati untuk membuka panel Service details.
Klik tab Scaling untuk menemukan setelan penskalaan.
gcloud
Gunakan perintah berikut untuk melihat konfigurasi penskalaan saat ini untuk layanan:
gcloud 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
Jika Anda menonaktifkan layanan, permintaan apa pun yang saat ini sedang diproses akan diizinkan untuk diselesaikan.
Namun, permintaan lebih lanjut ke URL layanan akan gagal dengan error Service unavailable atau
Service disabled.
Permintaan ke revisi layanan yang hanya aktif karena tag traffic tidak akan terpengaruh karena revisi tersebut tidak dinonaktifkan.
Untuk menonaktifkan layanan, tetapkan penskalaan ke nol. Anda dapat menonaktifkan layanan menggunakan konsol Google Cloud , Google Cloud CLI, file YAML, atau API:
Konsol
Di konsol Google Cloud , buka halaman Services Cloud Run:
Klik layanan yang ingin Anda nonaktifkan untuk menampilkan panel detailnya, lalu klik tab Scaling.
Pilih Manual scaling.
Masukkan nilai
0(nol) di kolom berlabel Number of instances.Klik View diff & deploy, lalu Deploy changes.
gcloud
Untuk menonaktifkan layanan, gunakan perintah berikut untuk menetapkan penskalaan ke nol:
gcloud run services update SERVICE --scaling=0
Ganti SERVICE dengan nama layanan Anda.
YAML
Download konfigurasi YAML layanan Anda:
gcloud run services describe SERVICE --format export > service.yaml
Tetapkan atribut
manualInstanceCountke nol (0):apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
Ganti SERVICE dengan nama layanan Cloud Run Anda.
Buat atau update 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 '{"scaling":{"manualInstanceCount":0 }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
Ganti kode berikut:
- ACCESS_TOKEN: token akses yang valid untuk akun yang memiliki izin IAM untuk mengupdate layanan.
Misalnya, jika login ke
gcloud, Anda dapat mengambil token akses menggunakangcloud auth print-access-token. Dari dalam instance container Cloud Run, Anda dapat mengambil token akses menggunakan server metadata instance container. - SERVICE: nama layanan.
- REGION: region Google Cloud tempat layanan di-deploy.
- PROJECT_ID: 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"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "0"
}
}
Ganti kode berikut:
- SERVICE_NAME: nama layanan Cloud Run Anda.
- REGION: region Google Cloud . Contohnya,
europe-west1. 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
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 Cloud Scheduler pertama menetapkan layanan untuk melakukan penskalaan secara manual ke jumlah instance yang ditentukan selama jam kerja (09.00-17.00, Senin-Jumat). Tugas kedua menetapkan layanan untuk memperkecil skala ke jumlah instance yang ditentukan selama jam nonaktif.
Dalam contoh ini, kita menggunakan panduan memulai Cloud Run untuk memudahkan, tetapi Anda dapat menggunakan layanan pilihan Anda.
Untuk menyiapkan penskalaan manual berbasis jadwal:
Deploy layanan Anda menggunakan perintah berikut:
gcloud run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
Ganti kode berikut:
- SERVICE: nama layanan Cloud Run.
- REGION: region tempat layanan Cloud Run di-deploy.
- PROJECT_ID: Google Cloud Project ID
Konfigurasikan layanan Anda untuk penskalaan manual ke 10 instance menggunakan perintah berikut:
gcloud run services update SERVICE \ --region=REGION \ --scaling=10
Buat tugas Cloud Scheduler yang secara manual menskalakan ke jumlah instance layanan tertentu 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='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ganti kode berikut:
- REGION: region tempat layanan Cloud Run di-deploy.
- PROJECT_ID: Google Cloud Project ID
- INSTANCE_COUNT: jumlah instance yang ingin Anda skalakan—misalnya,
10. - PROJECT_NUMBER: Google Cloud nomor project.
Perintah ini membuat tugas Cloud Scheduler yang melakukan panggilan HTTP ke Cloud Run Admin API, yang menetapkan jumlah instance ke jumlah yang Anda tentukan. Contoh ini menggunakan akun layanan default Compute Engine
PROJECT_NUMBER-compute@developer.gserviceaccount.comuntuk tugas Cloud Scheduler. Anda dapat menggunakan akun layanan apa pun yang memiliki izin untuk mengupdate layanan Cloud Run.Buat tugas Cloud Scheduler yang memperkecil skala instance layanan secara manual selama jam nonaktif:
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='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ganti kode berikut:
- REGION: region tempat layanan Cloud Run di-deploy.
- PROJECT_ID: Google Cloud Project ID
- INSTANCE_COUNT: jumlah instance yang ingin Anda skalakan.
Untuk menonaktifkan layanan, tetapkan ini ke
0. - PROJECT_NUMBER: Google Cloud nomor project.
Perintah ini membuat tugas Cloud Scheduler yang melakukan panggilan HTTP ke Cloud Run Admin API, yang menetapkan instance penskalaan manual ke jumlah instance yang Anda tentukan. Menetapkan instance ke nol akan menonaktifkan layanan secara efektif, tetapi tidak menonaktifkan tugas Cloud Scheduler. Tugas tersebut akan terus berjalan dan akan mereset (dan mengaktifkan kembali) layanan ke jumlah instance yang lebih tinggi sesuai jadwal.