בדף הזה מוסבר איך להגדיר קנה מידה אוטומטי למאגרי עובדים ב-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. השירות הזה מבצע את הפעולות הבאות:
הוא מבצע סקר של מקורות אירועים חיצוניים, כמו נושאים ב-Apache Kafka או GitHub Runner Scaler.
מחשבת את מספר המופעים הנדרש על סמך הגדרות ה-YAML.
עדכון אוטומטי של מספר המופעים במאגר העובדים.
לפני שמתחילים
חשוב לוודא שהגדרתם פרויקט חדש ל-Cloud Run, כמו שמתואר בדף ההגדרה.
מפעילים את ממשקי ה-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הגדרת עומס עבודה מבוסס-אירועים או מבוסס-בקשות, כמו GitHub Runners או Apache Kafka. כדי לוודא שמקור עומס העבודה נתמך, אפשר לעיין ברשימת התאימות של CREMA במסמכי העזרה של Google Cloud GitHub.
כדי לחשב את העלויות המשוערות, אפשר לעיין במחשבון העלויות. החיובים על שירות ההרחבה של Cloud Run מבוססים על התדירות שבה מפעילים את ההרחבה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות בשביל להגדיר שינוי אוטומטי של גודל מאגר העובדים, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- מנהל מאגר של Artifact Registry (
roles/artifactregistry.repoAdmin) - עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor) - אדמין ב-Cloud Run (
roles/run.admin) - יצירת חשבונות שירות (
roles/iam.serviceAccountCreator) - אדמין ב-Secret Manager (
roles/secretmanager.admin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - צרכן שימוש בשירות (
roles/serviceusage.serviceUsageConsumer) - אדמין באחסון (
roles/storage.admin) - Parameter Manager Admin (
roles/parametermanager.admin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
יצירת חשבון שירות בהתאמה אישית
יוצרים חשבון שירות בהתאמה אישית עם ההרשאות המינימליות הנדרשות לשימוש במשאבים שהוקצו שנדרשים לעומס העבודה. כדי להגדיר את חשבון השירות:
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, פועלים לפי השלבים הבאים:
יוצרים פרמטר ב-Parameter Manager:
gcloud parametermanager parameters create PARAMETER_ID --location=global --parameter-format=YAMLמחליפים את PARAMETER_ID בשם הפרמטר.
מעלים את קובץ ה-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.
- PARAMETER_VERSION: המזהה שרוצים להקצות לגרסת הפרמטר, לדוגמה,
מידע נוסף זמין במאמר בנושא יצירת פרמטר.
מתן הרשאות נוספות לחשבון השירות של CREMA
כדי לשנות את גודל מאגר העובדים שציינתם בהגדרת ה-YAML, צריך להעניק את ההרשאות הבאות בחשבון השירות המותאם אישית:
נותנים לחשבון השירות של CREMA הרשאה לקרוא מ-Parameter Manager:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME \ --role="roles/parametermanager.parameterViewer"מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
CREMA_SERVICE_ACCOUNT_NAME: השם של חשבון השירות של CREMA.
מקצים לחשבון השירות של 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: האזור של מאגר העובדים.
נותנים לחשבון השירות של CREMA הרשאה לכתוב מדדים:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/monitoring.metricWriter"נותנים לחשבון השירות של 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.