שינוי אוטומטי של גודל מאגרי העובדים באמצעות מדדים חיצוניים

בדף הזה מוסבר איך להגדיר קנה מידה אוטומטי למאגרי עובדים ב-Cloud Run באמצעות מדדים חיצוניים מבוססי-אירועים. התכונה Cloud Run External Metrics Autoscaling (CREMA)‎ מאפשרת את הפונקציונליות הזו באמצעות Kubernetes-based Event Driven Autoscaling (KEDA) כדי לשנות את גודל עומסי העבודה בהתאם למקורות אירועים חיצוניים.

למידע על סוגי סקיילרים נתמכים ועל תאימות ל-Cloud Run, אפשר לעיין במאמר Cloud Run External Metrics Autoscaling (CREMA) במאמרי העזרה של Google Cloud GitHub.

מידע על שירות ההתאמה האוטומטית של קנה המידה

כדי להגדיר שינוי אוטומטי של גודל מאגרי ה-worker, צריך לפרוס את שירות המידרוג האוטומטי של CREMA ב-Cloud Run. השירות הזה מבצע את הפעולות הבאות:

  1. הוא מבצע סקר של מקורות אירועים חיצוניים, כמו נושאים ב-Apache Kafka או GitHub Runner Scaler.

  2. מחשבת את מספר המופעים הנדרש על סמך הגדרות ה-YAML.

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

לפני שמתחילים

  1. חשוב לוודא שהגדרתם פרויקט חדש ל-Cloud Run, כמו שמתואר בדף ההגדרה.

  2. מפעילים את ממשקי ה-API‏ Artifact Registry,‏ Cloud Build,‏ Cloud Run Admin API,‏ Secret Manager ו-Parameter Manager:

    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        run.googleapis.com \
        secretmanager.googleapis.com \
        parametermanager.googleapis.com
    
  3. הגדרת עומס עבודה מבוסס-אירועים או מבוסס-בקשות, כמו GitHub Runners או Apache Kafka. כדי לוודא שמקור עומס העבודה נתמך, אפשר לעיין ברשימת התאימות של CREMA במסמכי העזרה של Google Cloud GitHub.

  4. כדי לחשב את העלויות המשוערות, אפשר לעיין במחשבון העלויות. החיובים על שירות ההרחבה של Cloud Run מבוססים על התדירות שבה מפעילים את ההרחבה.

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

כדי לקבל את ההרשאות שדרושות בשביל להגדיר שינוי אוטומטי של גודל מאגר העובדים, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

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

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

יצירת חשבון שירות בהתאמה אישית

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

gcloud iam service-accounts create CREMA_SERVICE_ACCOUNT \
  --display-name="CREMA Service Account"

מחליפים את CREMA_SERVICE_ACCOUNT בשם שרוצים לתת לחשבון השירות המותאם אישית, לדוגמה crema-service-account. הפקודה הזו יוצרת חשבון שירות בפורמט crema-service-account@example-project.iam.gserviceaccount.com.

יצירת קובץ ההגדרות של CREMA

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

דוגמה ל-YAML

בדוגמה הבאה מוצג קובץ התצורה להרחבת מאגר עובדים של Cloud Run ‏ (example-workerpool) באמצעות מדדי GitHub Runner. הוא משתמש בסוד של Secret Manager בשם github_runner_token כדי לבצע אימות מול GitHub לצורך קריאת המדדים.

  apiVersion: crema/v1
  kind: CremaConfig
  metadata:
    name: gh-demo
  spec:
    triggerAuthentications:
      - metadata:
          name: github-trigger-auth
        spec:
          gcpSecretManager:
            secrets:
              - parameter: personalAccessToken
                id: github_runner_token
                version: latest
    scaledObjects:
      - spec:
          scaleTargetRef:
            name: projects/example-project/locations/us-central1/workerpools/example-workerpool
          triggers:
            - type: github-runner
              name: example-runner
              metadata:
                owner: repo-owner
                runnerScope: repo
                repos: repo-name
                targetWorkflowQueueLength: 1
              authenticationRef:
                name: github-trigger-auth
          advanced:
            horizontalPodAutoscalerConfig:
              behavior:
                scaleDown:
                  stabilizationWindowSeconds: 10
                  policies:
                    - type: Pods
                      value: 100
                      periodSeconds: 10
                scaleUp:
                  stabilizationWindowSeconds: 10
                  policies:
                    - type: Pods
                      value: 2
                      periodSeconds: 10
        pollingInterval: 10

הגדרות ה-YAML כוללות את הפרמטרים הכלליים הבאים:

  • triggerAuthentications: קובע איך CREMA מאמת את השירות החיצוני, למשל באמצעות אסימון שמאוחסן ב-Secret Manager.

  • scaledObjects: מגדיר את המיפוי בין מאגר העובדים של Cloud Run לבין משאב המדדים החיצוני. הפרמטר הזה כולל:

    • scaleTargetRef: שירותי Cloud Run או מאגרי העובדים שרוצים לשנות את קנה המידה שלהם.

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

  • pollingInterval: קובע את המרווח (בשניות) שבו CREMA מרענן את המדדים שלו. אם לא מציינים את הפרמטר הזה, CREMA לא מבצעת סקר באופן אוטומטי, וצריך להפעיל בדיקת שינוי גודל באופן ידני באמצעות בקשת POST לשירות.

