בדף הזה מוסבר איך לשנות את קנה המידה של השירות באופן ידני. הוא גם מספק הוראות לתרחיש שימוש נפוץ: שינוי מספר המופעים על סמך לוח זמנים באמצעות משימות Cloud Scheduler ו-Cloud Run Admin API.
סקירה כללית
כברירת מחדל, ב-Cloud Run מתבצעת התאמה אוטומטית לעומס (automatic scaling) למספר מקסימלי של מכונות שצוין או שמוגדר כברירת מחדל, בהתאם לתעבורה ולשימוש במעבד. עם זאת, במקרים מסוימים, יכול להיות שתרצו להגדיר מספר ספציפי של מופעים באמצעות שינוי גודל ידני.
הגדלה ידנית של הקיבולת מאפשרת לכם להגדיר מספר ספציפי של מופעים, בלי קשר לתנועה או לניצול, ובלי שתצטרכו לפרוס מחדש. כל זה מאפשר לכם לכתוב לוגיקה משלכם להתאמת קנה מידה באמצעות מערכת חיצונית. כאן אפשר לראות דוגמה לכך.
הגדרות מינימום ומקסימום ברמת הגרסה ושינוי גודל ידני
אם מגדירים את השירות לשינוי גודל ידני, המערכת מתעלמת מכל הגדרה של מינימום ומקסימום ברמת הגרסה.
חלוקת תנועה לצורך שינוי גודל ידני
ברשימה הבאה מוסבר איך מוקצים מופעים כשמפצלים תנועה במסגרת שינוי גודל ידני. הנתונים האלה כוללים התנהגות של שינויים שכוללים רק תגי תנועה.
במהלך חלוקת התנועה, מוקצים לכל גרסה מופעים באופן יחסי, על סמך חלוקת התנועה, בדומה לפיצול תנועה עם מופעים מינימליים ברמת השירות.
אם מספר הגרסאות שקיבלות תנועה גדול ממספר המופעים שהוגדר ידנית, חלק מהגרסאות לא יכללו מופעים. תנועה שנשלחת לגרסאות האלה תקבל את אותה השגיאה כאילו הגרסאות הושבתו.
בכל הגרסאות שמקבלות תנועה בחלוקת תנועה, מופעלת השבתה של כל המקרים של מינימום ומקסימום של מופעים ברמת הגרסה.
אם גרסה פעילה רק בגלל תגי תנועה:
- אם מוגדר מספר מינימלי של מופעים ברמת העדכון, המערכת תפעיל את מספר המופעים שצוין, אבל הם לא ייכללו בספירה הכוללת של מופעים ידניים של השירות. הגרסה לא תתבצע באופן אוטומטי.
- אם לא מוגדר מספר מינימלי של מופעים ברמת הגרסה, המערכת תרחיב את הגרסה לכל היותר למופע אחד בתגובה לתנועה שנשלחת לכתובת ה-URL של התג.
התנהלות החיוב בשימוש בהתאמת קנה מידה ידנית
כשמשתמשים בהתאמת קנה מידה ידנית, התנהלות החיוב דומה להתנהלות כשמשתמשים בתכונה minimum instances.
כלומר, אם משתמשים בהתאמת קנה מידה ידנית ובחיוב לפי מופע, מופעים בלי פעילות שהותאמו ידנית יחויבו כמו מופעים פעילים.
אם משתמשים בהגדלה ידנית עם חיוב לפי בקשה, מופעים בלי פעילות שהוגדלו באופן ידני מחויבים כמופעים מינימליים בלי פעילות. פרטי החיוב המלאים מופיעים בדף המחירון.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לפריסת שירותי Cloud Run, אתם צריכים לבקש מהאדמין לתת לכם את תפקידי ה-IAM הבאים:
-
Cloud Run Developer (
roles/run.developer) בשירות Cloud Run -
משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות -
Artifact Registry Reader (
roles/artifactregistry.reader) במאגר Artifact Registry של קובץ האימג' של הקונטיינר שנפרס (אם רלוונטי)
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
הגדרת שינוי גודל ידני
אפשר להגדיר את מצב שינוי הגודל באמצעות מסוף Google Cloud , Google Cloud CLI, קובץ YAML או API כשיוצרים שירות או מעדכנים עדכון:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
אם מגדירים שירות חדש, לוחצים על Deploy container (פריסת מאגר) כדי להציג את הטופס Create service (יצירת שירות). אם אתם מגדירים שירות קיים, לוחצים על השירות כדי להציג את חלונית הפרטים שלו, ואז לוחצים על סמל העיפרון לצד שינוי גודל בפינה השמאלית העליונה של חלונית הפרטים.
מאתרים את הטופס התאמת השירות (בשביל שירות חדש) או את הטופס עריכת ההתאמה (בשביל שירות קיים).
בשדה Number of instances (מספר המופעים), מציינים את מספר מופעי המאגר של השירות.
לוחצים על יצירה כדי ליצור שירות חדש או על שמירה כדי לשמור שירות קיים.
gcloud
כדי לציין את קנה המידה של שירות חדש, משתמשים בפקודת הפריסה:
gcloud run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- INSTANCE_COUNT: מספר המופעים של השירות.
הפעולה הזו מגדירה את השירות כהגדלה ידנית של הקיבולת. כדי להשבית את השירות, מציינים את הערך
0. מציינים ערך שלautoכדי להשתמש בהתנהגות ברירת המחדל של שינוי גודל אוטומטי ב-Cloud Run. - IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
כדי לציין את קנה המידה של שירות קיים, משתמשים בפקודת העדכון הבאה:
gcloud run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מעדכנים את המאפיינים
scalingModeו-manualInstanceCount:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run
- MODE:
manualלהגדרה של שינוי גודל ידני, אוautomaticלהתנהגות ברירת המחדל של התאמה אוטומטית לעומס ב-Cloud Run. - INSTANCE_COUNT: מספר המופעים שאתם משנים את הגודל שלהם באופן ידני בשביל השירות. כדי להשבית את השירות, מציינים את הערך
0.
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
API ל-REST
כדי לעדכן את מספר המופעים של שירות מסוים בהגדלת קיבולת ידנית, שולחים בקשת HTTP PATCH לנקודת הקצה service של Cloud Run Admin API.
לדוגמה, שימוש ב-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
מחליפים את מה שכתוב בשדות הבאים:
- ACCESS_TOKEN: אסימון גישה תקף לחשבון שיש לו הרשאות IAM לעדכון שירות.
לדוגמה, אם אתם מחוברים ל-
gcloud, אתם יכולים לאחזר טוקן גישה באמצעותgcloud auth print-access-token. מתוך מופע קונטיינר של Cloud Run, אפשר לאחזר אסימון גישה באמצעות שרת המטא-נתונים של מופע הקונטיינר. - MANUAL_INSTANCE_COUNT: מספר המופעים של השירות.
הפעולה הזו מגדירה את השירות כהגדלה ידנית של הקיבולת. כדי להשבית את השירות, מציינים את הערך
0. - SERVICE: שם השירות.
- REGION: Google Cloud האזור שבו השירות פרוס.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
כדי לשנות את מצב שינוי הגודל מידני לאוטומטי, שולחים בקשת PATCH לנקודת הקצה service של Cloud Run Admin API ומגדירים את השדה scalingMode לערך AUTOMATIC.
לדוגמה, מריצים את הפקודה הבאה curl:
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
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את השורות הבאות למשאבgoogle_cloud_run_v2_service בקובץ התצורה של Terraform: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"
}
}
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של שירות Cloud Run.
- REGION: Google Cloud האזור. לדוגמה:
europe-west1. - IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - INSTANCE_COUNT: מספר המופעים שאתם משנים את הגודל שלהם באופן ידני בשביל השירות. מספר המקרים הזה מחולק בין כל הגרסאות עם תנועה שצוינה על סמך אחוז התנועה שהן מקבלות.
הצגת הגדרות קנה המידה של השירות
כדי לראות את מופעי ההגדרות של שינוי הגודל בשירות Cloud Run:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
לוחצים על השירות שרוצים לראות כדי לפתוח את החלונית פרטי השירות.
הגדרת קנה המידה הנוכחית מוצגת בפינה השמאלית העליונה של חלונית הפרטים של השירות, אחרי התווית קנה מידה, לצד סמל העט.
gcloud
כדי לראות את הגדרות קנה המידה הנוכחיות של השירות, משתמשים בפקודה הבאה:
gcloud run services describe SERVICE
מחליפים את SERVICE בשם השירות.
חפשו את השדה Scaling: Manual (Instances: ) בחלק העליון של הטקסט שמוחזר מה-describe.
YAML
משתמשים בפקודה הבאה כדי להוריד את הגדרות ה-YAML של השירות:
gcloud run services describe SERVICE --format export > service.yaml
הגדרת שינוי הגודל מופיעה במאפיינים scalingMode ו-manualInstanceCount.
השבתת שירות
כשמשביתים שירות, כל הבקשות שנמצאות כרגע בתהליך עיבוד יקבלו אישור להשלמת התהליך.
עם זאת, כל בקשה נוספת לכתובת ה-URL של השירות תיכשל עם השגיאה Service unavailable או Service disabled.
בקשות לשינויים בשירות שפעילים רק בגלל תגי תנועה לא מושפעות, כי השינויים האלה לא מושבתים.
כדי להשבית שירות, מגדירים את קנה המידה לאפס. אפשר להשבית שירות באמצעות Google Cloud המסוף, Google Cloud CLI, קובץ YAML או API:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
לוחצים על השירות שרוצים להשבית כדי להציג את חלונית הפרטים שלו, ואז לוחצים על סמל העיפרון לצד שינוי גודל בפינה השמאלית העליונה של חלונית הפרטים.
מאתרים את הטופס עריכת שינוי הגודל ובוחרים באפשרות שינוי גודל ידני.
בשדה עם התווית מספר המופעים, מזינים את הערך
0(אפס).לוחצים על Save.
gcloud
כדי להשבית שירות, משתמשים בפקודה הבאה כדי להגדיר את קנה המידה לאפס:
gcloud run services update SERVICE --scaling=0
מחליפים את SERVICE בשם השירות.
YAML
מורידים את הגדרות ה-YAML של השירות:
gcloud run services describe SERVICE --format export > service.yaml
מגדירים את מאפיין
manualInstanceCountלאפס (0):apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
מחליפים את SERVICE בשם של שירות Cloud Run.
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
API ל-REST
כדי להשבית שירות, שולחים בקשת HTTP PATCH לנקודת הקצה service של Cloud Run Admin API.
לדוגמה, שימוש ב-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
מחליפים את מה שכתוב בשדות הבאים:
- ACCESS_TOKEN: אסימון גישה תקף לחשבון שיש לו הרשאות IAM לעדכון שירות.
לדוגמה, אם אתם מחוברים ל-
gcloud, אתם יכולים לאחזר טוקן גישה באמצעותgcloud auth print-access-token. מתוך מופע קונטיינר של Cloud Run, אפשר לאחזר אסימון גישה באמצעות שרת המטא-נתונים של מופע הקונטיינר. - SERVICE: שם השירות.
- REGION: Google Cloud האזור שבו השירות פרוס.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
Terraform
כדי להשבית שירות, מגדירים את המאפיין manual_instance_count לאפס (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"
}
}
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של שירות Cloud Run.
- REGION: Google Cloud האזור. לדוגמה:
europe-west1. - IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
דוגמה להגדלת נפח אחסון לפי לוח זמנים
תרחיש נפוץ לשינוי גודל ידני הוא שינוי מספר המופעים על סמך לוח זמנים מוגדר מראש. בדוגמה הזו, אנחנו משתמשים ב-Cloud Scheduler כדי לתזמן שתי משימות, שכל אחת מהן מפעילה את Cloud Run Admin API כדי לשנות את מספר המופעים. המשימה הראשונה ב-Cloud Scheduler מגדירה את השירות כך שהוא יתבצע באופן ידני בהתאם למספר מופעים שצוין במהלך שעות הפעילות (9:00 עד 17:00, שני עד שישי). המשימה השנייה מגדירה את השירות כך שהוא יצטמצם למספר מסוים של מופעים בשעות לא פעילות.
בדוגמה הזו, אנחנו משתמשים במדריך למתחילים של Cloud Run כדי לפשט את התהליך, אבל אתם יכולים להשתמש בשירות שתבחרו.
כדי להגדיר שינוי גודל ידני על סמך לוח זמנים:
מפעילים את השירות באמצעות הפקודה הבאה:
gcloud run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run.
- REGION: האזור שבו נפרס שירות Cloud Run.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
מגדירים את השירות להרחבה ידנית ל-10 מופעים באמצעות הפקודה הבאה:
gcloud run services update SERVICE \ --region=REGION \ --scaling=10
יוצרים משימה של Cloud Scheduler שמשנה את קנה המידה באופן ידני למספר מסוים של מופעי שירות בשעות הפעילות:
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
מחליפים את מה שכתוב בשדות הבאים:
- REGION: האזור שבו נפרס שירות Cloud Run.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- INSTANCE_COUNT: מספר המופעים שאליהם רוצים לשנות את גודל הקבוצה, לדוגמה
10. - PROJECT_NUMBER: Google Cloud מספר הפרויקט.
הפקודה הזו יוצרת משימה ב-Cloud Scheduler שמבצעת קריאת HTTP ל-Cloud Run Admin API, ומגדירה את מספר המופעים למספר שצוין. בדוגמה נעשה שימוש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine
PROJECT_NUMBER-compute@developer.gserviceaccount.comעבור משימות Cloud Scheduler. אפשר להשתמש בכל חשבון שירות שיש לו הרשאות לעדכן שירותים של Cloud Run.יצירת משימה ב-Cloud Scheduler שמקטינה באופן ידני את מספר המופעים של השירות בשעות לא פעילות:
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
מחליפים את מה שכתוב בשדות הבאים:
- REGION: האזור שבו נפרס שירות Cloud Run.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- INSTANCE_COUNT: מספר המופעים שרוצים לשנות את הגודל שלהם.
כדי להשבית את השירות, מגדירים את הערך
0. - PROJECT_NUMBER: Google Cloud מספר הפרויקט.
הפקודה הזו יוצרת משימה ב-Cloud Scheduler שמבצעת קריאת HTTP ל-Cloud Run Admin API, ומגדירה את מספר המופעים של קנה מידה ידני למספר המופעים שציינתם. הגדרת המופעים לאפס משביתה את השירות, אבל לא את העבודות של Cloud Scheduler. המשימות האלה ימשיכו לפעול ויאפסו את השירות (ויפעילו אותו מחדש) למספר מוגדל של מופעים לפי התזמון.