שינוי גודל ידני

בדף הזה מוסבר איך לשנות את קנה המידה של השירות באופן ידני. הוא גם מספק הוראות לתרחיש שימוש נפוץ: שינוי מספר המופעים על סמך לוח זמנים באמצעות משימות Cloud Scheduler ו-Cloud Run Admin API.

סקירה כללית

כברירת מחדל, ב-Cloud Run מתבצעת התאמה אוטומטית לעומס (automatic scaling) למספר מקסימלי של מכונות שצוין או שמוגדר כברירת מחדל, בהתאם לתעבורה ולשימוש במעבד. עם זאת, במקרים מסוימים, יכול להיות שתרצו להגדיר מספר ספציפי של מופעים באמצעות שינוי גודל ידני.

הגדלה ידנית של הקיבולת מאפשרת לכם להגדיר מספר ספציפי של מופעים, בלי קשר לתנועה או לניצול, ובלי שתצטרכו לפרוס מחדש. כל זה מאפשר לכם לכתוב לוגיקה משלכם להתאמת קנה מידה באמצעות מערכת חיצונית. כאן אפשר לראות דוגמה לכך.

הגדרות מינימום ומקסימום ברמת הגרסה ושינוי גודל ידני

אם מגדירים את השירות לשינוי גודל ידני, המערכת מתעלמת מכל הגדרה של מינימום ומקסימום ברמת הגרסה.

חלוקת תנועה לצורך שינוי גודל ידני

ברשימה הבאה מוסבר איך מוקצים מופעים כשמפצלים תנועה במסגרת שינוי גודל ידני. הנתונים האלה כוללים התנהגות של שינויים שכוללים רק תגי תנועה.

  • במהלך חלוקת התנועה, מוקצים לכל גרסה מופעים באופן יחסי, על סמך חלוקת התנועה, בדומה לפיצול תנועה עם מופעים מינימליים ברמת השירות.

  • אם מספר הגרסאות שקיבלות תנועה גדול ממספר המופעים שהוגדר ידנית, חלק מהגרסאות לא יכללו מופעים. תנועה שנשלחת לגרסאות האלה תקבל את אותה השגיאה כאילו הגרסאות הושבתו.

  • בכל הגרסאות שמקבלות תנועה בחלוקת תנועה, מופעלת השבתה של כל המקרים של מינימום ומקסימום של מופעים ברמת הגרסה.

  • אם גרסה פעילה רק בגלל תגי תנועה:

    • אם מוגדר מספר מינימלי של מופעים ברמת העדכון, המערכת תפעיל את מספר המופעים שצוין, אבל הם לא ייכללו בספירה הכוללת של מופעים ידניים של השירות. הגרסה לא תתבצע באופן אוטומטי.
    • אם לא מוגדר מספר מינימלי של מופעים ברמת הגרסה, המערכת תרחיב את הגרסה לכל היותר למופע אחד בתגובה לתנועה שנשלחת לכתובת ה-URL של התג.

התנהלות החיוב בשימוש בהתאמת קנה מידה ידנית

כשמשתמשים בהתאמת קנה מידה ידנית, התנהלות החיוב דומה להתנהלות כשמשתמשים בתכונה minimum instances.

כלומר, אם משתמשים בהתאמת קנה מידה ידנית ובחיוב לפי מופע, מופעים בלי פעילות שהותאמו ידנית יחויבו כמו מופעים פעילים.

אם משתמשים בהגדלה ידנית עם חיוב לפי בקשה, מופעים בלי פעילות שהוגדלו באופן ידני מחויבים כמופעים מינימליים בלי פעילות. פרטי החיוב המלאים מופיעים בדף המחירון.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לפריסת שירותי Cloud Run, אתם צריכים לבקש מהאדמין לתת לכם את תפקידי ה-IAM הבאים:

רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.

הגדרת שינוי גודל ידני

אפשר להגדיר את מצב שינוי הגודל באמצעות מסוף Google Cloud ,‏ Google Cloud CLI, קובץ YAML או API כשיוצרים שירות או מעדכנים עדכון:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

  2. אם מגדירים שירות חדש, לוחצים על Deploy container (פריסת מאגר) כדי להציג את הטופס Create service (יצירת שירות). אם אתם מגדירים שירות קיים, לוחצים על השירות כדי להציג את חלונית הפרטים שלו, ואז לוחצים על סמל העיפרון לצד שינוי גודל בפינה השמאלית העליונה של חלונית הפרטים.

  3. מאתרים את הטופס התאמת השירות (בשביל שירות חדש) או את הטופס עריכת ההתאמה (בשביל שירות קיים).

    תמונה

    בשדה Number of instances (מספר המופעים), מציינים את מספר מופעי המאגר של השירות.

  4. לוחצים על יצירה כדי ליצור שירות חדש או על שמירה כדי לשמור שירות קיים.

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

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים את המאפיינים 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.
  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    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:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

  2. לוחצים על השירות שרוצים לראות כדי לפתוח את החלונית פרטי השירות.

  3. הגדרת קנה המידה הנוכחית מוצגת בפינה השמאלית העליונה של חלונית הפרטים של השירות, אחרי התווית קנה מידה, לצד סמל העט.

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:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

  2. לוחצים על השירות שרוצים להשבית כדי להציג את חלונית הפרטים שלו, ואז לוחצים על סמל העיפרון לצד שינוי גודל בפינה השמאלית העליונה של חלונית הפרטים.

  3. מאתרים את הטופס עריכת שינוי הגודל ובוחרים באפשרות שינוי גודל ידני.

    תמונה

    בשדה עם התווית מספר המופעים, מזינים את הערך 0 (אפס).

  4. לוחצים על Save.

gcloud

כדי להשבית שירות, משתמשים בפקודה הבאה כדי להגדיר את קנה המידה לאפס:

gcloud run services update SERVICE --scaling=0

מחליפים את SERVICE בשם השירות.

YAML

  1. מורידים את הגדרות ה-YAML של השירות:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מגדירים את מאפיין 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.

  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    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 כדי לפשט את התהליך, אבל אתם יכולים להשתמש בשירות שתבחרו.

כדי להגדיר שינוי גודל ידני על סמך לוח זמנים:

  1. מפעילים את השירות באמצעות הפקודה הבאה:

    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 .
  2. מגדירים את השירות להרחבה ידנית ל-10 מופעים באמצעות הפקודה הבאה:

    gcloud run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. יוצרים משימה של 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.

  4. יצירת משימה ב-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. המשימות האלה ימשיכו לפעול ויאפסו את השירות (ויפעילו אותו מחדש) למספר מוגדל של מופעים לפי התזמון.