שינוי אוטומטי של מספר העובדים במאגרי עובדים על סמך מדדים של Prometheus

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

שירות ה-autoscaler של CREMA מבצע חישוב מבוסס-יחס באמצעות נתונים מ-Prometheus. שירות ההתאמה האוטומטית של קנה המידה משנה באופן דינמי את מספר המופעים כדי לוודא שלמאגר העובדים יש את כמות המשאבים הנכונה לעומס העבודה הנוכחי. ‫CREMA מחשב את ניצול המעבד של מאגר העובדים לאורך תקופת זמן ספציפית ומשווה אותו לסף שהגדרתם כדי להתאים את המופעים.

מטרות

במדריך הזה תלמדו:

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

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

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    הפעלת ממשקי ה-API

  7. מתקינים ומפעילים את ה-CLI של gcloud.
  8. עדכון רכיבים:
    gcloud components update
  9. מגדירים את משתני ההגדרה הבאים עבור CREMA שמשמשים במדריך הזה:
    export PROJECT_ID=PROJECT_ID
    export REGION=us-central1
    export CREMA_SA_NAME=crema-service-account
    export CONSUMER_SA_NAME=consumer-service-account
    export CONSUMER_WORKER_POOL_NAME=worker-pool-consumer
    export CREMA_SERVICE_NAME=my-crema-service
    מחליפים את PROJECT_ID במזהה הפרויקט. Google Cloud
  10. מגדירים את מזהה הפרויקט באמצעות הפקודה הבאה:
    gcloud config set project $PROJECT_ID
  11. החיובים על שירות ההרחבה של Cloud Run מבוססים על התדירות שבה מפעילים את ההרחבה. למידע נוסף, אפשר להשתמש במחשבון התמחור כדי להעריך את העלויות.

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

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

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

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

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

במדריך הזה נדרשים שני חשבונות שירות עם ההרשאות המינימליות הנדרשות לשימוש במשאבים שהוקצו:

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

    gcloud iam service-accounts create $CONSUMER_SA_NAME \
      --display-name="Consumer service account"
    
  • חשבון שירות CREMA: זהות לצורך שינוי גודל אוטומטי. מריצים את הפקודה הבאה כדי ליצור את חשבון השירות של CREMA:

    gcloud iam service-accounts create $CREMA_SA_NAME \
      --display-name="CREMA service account"
    

הענקת הרשאות נוספות לחשבונות השירות המותאמים אישית שלך

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

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

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/parametermanager.parameterViewer"
    
  2. נותנים לחשבון השירות של CREMA הרשאה לשנות את גודל מאגר העובדים:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/run.developer"
    
  3. נותנים לחשבון השירות של CREMA את התפקיד Service Account User:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/iam.serviceAccountUser"
    
  4. נותנים לחשבון השירות של CREMA הרשאה לצפייה במדדים:

     gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \
       --role="roles/monitoring.viewer"
    
  5. נותנים לחשבון השירות של CREMA הרשאה לכתוב מדדים:

     gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \
       --role="roles/monitoring.metricWriter"
    

פריסת מאגר עובדים של Cloud Run

פריסת מאגר עובדים עם 0 מופעים כדי ש-CREMA יוכל להגדיל את הקיבולת:

gcloud run worker-pools deploy $CONSUMER_WORKER_POOL_NAME \
  --image us-docker.pkg.dev/cloudrun/container/worker-pool:latest \
  --instances 0 \
  --region $REGION \
  --memory 4G \
  --cpu 4 \
  --service-account="$CONSUMER_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com"

פריסת שירות CREMA של התאמה אוטומטית לעומס

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

הגדרת התכונה לשינוי אוטומטי של גודל הקבוצה

