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

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

סקירה כללית

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

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

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

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

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

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

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

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

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

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

    • אם מוגדר מספר מינימלי של מופעים ברמת השינוי, המספר שצוין של מופעים יופעל, אבל הוא לא ייכלל בספירה הכוללת של מופעים ידניים של השירות. הגרסה לא תתבצע באופן אוטומטי.
    • אם לא מוגדר מספר מינימלי של מופעים ברמת השינוי, המערכת תרחיב את השינוי לכל היותר למופע אחד בתגובה לתנועה שנשלחת לכתובת ה-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. נכנסים לדף Services של Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

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

  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. נכנסים לדף Services של Cloud Run במסוף Google Cloud :

    כניסה ל-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. נכנסים לדף Services של Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

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

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

    תמונה

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