במדריך הזה נסביר איך להשתמש ב-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.
מפעילים את ממשקי Cloud Run, Secret Manager, Parameter Manager, Artifact Registry ו-Cloud Build API, אם אחד מהם עדיין לא מופעל.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים- מתקינים ומפעילים את ה-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 Repository (
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, כתובת ה-URL לתצוגה היא GITHUB_REPOmyuser/myrepo. - אם כתובת ה-URL של הדומיין היא
https://github.com/mycompany/ourrepo, כתובת ה-URL לתצוגה היא GITHUB_REPOmycompany/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.
הסבר על דוגמת הקוד
מאגר העובדים מוגדר באמצעות Dockerfile שמבוסס על תמונת 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 autoscaler כדי להקצות מופעי עובדים על סמך סטטוס המשימה בתור הפעולות.
ההטמעה הזו מקשיבה לאירוע 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 את התפקיד 'משתמש בחשבון שירות':
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.