באמצעות Cloud Run אתם יכולים להריץ אפליקציות בקונטיינרים שניתנות להתאמה לעומס, על ידי פריסה של קובצי אימג' של קונטיינרים. כשפורסים קובץ אימג' של קונטיינר כדי להריץ שירות חדש או גרסה חדשה של שירות קיים, Cloud Run מייבא את קובץ האימג' של הקונטיינר. העותק הזה נשמר ב-Cloud Run כל עוד גרסה פעילה משתמשת בו, כך שמופעים חדשים של Cloud Run מתחילים בלי לשלוף את קובץ האימג' ממאגר הקונטיינרים.
במדריך למתחילים פריסת קונטיינר לדוגמה תוכלו למצוא הסבר מפורט על פריסת שירות חדש.
לפני שמתחילים
אם אתם כפופים למדיניות ארגונית של הגבלה לפי דומיין שמגבילה הפעלות לא מאומתות בפרויקט, תצטרכו לגשת לשירות שנפרס כמו שמתואר בקטע בדיקת שירותים פרטיים.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לפריסת שירותי Cloud Run, אתם צריכים לבקש מהאדמין לתת לכם את התפקידים הבאים ב-IAM:
- מפתח Cloud Run (
roles/run.developer) בשירות Cloud Run - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות - קריאה ב-Artifact Registry (
roles/artifactregistry.reader) במאגר Artifact Registry של קובץ האימג' של הקונטיינר שנפרס -
אם אתם משתמשים בחשבון שירות בפרויקטים שונים כדי לפרוס שירות:
יצירת אסימונים בחשבון שירות (
roles/iam.serviceAccountTokenCreator) בזהות השירות
רשימה של תפקידים והרשאות ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run מתממשק עם ממשקי API שלCloud de Confiance , כמו ספריות הלקוח ב-Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על הקצאת תפקידים זמין במאמרים הרשאות פריסה וניהול הגישה.
מאגרי Container Registry וקובצי אימג' נתמכים
אתם יכולים להשתמש ישירות בקובצי אימג' של קונטיינרים שמאוחסנים ב-Artifact Registry, או בקובצי אימג' ציבוריים מ-Docker Hub או מ-GitHub Container Registry. Google ממליצה להשתמש ב-Artifact Registry. תמונות ציבוריות מ-GitHub Container Registry ומ-Docker Hub נשמרות במטמון למשך עד שעה.
אתם יכולים להשתמש בקובצי אימג' של קונטיינרים ממאגרים ציבוריים או פרטיים אחרים (כמו JFrog Artifactory או Nexus), או בקובצי אימג' פרטיים מ-GitHub Container Registry, על ידי הגדרת מאגר מרוחק של Artifact Registry.
כדאי להשתמש ב-Docker Hub רק כדי לפרוס קובצי אימג' פופולריים של קונטיינרים, כמו קובצי אימג' רשמיים של Docker או קובצי אימג' של Docker Sponsored OSS. כדי לשפר את הזמינות, Google ממליצה לפרוס את קובצי האימג' האלה של Docker Hub או של GitHub Container Registry באמצעות מאגר מרוחק של Artifact Registry.
ב-Cloud Run אין תמיכה בשכבות של קובצי אימג' של קונטיינרים שגדולות מ-9.9GB כשמבצעים פריסה מ-Docker Hub או ממאגר מרוחק של Artifact Registry עם מאגר חיצוני.
פריסת שירות חדש
אפשר לציין קובץ אימג' של קונטיינר באמצעות תג (לדוגמה, us-docker.pkg.dev/my-project/container/my-image:latest) או באמצעות תקציר מדויק (לדוגמה, us-docker.pkg.dev/my-project/container/my-image@sha256:41f34ab970ee...).
כשפורסים שירות בפעם הראשונה, נוצרת הגרסה הראשונה שלו. שימו לב שאי אפשר לשנות גרסאות. אם אתם פורסים מתג של קובץ אימג' של קונטיינר, הוא יתורגם לתקציר והגרסה תמיד תציג את התקציר הספציפי הזה.
המסוף
כדי לפרוס קובץ אימג' של קונטיינר:
נכנסים לדף Cloud Run במסוף Cloud de Confiance :
לוחצים על Deploy container כדי להציג את הטופס Create service.
מזינים שם לשירות. שמות השירותים צריכים להיות באורך של עד 49 תווים, וייחודיים לכל אזור ופרויקט. אי אפשר לשנות את שם השירות בהמשך, והוא גלוי לכולם.
בשדה Region, משתמשים בערך ברירת המחדל.
בקטע Authentication, קובעים את ההגדרות הבאות:
- אם אתם יוצרים API או אתר ציבוריים, בחרו באפשרות Allow public access. כשבוחרים באפשרות הזו, התפקיד "מפעיל IAM" מוקצה למזהה המיוחד
allUser. אחרי שיוצרים את השירות, אפשר להשתמש ב-IAM כדי לערוך את ההגדרה הזו. - אם רוצים שירות מאובטח שמוגן באמצעות אימות, בוחרים באפשרות Require authentication.
- אם אתם יוצרים API או אתר ציבוריים, בחרו באפשרות Allow public access. כשבוחרים באפשרות הזו, התפקיד "מפעיל IAM" מוקצה למזהה המיוחד
מגדירים את החיוב לפי הצורך.
בקטע Service scaling, אם אתם משתמשים בהתאמה אוטומטית לעומס (automatic scaling) שמוגדרת כברירת מחדל ב-Cloud Run, אתם יכולים לציין את מספר המכונות המינימלי והמקסימלי או להגדיר אמצעי בקרה להתאמה לעומס. אם אתם משתמשים בהתאמה ידנית לעומס (scaling), ציינו את מספר המכונות של השירות.
מגדירים את ההגדרות של Ingress בטופס לפי הצורך.
לוחצים על Containers, Networking, Security כדי להגדיר הגדרות אופציונליות אחרות בכרטיסיות המתאימות:
כשמסיימים להגדיר את השירות, לוחצים על Create כדי לפרוס את קובץ האימג' ב-Cloud Run וממתינים לסיום הפריסה.
לוחצים על הקישור לכתובת ה-URL שמוצגת כדי לפתוח את נקודת הקצה הייחודית והיציבה של השירות שנפרס.
gcloud
-
מפעילים את Cloud Shell במסוף Cloud de Confiance .
בחלק התחתון של מסוף Cloud de Confiance יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
כדי לפרוס קובץ אימג' של קונטיינר:
מריצים את הפקודה הבאה:
gcloud run deploy SERVICE --image IMAGE_URLמחליפים את מה שכתוב בשדות הבאים:
- SERVICE: שם השירות שאליו רוצים לפרוס. שמות השירותים צריכים להיות באורך של עד 49 תווים, וייחודיים לכל אזור ופרויקט. אם השירות עדיין לא קיים, הפקודה הזו יוצרת את השירות במהלך הפריסה. אפשר להשמיט את הפרמטר הזה לגמרי, אבל אם תשמיטו אותו תתבקשו להזין את שם השירות.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. שימו לב שאם לא תציינו את הדגל--image, פקודת הפריסה תנסה לפרוס מקוד המקור.
אם אתם יוצרים API או אתר ציבורי, אתם יכולים לאפשר גישה ציבורית לשירות באמצעות הדגל
--allow-unauthenticated. כך מקצים את תפקיד ה-IAM Cloud Run Invoker ל-allUsers. אפשר גם לציין את הערך--no-allow-unauthenticatedכדי לא לאפשר גישה ציבורית. אם לא תציינו את אחד מהדגלים האלה, תתבקשו לאשר כשהפקודהdeployתפעל.מחכים שהפריסה תסתיים. בסיום הפריסה, תוצג הודעה על הצלחת הפריסה וכתובת ה-URL של השירות שנפרס.
שימו לב: כדי לפרוס במיקום שונה מזה שהגדרתם באמצעות המאפיינים
run/regiongcloud, צריך להשתמש ב:gcloud run deploy SERVICE --region REGION
YAML
אתם יכולים לשמור את מפרט השירות בקובץ YAML ואז לפרוס אותו באמצעות ה-CLI של gcloud.
יוצרים קובץ
service.yamlחדש עם התוכן הבא:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run. שמות השירותים צריכים להיות באורך של עד 49 תווים, וייחודיים לכל אזור ופרויקט.
- IMAGE: כתובת ה-URL של קובץ האימג' של הקונטיינר.
אפשר גם לציין הגדרות נוספות, כמו משתני סביבה או מגבלות זיכרון.
פורסים את השירות החדש באמצעות הפקודה הבאה:
gcloud run services replace service.yamlכברירת מחדל, הפקודה
gcloud run services replaceמשתמשת בקובץservice.yamlאם הוא קיים.אם רוצים לאפשר גישה לשירות בלי אימות, אפשר להפוך את השירות לציבורי.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את הקוד הבא למשאבgoogle_cloud_run_v2_service בתצורה של Terraform: provider "google" {
project = "PROJECT-ID"
}
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
client = "terraform"
template {
containers {
image = "IMAGE_URL"
}
}
}
resource "google_cloud_run_v2_service_iam_member" "noauth" {
location = google_cloud_run_v2_service.default.location
name = google_cloud_run_v2_service.default.name
role = "roles/run.invoker"
member = "allUsers"
}
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT-ID: מזהה הפרויקט ב- Cloud de Confiance
- REGION: האזור של Cloud de Confiance
- SERVICE: השם של שירות Cloud Run. שמות השירותים צריכים להיות באורך של עד 49 תווים, וייחודיים לכל אזור ופרויקט.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם משתמשים ב-Artifact Registry, צריך כבר ליצור את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
ההגדרה הזו מאפשרת גישה ציבורית (המקבילה של --allow-unauthenticated). כדי להפוך את השירות לפרטי, צריך להסיר את הבית google_cloud_run_v2_service_iam_member.
ספריות לקוח
כדי לפרוס שירות חדש מקוד:
API בארכיטקטורת REST
כדי לפרוס שירות חדש, שולחים בקשת HTTP מסוג POST לנקודת הקצה (endpoint) של Cloud Run Admin API service.
לדוגמה, באמצעות curl:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X POST \ -d '{template: {containers: [{image: "IMAGE_URL"}]}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services?serviceId=SERVICE
מחליפים את מה שכתוב בשדות הבאים:
- ACCESS_TOKEN: טוקן גישה תקין לחשבון עם הרשאות IAM לפריסת שירותים.
לדוגמה, אם אתם מחוברים ל-gcloud, אתם יכולים לאחזר אסימון גישה באמצעות
gcloud auth print-access-token. מתוך מכונה של קונטיינר ב-Cloud Run, אתם יכולים לאחזר אסימון גישה באמצעות שרת המטא-נתונים של המכונה של הקונטיינר. -
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - SERVICE: שם השירות שאליו רוצים לפרוס. שמות השירותים צריכים להיות באורך של עד 49 תווים, וייחודיים לכל אזור ופרויקט.
- REGION: האזור של השירות ב- Cloud de Confiance .
- PROJECT-ID: מזהה הפרויקט ב- Cloud de Confiance .
מיקומים ב-Cloud Run
התשתית של Cloud Run היא אזורית, כלומר היא ממוקמת באזור ספציפי ומנוהלת על ידי Google כך שתהיה זמינה באופן יתיר בכל האזורים באותו אזור.
הגורמים העיקריים לבחירת האזור שבו יפעלו שירותי Cloud Run הם הדרישות שלכם לגבי זמן אחזור, זמינות או עמידות.
בדרך כלל אפשר לבחור את האזור הכי קרוב למשתמשים, אבל כדאי להביא בחשבון את המיקום של המוצרים Cloud de Confianceהאחרים שמשמשים את שירות Cloud Run.
שימוש במוצרי Cloud de Confiance בכמה מיקומים יכול להשפיע על זמן האחזור של השירות וגם על העלות.
אפשר להשתמש ב-Cloud Run באזורים הבאים:
בכפוף לתמחור ברמה 1
asia-east1(טייוואן)asia-northeast1(טוקיו)asia-northeast2(אוסקה)asia-south1(מומבאי, הודו)asia-southeast3(בנגקוק)-
europe-north1(פינלנד)רמה נמוכה של CO2
europe-north2(שטוקהולם)רמה נמוכה של CO2
-
europe-southwest1(מדריד)רמה נמוכה של CO2
-
europe-west1(בלגיה)רמה נמוכה של CO2
-
europe-west4(הולנד)רמה נמוכה של CO2
-
europe-west8(מילאנו)רמה נמוכה של CO2
-
europe-west9(פריז)רמה נמוכה של CO2
me-west1(תל אביב)northamerica-south1(מקסיקו)-
us-central1(אייווה)רמה נמוכה של CO2
us-east1(קרוליינה הדרומית)us-east4(צפון וירג'יניה)us-east5(קולומבוס)us-south1(דאלאס)רמה נמוכה של CO2
-
us-west1(אורגון)רמה נמוכה של CO2
בכפוף לתמחור ברמה 2
africa-south1(יוהנסבורג)asia-east2(הונג קונג)asia-northeast3(סיאול, דרום קוריאה)asia-southeast1(סינגפור)asia-southeast2(ג'קרטה)asia-south2(דלהי, הודו)australia-southeast1(סידני)australia-southeast2(מלבורן)-
europe-central2(ורשה, פולין)רמה נמוכה של CO2
europe-west10(ברלין)-
europe-west12(טורינו)רמה נמוכה של CO2
-
europe-west2(לונדון, בריטניה)רמה נמוכה של CO2
europe-west3(פרנקפורט, גרמניה)europe-west6(ציריך, שווייץ)רמה נמוכה של CO2
me-central1(דוחא)me-central2(דמאם)-
northamerica-northeast1(מונטריאול)רמה נמוכה של CO2
-
northamerica-northeast2(טורונטו)רמה נמוכה של CO2
-
southamerica-east1(סאו פאולו, ברזיל)רמה נמוכה של CO2
-
southamerica-west1(סנטיאגו, צ'ילה)רמה נמוכה של CO2
us-west2(לוס אנג'לס)us-west3(סולט לייק סיטי)us-west4(לאס וגאס)
אם כבר יצרתם שירות Cloud Run, אתם יכולים לראות את האזור במרכז הבקרה של Cloud Run במסוףCloud de Confiance .
פריסת גרסה חדשה של שירות קיים
אפשר לפרוס גרסה חדשה באמצעות מסוף Cloud de Confiance , שורת הפקודה של gcloud או קובץ תצורה של YAML.
חשוב לזכור שכל שינוי בהגדרות יוצר גרסה חדשה, גם אם לא משנים את קובץ האימג' של הקונטיינר. כל גרסה שנוצרת היא קבועה.
בזמן הפריסה, Cloud Run מייבא את קובץ האימג' של הקונטיינר. העותק הזה של קובץ האימג' של הקונטיינר נשמר ב-Cloud Run כל עוד גרסה פעילה משתמשת בו.
המסוף
כדי לפרוס גרסה חדשה של שירות קיים:
נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance :
ברשימת השירותים, לוחצים על השירות שרוצים לעדכן.
בכרטיסייה Containers (מאגרי תגים) אפשר לקבוע את ההגדרות הבאות:
בכרטיסייה רשת אפשר להגדיר את האפשרויות הבאות:
בכרטיסייה אבטחה אפשר לקבוע את ההגדרות הבאות:
בכרטיסייה Scaling אפשר לקבוע את ההגדרות הבאות:
לוחצים על View diff & redeploy ואז על Deploy changes כדי לפרוס את השינויים.
gcloud
-
מפעילים את Cloud Shell במסוף Cloud de Confiance .
בחלק התחתון של מסוף Cloud de Confiance יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
כדי לפרוס קובץ אימג' של קונטיינר:
מריצים את הפקודה:
gcloud run deploy SERVICE --image IMAGE_URLמחליפים את מה שכתוב בשדות הבאים:
- SERVICE: שם השירות שאתם פורסים. אפשר להשמיט את הפרמטר הזה לגמרי, אבל אם תשמיטו אותו תתבקשו להזין את שם השירות.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
הסיומת של הגרסה מוקצית באופן אוטומטי לגרסאות חדשות. אם רוצים לספק סיומת גרסה משלכם, משתמשים בפרמטר --revision-suffix של ה-CLI של gcloud.
מחכים שהפריסה תסתיים. בסיום הפריסה, תוצג הודעה על הצלחת הפריסה וכתובת ה-URL של השירות שנפרס.
YAML
אם אתם צריכים להוריד או להציג את ההגדרות של שירות קיים, אתם יכולים להשתמש בפקודה הבאה כדי לשמור את התוצאות בקובץ YAML:
gcloud run services describe SERVICE --format export > service.yamlבקובץ YAML של הגדרת השירות, משנים את מאפייני הצאצא של spec.template לפי הצורך כדי לעדכן את הגדרות הגרסה, ואז פורסים את הגרסה החדשה:
gcloud run services replace service.yamlכברירת מחדל, הפקודה gcloud run services replace משתמשת בקובץ service.yaml אם הוא קיים.
Terraform
מוודאים שהגדרתם את Terraform כמו שמתואר בדוגמה פריסת שירות חדש.
משנים את קובץ התצורה.
מחילים את ההגדרות של Terraform:
terraform applyכדי לאשר שרוצים לבצע את הפעולות שמתוארות, מזינים
yes.
ספריות לקוח
כדי לפרוס גרסה חדשה מהקוד:
API בארכיטקטורת REST
כדי לפרוס גרסה חדשה, שולחים בקשת HTTP מסוג PATCH לנקודת הקצה (endpoint) של Cloud Run Admin API service.
לדוגמה, באמצעות curl:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{template: {containers: [{image: "IMAGE_URL"}]}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE
מחליפים את מה שכתוב בשדות הבאים:
- ACCESS_TOKEN: אסימון גישה תקין לחשבון עם הרשאות IAM לפריסת גרסאות.
לדוגמה, אם אתם מחוברים ל-gcloud, אתם יכולים לאחזר אסימון גישה באמצעות
gcloud auth print-access-token. מתוך מכונה של קונטיינר ב-Cloud Run, אתם יכולים לאחזר אסימון גישה באמצעות שרת המטא-נתונים של המכונה של הקונטיינר. -
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - SERVICE: שם השירות שאתם פורסים.
- REGION: האזור של השירות ב- Cloud de Confiance .
- PROJECT-ID: מזהה הפרויקט ב- Cloud de Confiance .
מיקומים ב-Cloud Run
התשתית של Cloud Run היא אזורית, כלומר היא ממוקמת באזור ספציפי ומנוהלת על ידי Google כך שתהיה זמינה באופן יתיר בכל האזורים באותו אזור.
הגורמים העיקריים לבחירת האזור שבו יפעלו שירותי Cloud Run הם הדרישות שלכם לגבי זמן אחזור, זמינות או עמידות.
בדרך כלל אפשר לבחור את האזור הכי קרוב למשתמשים, אבל כדאי להביא בחשבון את המיקום של המוצרים Cloud de Confianceהאחרים שמשמשים את שירות Cloud Run.
שימוש במוצרי Cloud de Confiance בכמה מיקומים יכול להשפיע על זמן האחזור של השירות וגם על העלות.
אפשר להשתמש ב-Cloud Run באזורים הבאים:
בכפוף לתמחור ברמה 1
asia-east1(טייוואן)asia-northeast1(טוקיו)asia-northeast2(אוסקה)asia-south1(מומבאי, הודו)asia-southeast3(בנגקוק)-
europe-north1(פינלנד)רמה נמוכה של CO2
europe-north2(שטוקהולם)רמה נמוכה של CO2
-
europe-southwest1(מדריד)רמה נמוכה של CO2
-
europe-west1(בלגיה)רמה נמוכה של CO2
-
europe-west4(הולנד)רמה נמוכה של CO2
-
europe-west8(מילאנו)רמה נמוכה של CO2
-
europe-west9(פריז)רמה נמוכה של CO2
me-west1(תל אביב)northamerica-south1(מקסיקו)-
us-central1(אייווה)רמה נמוכה של CO2
us-east1(קרוליינה הדרומית)us-east4(צפון וירג'יניה)us-east5(קולומבוס)us-south1(דאלאס)רמה נמוכה של CO2
-
us-west1(אורגון)רמה נמוכה של CO2
בכפוף לתמחור ברמה 2
africa-south1(יוהנסבורג)asia-east2(הונג קונג)asia-northeast3(סיאול, דרום קוריאה)asia-southeast1(סינגפור)asia-southeast2(ג'קרטה)asia-south2(דלהי, הודו)australia-southeast1(סידני)australia-southeast2(מלבורן)-
europe-central2(ורשה, פולין)רמה נמוכה של CO2
europe-west10(ברלין)-
europe-west12(טורינו)רמה נמוכה של CO2
-
europe-west2(לונדון, בריטניה)רמה נמוכה של CO2
europe-west3(פרנקפורט, גרמניה)europe-west6(ציריך, שווייץ)רמה נמוכה של CO2
me-central1(דוחא)me-central2(דמאם)-
northamerica-northeast1(מונטריאול)רמה נמוכה של CO2
-
northamerica-northeast2(טורונטו)רמה נמוכה של CO2
-
southamerica-east1(סאו פאולו, ברזיל)רמה נמוכה של CO2
-
southamerica-west1(סנטיאגו, צ'ילה)רמה נמוכה של CO2
us-west2(לוס אנג'לס)us-west3(סולט לייק סיטי)us-west4(לאס וגאס)
אם כבר יצרתם שירות Cloud Run, אתם יכולים לראות את האזור במרכז הבקרה של Cloud Run במסוףCloud de Confiance .
אימות ההגדרות באמצעות הרצת בדיקה
כדי לאמת את הגדרת השירות בלי לפרוס אותה או לשמור את השינויים, אפשר להשתמש בדגל --dry-run.
כשמציינים את הדגל --dry-run, הפקודה מבצעת את הפעולות הבאות:
- מאמת את ההגדרות האישיות.
- עוקף את תהליך ה-build אם אתם פורסים מקוד המקור.
- לא מגדיר כללי מדיניות של ניהול זהויות והרשאות גישה (IAM).
- מדפיס הודעה על הצלחה באימות.
כדי לאמת פריסה של קובץ אימג' של קונטיינר:
gcloud beta run deploy SERVICE \ --image IMAGE_URL \ --dry-run
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: שם השירות שאתם פורסים.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
פריסת קובצי אימג' מפרויקטים אחרים ב- Cloud de Confiance
כדי לפרוס קובצי אימג' מפרויקטים אחרים ב- Cloud de Confiance , אתם או האדמין צריכים לתת לחשבון הפריסה ולסוכן השירות של Cloud Run את תפקידי ה-IAM הנדרשים.
התפקידים הנדרשים לחשבון הפריסה
כדי להקצות לסוכן השירות של Cloud Run את התפקידים הנדרשים, פועלים לפי ההוראות הבאות:
במסוף Cloud de Confiance , פותחים את הפרויקט של שירות Cloud Run.
בוחרים באפשרות Include Google-provided role grants.
מעתיקים את כתובת האימייל של סוכן השירות של Cloud Run. הסיומת שלו היא @serverless-robot-prod.s3ns.iam.gserviceaccount.com.
פותחים את הפרויקט שבבעלותו נמצא Container Registry שבו רוצים להשתמש.
לוחצים על Add כדי להוסיף חשבון משתמש חדש.
בשדה New principals, מדביקים את כתובת האימייל של חשבון השירות שהעתקתם קודם.
בתפריט Select a role, לוחצים על Artifact Registry -> Artifact Registry Reader.
פורסים את קובץ האימג' של הקונטיינר בפרויקט שמכיל את השירות של Cloud Run.
פריסת קובצי אימג' ממאגרים אחרים
כדי לפרוס קובצי אימג' של קונטיינרים ציבוריים או פרטיים שלא מאוחסנים ב-Artifact Registry או ב-Docker Hub, או שהם לא קובצי אימג' של קונטיינרים ציבוריים ב-GitHub Container Registry, צריך להגדיר מאגר מרוחק של Artifact Registry.
מאגרים מרוחקים ב-Artifact Registry מאפשרים לכם:
- פריסה של כל קובץ אימג' של קונטיינר ציבורי.
- פריסת קובצי אימג' של קונטיינרים ממאגרים פרטיים שדורשים אימות, כמו JFrog Artifactory או Nexus.
לחלופין, אם אתם לא יכולים להשתמש במאגר מרוחק של Artifact Registry, אתם יכולים לשלוף זמנית קובצי אימג' של קונטיינרים ולהעביר אותם בדחיפה ל-Artifact Registry באמצעות docker push כדי לפרוס אותם ב-Cloud Run.
קובץ האימג' של הקונטיינר מיובא על ידי Cloud Run בזמן הפריסה, כך שאחרי הפריסה אפשר למחוק את קובץ האימג' מ-Artifact Registry.
פריסת כמה קונטיינרים בשירות (sidecars)
בפריסה של Cloud Run עם קונטיינרים משניים, יש קונטיינר ingress אחד שמטפל בכל בקשות ה-HTTPS הנכנסות ביציאת הקונטיינר שציינתם, ויש קונטיינר משני אחד או יותר. ה-sidecars לא יכולים להאזין לבקשות ה-HTTP הנכנסות ביציאת מאגר ה-ingress, אבל הם יכולים לתקשר זה עם זה ועם מאגר ה-ingress באמצעות יציאת localhost. היציאה של המארח המקומי משתנה בהתאם למאגרים שבהם אתם משתמשים.
בתרשים הבא, קונטיינר ה-ingress מתקשר עם ה-sidecar באמצעות localhost:5000.
![]()
אפשר לפרוס עד 10 קונטיינרים לכל מכונה, כולל קונטיינר ה-ingress. כל הקונטיינרים במכונה חולקים את אותו מרחב שמות ברשת, ויכולים גם לשתף קבצים באמצעות נפח משותף בזיכרון, כמו שמוצג בתרשים.
אפשר לפרוס כמה קונטיינרים בסביבת ההפעלה מהדור הראשון או השני.
אם אתם משתמשים בחיוב מבוסס-בקשה (ברירת המחדל של Cloud Run), המערכת מקצה מעבד (CPU) ל-sidecars רק בתרחישים הבאים:
- המכונה מעבדת לפחות בקשה אחת.
- הקונטיינר של ה-Ingress מופעל.
אם ה-sidecar צריך להשתמש במעבד (CPU) מחוץ לעיבוד הבקשות (לדוגמה, לאיסוף מדדים), צריך להגדיר את החיוב של השירות לחיוב מבוסס-מכונה. מידע נוסף זמין במאמר הגדרות חיוב (שירותים).
אם אתם משתמשים בחיוב לפי בקשה, הגדירו בדיקת הפעלה כדי לוודא שה-CPU של ה-sidecar לא מוגבל בהפעלה.
כדי לדרוש שכל הפריסות ישתמשו ב-sidecar ספציפי, אפשר ליצור כללי מדיניות בהתאמה אישית של הארגון.
תרחישים לדוגמה
תרחישים לדוגמה לשימוש ב-sidecars בשירות Cloud Run:
- מעקב, רישום ביומן ויומני מעקב של אפליקציות
- שימוש ב-Nginx, ב-Envoy או ב-Apache2 כשרת proxy לפני קונטיינר האפליקציה
- הוספת מסנני אימות והרשאה (לדוגמה, Open Policy Agent)
- הפעלת שרתי proxy לחיבורים יוצאים, כמו שרת ה-proxy לאימות של AlloyDB
פריסת שירות עם קונטיינרים משניים (sidecar)
אפשר לפרוס כמה קונטיינרים של Sidecar בשירות Cloud Run באמצעות מסוףCloud de Confiance , Google Cloud CLI, YAML או Terraform.
המסוף
כדי לפרוס שירות חדש עם קונטיינרים מסוג sidecar:
נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance :
לוחצים על Deploy container כדי להציג את הטופס Create service.
מציינים את שם השירות ואת כתובת ה-URL של קובץ האימג' של קונטיינר ה-Ingress שרוצים לפרוס.
לוחצים על Containers, Networking, Security.
בכרטיס Edit container, מגדירים את מאגר ה-ingress לפי הצורך.
לוחצים על Add container ומגדירים קונטיינר משני שרוצים להוסיף לצד קונטיינר ה-ingress. אם ה-sidecar תלוי בקונטיינר אחר בשירות, צריך לציין את זה בתפריט Container start-up order. חוזרים על השלב הזה לכל קונטיינר משני (sidecar) שפורסים.
לוחצים על יצירה.
כדי להגדיר שירות קיים עם קובצי עזר:
נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance :
כדי לפרוס לשירות קיים, לוחצים על השירות.
לוחצים על הכרטיסייה מאגרי תגים.
לוחצים על Add container ומגדירים קונטיינר משני שרוצים להוסיף לצד קונטיינר ה-ingress. אם ה-sidecar תלוי בקונטיינר אחר בשירות, צריך לציין את זה בתפריט Container start-up order. חוזרים על השלב הזה לכל קונטיינר משני (sidecar) שפורסים.
לוחצים על הצגת ההבדלים ופריסה מחדש.
כדי להעביר את כל התנועה לגרסה החדשה, בוחרים באפשרות Serve this revision immediately. כדי להשיק את העדכון בהדרגה, מבטלים את הסימון בתיבה הזו. כתוצאה מכך, מתבצע פריסה שבה לא נשלחת תנועה לגרסה החדשה. אחרי הפריסה, פועלים לפי ההוראות להשקות הדרגתיות.
לוחצים על פריסת השינויים.
gcloud
-
מפעילים את Cloud Shell במסוף Cloud de Confiance .
בחלק התחתון של מסוף Cloud de Confiance יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
כדי לפרוס כמה קונטיינרים בשירות, מריצים את הפקודה הבאה:
gcloud run deploy SERVICE \ --container INGRESS_CONTAINER_NAME \ --image='INGRESS_IMAGE' \ --port='CONTAINER_PORT' \ --container SIDECAR_CONTAINER_NAME \ --image='SIDECAR_IMAGE'
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: שם השירות שאתם פורסים. אפשר להשמיט את הפרמטר הזה לגמרי, אבל אם תשמיטו אותו תתבקשו להזין את שם השירות.
- INGRESS_CONTAINER_NAME: שם למאגר שמקבל בקשות, למשל
app. -
INGRESS_IMAGE: הפניה לקובץ האימג' של הקונטיינר שאמור לקבל בקשות, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. - CONTAINER_PORT: היציאה שבה מאזין מאגר ה-ingress לבקשות נכנסות. בניגוד לשירות עם קונטיינר יחיד, בשירות שמכיל קונטיינרים של Sidecar אין יציאת ברירת מחדל לקונטיינר ה-ingress. צריך להגדיר באופן מפורש את יציאת מאגר ה-ingress, ורק למאגר אחד יכולה להיות יציאה חשופה.
- SIDECAR_CONTAINER_NAME: שם לקונטיינר המשני (sidecar), לדוגמה
sidecar. -
SIDECAR_IMAGE: הפניה לקובץ האימג' של הקונטיינר המשני (sidecar)
כדי להגדיר כל קונטיינר בפקודת הפריסה, צריך לספק את ההגדרות של כל קונטיינר אחרי הפרמטרים של
container, לדוגמה:gcloud run deploy SERVICE \ --container CONTAINER_1_NAME \ --image='INGRESS_IMAGE' \ --set-env-vars=KEY=VALUE \ --port='CONTAINER_PORT' \ --container SIDECAR_CONTAINER_NAME \ --image='SIDECAR_IMAGE' \ --set-env-vars=KEY_N=VALUE_N
מחכים שהפריסה תסתיים. בסיום הפריסה, תוצג הודעת הצלחה יחד עם כתובת ה-URL של השירות שנפרס.
YAML
ההוראות האלה מציגות קובץ YAML בסיסי לשירות Cloud Run עם קונטיינרים של Sidecar. יוצרים קובץ בשם service.yaml ומוסיפים לו את הקוד הבא:
apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: name: SERVICE spec: template: spec: containers: - image: INGRESS_IMAGE ports: - containerPort: CONTAINER_PORT - image: SIDECAR_IMAGE
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run. שמות השירותים צריכים להיות באורך של עד 49 תווים.
- CONTAINER_PORT: היציאה שבה מאזין מאגר ה-ingress לבקשות נכנסות. בניגוד לשירות עם קונטיינר יחיד, בשירות שמכיל קונטיינרים של Sidecar אין יציאת ברירת מחדל לקונטיינר ה-ingress. צריך להגדיר באופן מפורש את יציאת מאגר ה-ingress, ורק למאגר אחד יכולה להיות יציאה חשופה.
-
INGRESS_IMAGE: הפניה לקובץ האימג' של הקונטיינר שאמור לקבל בקשות, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. -
SIDECAR_IMAGE: הפניה לקובץ האימג' של הקונטיינר המשני. כדי לציין כמה קובצי sidecar, מוסיפים עוד רכיבים למערךcontainersבקובץ ה-YAML.
אחרי שמעדכנים את קובץ ה-YAML כך שיכלול את קונטיינר ה-ingress והקונטיינר המשני, פורסים ב-Cloud Run באמצעות הפקודה:
gcloud run services replace service.yamlכברירת מחדל, הפקודה gcloud run services replace משתמשת בקובץ service.yaml אם הוא קיים.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את הקוד הבא למשאבgoogle_cloud_run_v2_service בתצורה של Terraform:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
ingress = "INGRESS_TRAFFIC_ALL"
template {
containers {
name = "INGRESS_CONTAINER_NAME"
ports {
container_port = CONTAINER_PORT
}
image = "INGRESS_IMAGE"
depends_on = ["SIDECAR_CONTAINER_NAME"]
}
containers {
name = "SIDECAR_CONTAINER_NAME"
image = "SIDECAR_IMAGE"
}
}
}
הערך CONTAINER_PORT מייצג את היציאה שבה מאזין מאגר ה-ingress לבקשות נכנסות. בניגוד לשירות עם קונטיינר יחיד, בשירות שמכיל קונטיינרים של Sidecar אין יציאת ברירת מחדל לקונטיינר של Ingress. צריך להגדיר באופן מפורש את יציאת מאגר ה-ingress, ורק למאגר אחד יכולה להיות יציאה חשופה.
תכונות בולטות שזמינות לפריסות עם קובצי sidecar
סדר ההפעלה
אם יש לכם יחסי תלות שמחייבים שחלק מהקונטיינרים יופעלו לפני קונטיינרים אחרים בפריסה, אתם יכולים לציין את סדר ההפעלה של הקונטיינרים בפריסה עם כמה קונטיינרים.
אם יש לכם קונטיינרים שתלויים בקונטיינרים אחרים, אתם צריכים להשתמש ב-healthchecks בפריסה. אם אתם משתמשים בבדיקות תקינות, Cloud Run פועל לפי סדר ההפעלה של הקונטיינרים ובודק את התקינות של כל קונטיינר, כדי לוודא שכל אחד מהם עובר בהצלחה לפני ש-Cloud Run מפעיל את הקונטיינר הבא בסדר. אם לא משתמשים בבדיקות תקינות, קונטיינרים תקינים יופעלו גם אם הקונטיינרים שהם תלויים בהם לא פועלים.
החלפת נתוני קבצים בין קובצי sidecar
כמה קונטיינרים במכונה אחת יכולים לגשת לנפח משותף בזיכרון, שכל קונטיינר יכול לגשת אליו באמצעות נקודות טעינה שאתם יוצרים. בדרך כלל משתמשים בזה כדי לשתף קבצים בין קונטיינרים, למשל קונטיינר משני (sidecar) של טלמטריה יכול לאסוף יומנים מקונטיינר של אפליקציה.
תקשורת בין קונטיינרים מסוג sidecar
שני קונטיינרים של אותו מכונה יכולים לתקשר זה עם זה ברשת המקומית.
לדוגמה, נניח שיש לכם את השירות הבא:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: example
spec:
template:
spec:
containers:
- name: ingress
image: ...
ports:
- containerPort: 8080
- name: sidecar
image: ...
כל מכונה של השירות הזה תריץ שני קונטיינרים: אחד בשם ingress והשני בשם sidecar.
בקשות שמגיעות לשירות נשלחות למאגר ingress ביציאה 8080.
בשירות עם כמה קונטיינרים, רק קונטיינר אחד יכול להיות מוגדר כקונטיינר Ingress שמטפל בכל הבקשות הנכנסות, וזה חייב להיות הקונטיינר שמוגדרת לו containerPort.
הקונטיינרים ingress ו-sidecar יכולים לתקשר זה עם זה ב-http://localhost. לדוגמה, אם הקונטיינר sidecar מאזין לבקשות ביציאה 5000, הקונטיינר ingress יכול לתקשר איתו ב-http://localhost:5000.
מכיוון שלקונטיינרים יש שמות, הם יכולים לתקשר זה עם זה באמצעות השם של הקונטיינר. לדוגמה, אם הקונטיינר sidecar מאזין לבקשות ביציאה 5000, הקונטיינר ingress יכול לתקשר עם sidecar באמצעות http://sidecar:5000.
התאמת הקונטיינרים ל-Cloud Run
רוב הקונטיינרים שתיצרו או שתמצאו יהיו תואמים לחוזה של סביבת זמן הריצה של הקונטיינר ב-Cloud Run. עם זאת, יכול להיות שתצטרכו לשנות קונטיינרים מסוימים שנוצרו כדי להקל על הפיתוח המקומי, או לצפות לשליטה מלאה במכונה כדי להתאים אותם לסביבות ההפעלה של Cloud Run.
העברת נקודות טעינה להגדרות של Cloud Run
סקריפטים של אתחול בקונטיינר צריכים להניח שהטעינות כבר הושלמו לפני הקריאה לקונטיינר. אתם צריכים להעביר את כל פעולות הטעינה אל הגדרת המשאבים של Cloud Run.
כשזה אפשרי, כדאי לעבור למשתמש שאינו משתמש Root
עדיף להשתמש בקונטיינרים שלא משתמשים במשתמש Root או מסתמכים עליו. השיטה הזו מפחיתה את הסיכון לפגיעות של שירות Cloud Run, מצמצמת את שטח המתקפה של הקונטיינר, מגבילה את הגישה של התוקף למערכות הקבצים שלכם ופועלת בהתאם לעקרון של הרשאות מינימליות.
כדי לעבור לזהות עם פחות הרשאות, משתמשים בהוראה USER בקובץ Docker, כי ברירת המחדל היא הרצה כמשתמש root. כדי להריץ את הקונטיינר, Cloud Run משתמש במשתמש שצוין בקובץ ה-Dockerfile.
בדיקת השימוש בקובצי בינארי של setuid
הפעלת קבצים בינאריים של setuid תיכשל כשהם יופעלו מהקונטיינרים שלכם ב-Cloud Run.
אם אתם משתמשים ב-Docker או ב-Podman באופן מקומי, השתמשו בארגומנט --cap-drop=setuid.
לחלופין, ודאו שהקבצים הבינאריים שאתם מסתמכים עליהם לא מכילים את הביט setuid.
מוודאים שקונטיינרים ברמת הבסיס (root) תואמים למרחבי שמות של משתמשים
כדי לבדוק את השינויים באופן מקומי או במכונה וירטואלית, צריך להעריך את הקוד כשמריצים אותו במרחבי שמות של משתמשים, למשל כשמשתמשים בתכונה userns-remap של Docker, כשמריצים את הקונטיינר ב-rootless Podman או כשפורסים את השינויים האלה במכונות וירטואליות שמריצות את מערכת ההפעלה שמותאמת לקונטיינרים של Google עם הארגומנט --userns-remap=default בפקודה docker run.
השבתת בדיקת התקינות של הפריסה
כברירת מחדל, Cloud Run בודק שהפריסה תקינה על ידי הפעלת מכונה והמתנה עד שהבדיקה הראשונית תעבור. אם בדיקת התקינות נכשלת, הגרסה תסומן כלא תקינה והתנועה לא תנותב אליה.
אם אין צורך בבדיקת התקינות של הפריסה, או אם רוצים להאיץ את הפריסה, אפשר להשבית את הבדיקה:
gcloud
כדי להשבית את בדיקת התקינות של הפריסה, משתמשים בדגל --no-deploy-health-check:
gcloud run deploy --image IMAGE_URL --no-deploy-health-check
מחליפים את מה שכתוב בשדות הבאים:
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
אם בדיקת התקינות של הפריסה הושבתה בעבר, אפשר להשתמש ב---deploy-health-check כדי להפעיל אותה מחדש.
YAML
כדי להשבית את בדיקת התקינות של הפריסה, מוסיפים את ההערה run.googleapis.com/health-check-disabled עם הערך 'true' ל-spec.template.metadata.annotations.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: SERVICE
spec:
template:
metadata:
annotations:
run.googleapis.com/health-check-disabled: 'true'
Terraform
כדי להשבית את בדיקת התקינות של הפריסה, מגדירים את הארגומנט health_check_disabled לערך true בבלוק template.
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
...
template {
health_check_disabled = true
...
}
}
המאמרים הבאים
אחרי שפורסים שירות חדש, אפשר לבצע את הפעולות הבאות:
- השקות הדרגתיות, החזרת גרסאות למצב קודם, העברת תנועה
- הצגת יומני השירות
- מעקב אחרי ביצועי השירות
- הגדרת מגבלות זיכרון
- הגדרה של משתני סביבה
- שינוי מספר השירותים שניתנים בו-זמנית
- ניהול השירות
- ניהול גרסאות של שירותים מנוהלים
- דוגמה ל-sidecar של OpenTelemetry ב-Cloud Run
- פריסת תמונות מהימנות בלבד באמצעות Binary Authorization (גרסת טרום-השקה (Preview))
אתם יכולים להפוך את ה-builds והפריסות של שירותי Cloud Run לאוטומטיים באמצעות טריגרים לפיתוח גרסת Build של Cloud Build:
אתם יכולים גם להשתמש ב-Cloud Deploy כדי להגדיר צינור עיבוד נתונים לפיתוח רציף (CD) לפריסת שירותי Cloud Run בסביבות מרובות: