בדף הזה מוסבר איך לשנות את קנה המידה של השירות באופן ידני. בנוסף, מוסבר איך לשנות את מספר המכונות לפי לוח זמנים באמצעות משימות של Cloud Scheduler ו-Cloud Run Admin API.
סקירה כללית
התאמה ידנית מאפשרת להגדיר מספר ספציפי של מכונות, בלי קשר לתנועה או לניצול, ובלי צורך בפריסה מחדש. כל זה מאפשר לכם לכתוב לוגיקת התאמה לעומס משלכם באמצעות מערכת חיצונית. לדוגמה, ראו שינוי קנה מידה מבוסס-לוח זמנים.
כברירת מחדל, ב-Cloud Run מתבצעת הרחבה אופקית אוטומטית למספר מקסימלי של מכונות, שמוגדר כברירת מחדל או שאתם מציינים, בהתאם לתעבורת הנתונים, למעבד (CPU) או ליעדים מותאמים אישית של ניצול המעבד או של בו-זמניות. עם זאת, בתרחישים מסוימים, יכול להיות שתרצו להגדיר מספר ספציפי של מכונות באמצעות התאמה ידנית לעומס.
הגדרות מינימום ומקסימום ברמת הגרסה ושינוי ידני של קנה המידה
אם מגדירים את השירות להתאמה ידנית לעומס, המערכת מתעלמת מהגדרות המינימום והמקסימום של המכונות ברמת הגרסה.
חלוקת תנועה להתאמה ידנית לעומס (scaling)
ברשימה הבאה מתואר איך המכונות מוקצות כשמפצלים את התנועה בהתאמה ידנית לעומס. זה כולל התנהגות של גרסאות עם תגי תנועה בלבד.
במהלך חלוקת התנועה, לכל גרסה מוקצות מכונות באופן יחסי, על סמך חלוקת התנועה, בדומה לחלוקת התנועה עם מספר מינימלי של מכונות ברמת השירות.
אם מספר הגרסאות שמקבלות תנועה חורג ממספר המכונות הידני, לחלק מהגרסאות לא יהיו מכונות. תנועה שנשלחת לגרסאות האלה תגרום לאותה שגיאה כמו במקרה שהגרסאות מושבתות.
בכל הגרסאות שמקבלות תנועה בחלוקת תנועה, כל המכסות המינימליות והמקסימליות של המכונות ברמת הגרסה מושבתות.
אם גרסה פעילה רק בגלל תגי תנועה:
- אם מוגדר מספר מינימלי של מכונות ברמת הגרסה, מספר המכונות שצוין יופעל אבל לא ייספר במספר הכולל של המכונות הידניות בשירות. הגרסה לא תותאם אוטומטית לעומס.
- אם לא מוגדר מספר מינימלי של מכונות ברמת הגרסה, הגרסה תורחב אופקית בהתאם לעומס (scale out) למכונה אחת לכל היותר, בתגובה לתנועה שנשלחת לכתובת ה-URL של התג.
אופן החיוב כשמשתמשים בהתאמה ידנית לעומס (scaling)
כשמשתמשים בהתאמה ידנית לעומס, אופן החיוב דומה לאופן החיוב כשמשתמשים בתכונה מספר מינימלי של מכונות.
כלומר, עם התאמה ידנית לעומס וחיוב מבוסס-מכונה, מכונות לא פעילות שהותאמו ידנית לעומס מחויבות כמכונות פעילות.
אם אתם משתמשים בהתאמה ידנית לעומס (scaling) עם חיוב מבוסס-בקשות, מכונות במצב חוסר פעילות שהותאמו ידנית לעומס מחויבות כמכונות מינימליות במצב חוסר פעילות. לפרטי חיוב מלאים, עיינו בדף התמחור.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לפריסת שירותי Cloud Run, אתם צריכים לבקש מהאדמין לתת לכם את התפקידים הבאים ב-IAM:
- מפתח ב-Cloud Run (
roles/run.developer) בשירות Cloud Run - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות - קריאה מ-Artifact Registry (
roles/artifactregistry.reader) במאגר Artifact Registry של קובץ האימג' של הקונטיינר שנפרס (אם רלוונטי)
רשימה של תפקידים והרשאות ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתממשק עם ממשקי API שלGoogle Cloud , כמו ספריות הלקוח ב-Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על הקצאת תפקידים זמין במאמרים הרשאות פריסה וניהול הגישה.
הגדרה של התאמה ידנית לעומס
אתם יכולים להגדיר את מצב ההתאמה לעומס באמצעות מסוף Google Cloud , Google Cloud CLI, קובץ YAML או API כשאתם יוצרים שירות או מעדכנים גרסה:
המסוף
נכנסים ל-Cloud Run במסוף Google Cloud :
בתפריט הניווט של Cloud Run, לוחצים על Services:
אם אתם מגדירים שירות חדש, לוחצים על Deploy container וממלאים את דף הגדרות השירות הראשוני.
אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על הכרטיסייה Scaling.
לוחצים על Manual scaling.
בשדה Number of instances, מציינים את מספר המכונות של מאגרים בשביל השירות.
כדי ליצור שירות חדש, לוחצים על יצירה. לוחצים על View diff & redeploy ואז על Deploy changes בשירות קיים.
gcloud
כדי להגדיר את קנה המידה של שירות חדש, משתמשים בפקודת הפריסה:
gcloud run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: שם השירות.
- INSTANCE_COUNT: מספר המכונות של השירות.
הפעולה הזו מגדירה את השירות להתאמה ידנית לעומס. כדי להשבית את השירות, צריך לציין את הערך
0. כדי להשתמש בהתנהגות ברירת המחדל של התאמה אוטומטית לעומס ב-Cloud Run, מציינים את הערךauto. -
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
כברירת מחדל, הפקודה
gcloud run services replaceמשתמשת בקובץservice.yamlאם הוא קיים.
API בארכיטקטורת REST
כדי לעדכן את מספר המכונות של שירות מסוים בהתאמה ידנית לעומס, שולחים בקשת HTTP מסוג PATCH לנקודת הקצה (endpoint) של 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 לנקודת הקצה (endpoint) של 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: מספר המכונות שאתם משנים את קנה המידה שלהן באופן ידני בשביל השירות. מספר המופעים הזה מחולק בין כל הגרסאות עם תנועה שצוינה, על סמך אחוז התנועה שהן מקבלות.
הצגת הגדרת ההתאמה לעומס (scaling) של השירות
כדי לראות את המכונות של הגדרת ההתאמה לעומס בשירות Cloud Run:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
לוחצים על השירות הרצוי כדי לפתוח את החלונית Service details.
לוחצים על הכרטיסייה Scaling (התאמה לעומס) כדי למצוא את הגדרות ההתאמה לעומס.
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:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
לוחצים על השירות שרוצים להשבית כדי להציג את חלונית הפרטים שלו, ואז לוחצים על הכרטיסייה Scaling.
בוחרים באפשרות Manual scaling.
מזינים את הערך
0(אפס) בשדה מספר המכונות.לוחצים על הצגת ההבדלים ופריסה ואז על פריסת השינויים.
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 לנקודת הקצה (endpoint) של 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, שני עד שישי). המשימה השנייה מגדירה את השירות לצמצום אנכית בהתאם לעומס (scale down) למספר מסוים של מכונות בשעות שבהן המסך יכבה אוטומטית.
בדוגמה הזו אנחנו משתמשים במדריך למתחילים של 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 .
מגדירים את השירות להתאמה ידנית לעומס (scaling) ל-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, ומגדירה את המכונות של ההתאמה הידנית למספר המכונות שציינתם. הגדרת המכונות ל-0 משביתה את השירות, אבל לא את המשימות של Cloud Scheduler. המשימות האלה ממשיכות לפעול, והן יאפסו (ויפעילו מחדש) את השירות למספר גדול יותר של מכונות, בהתאם ללוח הזמנים.