במדריך הזה נסביר איך להשתמש ב-GitHub runners באירוח עצמי במאגרי עובדים כדי להריץ את תהליכי העבודה שמוגדרים במאגר GitHub, ואיך לשנות את גודל מאגר העובדים באמצעות שינוי אוטומטי של גודל מאגר העובדים על סמך מדדים חיצוניים של Cloud Run (CREMA).
מידע על GitHub runners באירוח עצמי
בתהליך עבודה של GitHub Actions, רצים הם המכונות שמבצעות משימות. לדוגמה, רץ יכול לשכפל את המאגר באופן מקומי, להתקין תוכנת בדיקה ואז להריץ פקודות שמעריכות את הקוד.
אתם יכולים להשתמש בrunners באירוח עצמי כדי להריץ GitHub Actions במופעים של מאגר עובדים ב-Cloud Run. במדריך הזה מוסבר איך להגדיל אוטומטית את מספר הרצים במאגר על סמך מספר המשימות שפועלות ומספר המשימות שלא נקבע להן מועד.
מטרות
במדריך הזה תלמדו:
להוסיף GitHub runners באירוח עצמי כדי לתמוך במאגר GitHub, וליצור סודות ב-Secret Manager כדי לאחסן באופן מאובטח אסימונים וסודות.
פריסת מאגר עובדים של Cloud Run ב-Cloud Run ושימוש במאגר העובדים כדי לקבל משימות מ-GitHub Actions.
פורסים את שירות CREMA של שינוי גודל אוטומטי כדי לשנות את גודל מאגר העובדים.
בודקים את שירות ה-CREMA באמצעות אימות היומנים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
מפעילים את ממשקי ה-API של Cloud Run, Secret Manager, Parameter Manager, Artifact Registry ו-Cloud Build.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים- מתקינים ומפעילים את ה-CLI של gcloud.
- עדכון רכיבים:
gcloud components update
- מגדירים את משתני ההגדרה הבאים עבור CREMA שמשמשים במדריך הזה:
מחליפים את PROJECT_ID במזהה הפרויקט. Google CloudPROJECT_ID=PROJECT_ID CREMA_SERVICE_ACCOUNT_NAME=crema-service-account@$PROJECT_ID.iam.gserviceaccount.com CREMA_REPO_NAME=crema AR_REGION=us-central1
- החיובים על שירות ההרחבה של 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)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
כדי להגדיר את ה-runners באירוח עצמי, צריך הרשאה לערוך את ההגדרות במאגר GitHub. המאגר יכול להיות בבעלות משתמש או בבעלות ארגון.
GitHub ממליצה להשתמש ב-runners באירוח עצמי רק עם מאגרים פרטיים.
יצירת חשבון שירות בהתאמה אישית
במדריך הזה נעשה שימוש בחשבון שירות בהתאמה אישית עם ההרשאות המינימליות הנדרשות לשימוש במשאבים שהוקצו. כדי להגדיר את חשבון השירות:
gcloud iam service-accounts create crema-service-account \
--display-name="CREMA Service Account"
הוספת GitHub runners באירוח עצמי
כדי להוסיף GitHub runners באירוח עצמי, פועלים לפי ההוראות במאמר adding self-hosted runners (הוספת runners באירוח עצמי) במסמכי התיעוד של GitHub.
זיהוי המאגר ב-GitHub
במדריך הזה, המשתנה GITHUB_REPO מייצג את שם המאגר. זה החלק בשם שמופיע אחרי שם הדומיין, גם במאגרי מידע של משתמשים אישיים וגם במאגרי מידע של ארגונים. לדוגמה:
- אם כתובת ה-URL של הדומיין היא
https://github.com/myuser/myrepo, אז GITHUB_REPO הואmyuser/myrepo. - אם כתובת ה-URL של הדומיין היא
https://github.com/mycompany/ourrepo, אז GITHUB_REPO הואmycompany/ourrepo.
יצירת טוקן גישה
יוצרים טוקן גישה ל-GitHub כדי להוסיף ולהסיר רצים באופן דינמי באמצעות אינטראקציה עם המאגר שבחרתם. כדי ליצור אסימון גישה ב-GitHub ולשמור אותו ב-Secret Manager, פועלים לפי השלבים הבאים:
- מוודאים שאתם מחוברים לחשבון GitHub.
- עוברים לדף Settings > Developer Settings > Personal Access Tokens > Tokens (classic) ב-GitHub.
- לוחצים על יצירת טוקן חדש ובוחרים באפשרות יצירת טוקן חדש (קלאסי).
- בקטע 'היקף האסימון', מסמנים את התיבה repo.
- לוחצים על יצירת אסימון.
- מעתיקים את הטוקן שנוצר.
מידע נוסף על אסימוני גישה זמין במאמר בנושא דרישות אימות במסמכי GitHub.
יצירת סוד לאסימון הגישה באמצעות Secret Manager
לוקחים את אסימון הסוד שיצרתם בשלב הקודם ומאחסנים אותו ב-Secret Manager. כדי להגדיר הרשאות גישה:
יוצרים את הסוד ב-Secret Manager:
echo -n "GITHUB_TOKEN" | gcloud secrets create github_runner_token --data-file=-מחליפים את GITHUB_TOKEN בערך שהעתקתם מ-GitHub.
נותנים לחשבון השירות המותאם אישית
roles/secretmanager.secretAccessorהרשאת גישה לסוד החדש שנוצר:gcloud secrets add-iam-policy-binding github_runner_token \ --member "serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role "roles/secretmanager.secretAccessor"
פריסת מאגר עובדים
יוצרים מאגר עובדים ב-Cloud Run כדי לעבד פעולות GitHub. המאגר הזה ישתמש בתמונה שמבוססת על התמונה actions/runner שנוצרה על ידי GitHub. כדי לפרוס מאגר עובדים, מבצעים את השלבים הבאים:
משכפלים את המאגר לדוגמה למחשב המקומי כדי לאחזר את דוגמת הקוד לשימוש:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesעוברים לספרייה שמכילה את הקוד לדוגמה של Cloud Run:
cd cloud-run-samples/github-runner/worker-pool-containerפורסים את מאגר העובדים:
gcloud run worker-pools deploy WORKER_POOL_NAME \ --region us-central1 \ --source . \ --instances 1 \ --set-env-vars GITHUB_REPO=GITHUB_REPO \ --set-secrets GITHUB_TOKEN=github_runner_token:latest \ --service-account $CREMA_SERVICE_ACCOUNT_NAME \ --memory 2Gi \ --cpu 4מחליפים את מה שכתוב בשדות הבאים:
- WORKER_POOL_NAME: שם מאגר העובדים
- WORKER_POOL_LOCATION: האזור של מאגר העובדים
- GITHUB_REPO: שם מאגר GitHub
אם זו הפעם הראשונה שאתם משתמשים בפריסות ממקורות ב-Cloud Run בפרויקט הזה, Cloud Run יציג לכם בקשה ליצור מאגר ברירת מחדל של Artifact Registry.
הסבר על דוגמת הקוד
מאגר העובדים מוגדר עם קובץ Docker שמבוסס על תמונת actions/runner שנוצרה על ידי GitHub:
סקריפט העזר הזה פועל כשהקונטיינר מופעל, והוא רושם את עצמו במאגר שהוגדר כמופע זמני, באמצעות טוקן שאתם יוצרים.
שימוש במאגר העובדים כדי לקבל משימות מפעולות GitHub
מופע מאגר העובדים מוכן לקבל משימות מ-GitHub Actions.
אם במאגר שלכם עדיין אין פעולות GitHub, פועלים לפי ההוראות שבמדריך למתחילים ליצירת זרימת העבודה הראשונה.
אם במאגר יש GitHub Actions, כדי לוודא שהשלמתם את ההגדרה של self-hosted runner, מפעילים GitHub Action במאגר.
אם פעולת GitHub לא משתמשת ב-runners באירוח עצמי, משנים את המשימה של פעולת GitHub מהערך runs-on לערך self-hosted.
אחרי שמגדירים פעולה לשימוש ב-runners באירוח עצמי, מריצים את הפעולה.
בממשק של GitHub, מוודאים שהפעולה הושלמה בהצלחה.
פריסת שירות CREMA של התאמה אוטומטית לעומס
פרסתם worker אחד במאגר המקורי, שמאפשר עיבוד של פעולה אחת בכל פעם. בהתאם לשימוש שלכם באינטגרציה רציפה (CI), יכול להיות שתצטרכו להגדיל את מספר המכונות ב-pool כדי לטפל בעומס עבודה.
אחרי שפורסים את מאגר העובדים עם GitHub Runner פעיל, מגדירים את קנה המידה האוטומטי של CREMA כדי להקצות מופעי עובדים על סמך סטטוס המשימה בתור הפעולות.
ההטמעה הזו מקשיבה לאירוע workflow_job. כשיוצרים משימה של תהליך עבודה, המערכת מגדילה את מאגר העובדים, וכשהמשימה מסתיימת, היא מקטינה אותו שוב. המאגר לא יתרחב מעבר למספר המקסימלי של המופעים שהגדרתם, ויתכווץ לאפס כשכל המשימות הפעילות יסתיימו.
אפשר להתאים את CREMA בהתאם לעומסי העבודה שלכם.
הגדרת התכונה לשינוי אוטומטי של גודל הקבוצה
במדריך הזה משתמשים ב-Parameter Manager כדי לאחסן את קובץ התצורה של CREMA בפורמט YAML.
יוצרים פרמטר ב-Parameter Manager כדי לאחסן גרסאות של פרמטרים עבור CREMA:
PARAMETER_ID=crema-config PARAMETER_REGION=global gcloud parametermanager parameters create $PARAMETER_ID --location=$PARAMETER_REGION --parameter-format=YAMLיוצרים קובץ YAML,
my-crema-config.yaml, בתיקיית האב כדי להגדיר את התצורה של שינוי הגודל האוטומטי:apiVersion: crema/v1 kind: CremaConfig metadata: name: gh-demo spec: pollingInterval: 10 triggerAuthentications: - metadata: name: github-trigger-auth spec: gcpSecretManager: secrets: - parameter: personalAccessToken id: github_runner_token version: latest scaledObjects: - spec: scaleTargetRef: name: projects/PROJECT_ID/locations/us-central1/workerpools/WORKER_POOL_NAME triggers: - type: github-runner name: GITHUB_RUNNER metadata: owner: REPOSITORY_OWNER runnerScope: repo repos: REPOSITORY_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מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט Google Cloud
- WORKER_POOL_NAME: השם של מאגר העובדים שפרסתם
- GITHUB_RUNNER: השם של ה-GitHub Runner שהגדרתם
- REPOSITORY_OWNER: הבעלים של מאגר GitHub
- REPOSITORY_NAME: השם של מאגר GitHub
מעלים את קובץ ה-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
מתן הרשאות נוספות לחשבון שירות מותאם אישית
כדי לשנות את גודל מאגר העובדים שציינתם בהגדרת ה-YAML, צריך להעניק את ההרשאות הבאות בחשבון השירות המותאם אישית:
נותנים לחשבון השירות של CREMA הרשאה לקרוא מ-Parameter Manager:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/parametermanager.parameterViewer"מקצים לחשבון השירות של CREMA את התפקיד
roles/run.developerבמאגר העובדים:WORKER_POOL_NAME=WORKER_POOL_NAME WORKER_POOL_REGION=us-central1 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 בשם של מאגר העובדים.
נותנים לחשבון השירות של 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"
פריסת השירות כדי להרחיב את עומסי העבודה
כדי לפרוס את השירות כדי להרחיב את מאגר העובדים, מריצים את הפקודה הבאה עם קובץ אימג' של קונטיינר שנבנה מראש:
SERVICE_NAME=my-crema-service
SERVICE_REGION=us-central1
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 $SERVICE_NAME \
--image=${IMAGE} \
--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=${CREMA_CONFIG_PARAM_VERSION},OUTPUT_SCALER_METRICS=True"
בדיקת שירות 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 ...
הסרת המשאבים
כדי להימנע מחיובים נוספים בחשבון Google Cloud , מוחקים את כל המשאבים שהצבתם באמצעות המדריך הזה.
מחיקת הפרויקט
אם יצרתם פרויקט חדש בשביל המדריך הזה, מוחקים את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שהוספתם במדריך הזה, תצטרכו למחוק את המשאבים שיצרתם לצורך המדריך.
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבי הדרכה
מוחקים את שירות Cloud Run שפרסתם במדריך הזה. שירותי Cloud Run לא צוברים עלויות עד שהם מקבלים בקשות.
כדי למחוק את שירות Cloud Run, מריצים את הפקודה הבאה:
gcloud run services delete SERVICE-NAME
מחליפים את SERVICE-NAME בשם השירות.
אפשר גם למחוק שירותים של Cloud Run מGoogle Cloud המסוף.
מסירים את הגדרת ברירת המחדל של האזור
gcloudשהוספתם במהלך ההגדרה של המדריך:gcloud config unset run/regionמסירים את הגדרות הפרויקט:
gcloud config unset projectמחיקת משאבים אחרים Google Cloud שנוצרו במדריך הזה:
המאמרים הבאים
- מידע נוסף על מאגרי עובדים ב-Cloud Run
- דוגמאות, מדריכים ודוגמאות קוד נוספים של Cloud Run
- פורסים את שירות CREMA באמצעות קובץ אימג' של קונטיינר בהתאמה אישית שיוצרים מקוד המקור באמצעות Cloud Build.