במדריך הזה משתמשים ב-Parameter Manager כדי לאחסן את קובץ התצורה של CREMA בפורמט YAML.

  1. יוצרים פרמטר ב-Parameter Manager כדי לאחסן גרסאות של פרמטרים עבור CREMA:

    PARAMETER_ID=crema-config
    PARAMETER_REGION=global
    gcloud parametermanager parameters create $PARAMETER_ID --location=$PARAMETER_REGION --parameter-format=YAML
    
  2. בספריית השורש, יוצרים קובץ YAML‏, my-crema-config.yaml, כדי להגדיר את התצורה של שינוי הגודל האוטומטי. מגדירים את סף ההתאמה האוטומטית לעומס ל-50% ניצול מעבד (CPU):

    apiVersion: crema/v1
    kind: CremaConfig
    spec:
      pollingInterval: 30
      triggerAuthentications:
        - metadata:
            name: google-crema-auth
          spec:
            podIdentity:
              provider: gcp
      scaledObjects:
        - spec:
            scaleTargetRef:
              name: projects/PROJECT_ID/locations/us-central1/workerPools/worker-pool-consumer
            minReplicaCount: 1
            maxReplicaCount: 20
            triggers:
              - type: prometheus
                metadata:
                  serverAddress: https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus
                  threshold: "0.5"
                  query: |
                    histogram_quantile(
                      0.50,
                      sum by (le) (
                        increase(
                          run_googleapis_com:container_cpu_utilizations_bucket{
                            monitored_resource="cloud_run_worker_pool",
                            worker_pool_name="worker-pool-consumer",
                            location="us-central1",
                            project_id="PROJECT_ID"
                          }[2m]
                        )
                      )
                    )
                authenticationRef:
                  name: google-crema-auth
            advanced:
              horizontalPodAutoscalerConfig:
                behavior:
                  scaleDown:
                    stabilizationWindowSeconds: 300
    

    מחליפים את PROJECT_ID במזהה הפרויקט. Google Cloud

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

    LOCAL_YAML_CONFIG_FILE=my-crema-config.yaml
    PARAMETER_VERSION=1
    
    gcloud parametermanager parameters versions create $PARAMETER_VERSION \
      --location=$PARAMETER_REGION \
      --parameter=$PARAMETER_ID \
      --payload-data-from-file=$LOCAL_YAML_CONFIG_FILE
    
  4. מריצים את הפקודה הבאה כדי לוודא שהוספת הפרמטר הצליחה:

    gcloud parametermanager parameters versions list \
    --parameter=$PARAMETER_ID \
    --location=$PARAMETER_REGION
    

    אמור להופיע נתיב הפרמטר, כמו projects/PROJECT_ID/locations/global/parameters/crema-config/versions/1.

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

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

CREMA_CONFIG_PARAM_VERSION=projects/$PROJECT_ID/locations/$PARAMETER_REGION/parameters/$PARAMETER_ID/versions/$PARAMETER_VERSION
IMAGE=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0

gcloud run deploy $CREMA_SERVICE_NAME \
  --image=${IMAGE} \
  --region=${REGION} \
  --service-account="${CREMA_SA_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=${CREMA_CONFIG_PARAM_VERSION},OUTPUT_SCALER_METRICS=True"

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

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

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

[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 ...

ב-Cloud Run, כל הודעת יומן מתויגת עם הרכיב שפלט אותה.

הסרת המשאבים

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

מחיקת הפרויקט

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

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.

כדי למחוק את הפרויקט:

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת משאבי הדרכה

  1. מוחקים את שירות Cloud Run שפרסתם במדריך הזה. שירותי Cloud Run לא צוברים עלויות עד שהם מקבלים בקשות.

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

    gcloud run services delete SERVICE-NAME

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

    אפשר גם למחוק שירותים של Cloud Run מGoogle Cloud המסוף.

  2. מסירים את הגדרת ברירת המחדל של האזור gcloud שהוספתם במהלך ההגדרה של המדריך:

     gcloud config unset run/region
    
  3. מסירים את הגדרות הפרויקט:

     gcloud config unset project
    
  4. מחיקת משאבים אחרים Google Cloud שנוצרו במדריך הזה:

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