מידע נוסף על הגדרת מדדי תצורה בסיסיים ומתקדמים זמין במאמר הפניה להגדרות ב Google Cloud מאמרי העזרה של GitHub.

רשימה מלאה של הגדרות התצורה של סקלרים תואמים זמינה במאמר בנושא Scalers בתיעוד של KEDA.

שמירת ההגדרה של CREMA ב-Parameter Manager

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

  1. יוצרים פרמטר ב-Parameter Manager:

    gcloud parametermanager parameters create PARAMETER_ID --location=global  --parameter-format=YAML
    

    מחליפים את PARAMETER_ID בשם הפרמטר.

  2. מעלים את קובץ ה-YAML המקומי כגרסה חדשה של פרמטר:

    gcloud parametermanager parameters versions create PARAMETER_VERSION \
      --location=global \
      --parameter=PARAMETER_ID \
      --payload-data-from-file=LOCAL_YAML_CONFIG_FILE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PARAMETER_VERSION: המזהה שרוצים להקצות לגרסת הפרמטר, לדוגמה, 1.
    • LOCAL_YAML_CONFIG_FILE: הנתיב לקובץ ההגדרות בפורמט YAML.

מידע נוסף זמין במאמר בנושא יצירת פרמטר.

מתן הרשאות נוספות לחשבון השירות של CREMA

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

  1. נותנים לחשבון השירות של CREMA הרשאה לקרוא מ-Parameter Manager:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME \
      --role="roles/parametermanager.parameterViewer"
    

    מחליפים את מה שכתוב בשדות הבאים:

  2. מקצים לחשבון השירות של CREMA את התפקיד roles/run.developer במאגר העובדים. כך שירות CREMA יכול לשנות את מספר המכונות במאגר העובדים בתגובה לשינויים במדדים:

    WORKER_POOL_NAME=WORKER_POOL_NAME
    WORKER_POOL_REGION=WORKER_POOL_REGION
    gcloud run worker-pools add-iam-policy-binding $WORKER_POOL_NAME \
      --region=$WORKER_POOL_REGION \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
      --role="roles/run.developer"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • WORKER_POOL_NAME: השם של מאגר העובדים.
    • WORKER_POOL_REGION: האזור של מאגר העובדים.
  3. נותנים לחשבון השירות של CREMA הרשאה לכתוב מדדים:

     gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
       --role="roles/monitoring.metricWriter"
    
  4. נותנים לחשבון השירות של CREMA את התפקיד Service Account User:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
      --role="roles/iam.serviceAccountUser"
    

פריסת השירות כדי להרחיב את עומסי העבודה

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

gcloud run deploy SERVICE_NAME\
  --image=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0 \
  --region=SERVICE_REGION \
  --service-account="CREMA_SERVICE_ACCOUNT_NAME" \
  --no-allow-unauthenticated \
  --no-cpu-throttling \
  --base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/java25 \
  --labels=created-by=crema \
  --set-env-vars="CREMA_CONFIG=projects/PROJECT_ID/locations/PARAMETER_REGION/parameters/PARAMETER_ID/versions/PARAMETER_VERSION,OUTPUT_SCALER_METRICS=True"

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE_NAME: השם של שירות ההתאמה האוטומטית שלכם.

  • SERVICE_REGION: האזור של השירות.

  • CREMA_SERVICE_ACCOUNT_NAME: השם של חשבון השירות של CREMA.

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

  • PARAMETER_REGION, PARAMETER_ID ו-PARAMETER_VERSION: ערכים ששמרתם ב-Parameter Manager.

אפשר גם לפרוס את שירות CREMA באמצעות קובץ אימג' של קונטיינר מותאם אישית שיוצרים מקוד המקור באמצעות Cloud Build.

בדיקת שירות CREMA

כדי לוודא ששירות ההתאמה האוטומטית לעומס פועל בצורה תקינה, צריך לבדוק את הכרטיסייה Logs של שירות Cloud Run.

בכל פעם שהמדדים מתעדכנים, יומני השירות צריכים לכלול את הרשומות הבאות:

כל הודעה ביומן מסומנת בתווית של הרכיב שיצר אותה.

[INFO] [METRIC-PROVIDER] Starting metric collection cycle
[INFO] [METRIC-PROVIDER] Successfully fetched scaled object metrics ...
[INFO] [METRIC-PROVIDER] Sending scale request ...
[INFO] [SCALER] Received ScaleRequest ...
[INFO] [SCALER] Current instances ...
[INFO] [SCALER] Recommended instances ...

המאמרים הבאים

  • כאן מוסבר איך להשתמש ב-GitHub runners באירוח עצמי במאגרי עובדים כדי להריץ את תהליכי העבודה שמוגדרים במאגר GitHub, ואיך לשנות את גודל מאגר העובדים באמצעות CREMA.

  • מידע נוסף על מאגרי עובדים ב-Cloud Run