הגדרת קונטיינרים לשירותים

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

כש-Cloud Run מפעיל קונטיינר, הוא מריץ את פקודת נקודת הכניסה שמוגדרת כברירת מחדל בקובץ האימג' ואת ארגומנטי הפקודה שמוגדרים כברירת מחדל. אם רוצים לשנות את נקודת הכניסה וארגומנטי הפקודה שמוגדרים כברירת מחדל לתמונה, אפשר להשתמש בשדות command ו-args בהגדרות הקונטיינר. בשדה command מציינים את הפקודה בפועל שהקונטיינר מריץ. השדה args מציין את הארגומנטים שמועברים לפקודה הזו.

שימו לב: לכל מאגר תגים אפשר להוסיף עד 1,000 ארגומנטים לכל שירות.

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

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

אם אתם פורסים שירות או פונקציה מקוד מקור, אתם צריכים גם לקבל תפקידים נוספים בפרויקט ובחשבון השירות של Cloud Build.

רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.

הגדרת יציאת מאגר לשירות

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

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

המסוף

  1. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.

  3. אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרים, אמצעי אחסון, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.

  4. לוחצים על הכרטיסייה מאגר תגים.

    תמונה

    • מציינים את היציאה שאליה רוצים לשלוח את הבקשות, אם לא רוצים להשתמש בערך ברירת המחדל 8080. הפעולה הזו מגדירה גם את משתנה הסביבה PORT.
  5. לוחצים על יצירה או על פריסה.

gcloud

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

gcloud run services update SERVICE --port PORT

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE: שם השירות.
  • PORT: היציאה שאליה נשלחות הבקשות. הערה: יציאת ברירת המחדל היא 8080.

אפשר גם להגדיר יציאות במהלך הפריסה באמצעות הפקודה:

gcloud run deploy --image IMAGE_URL --port PORT

מחליפים את 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 .

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים את המאפיין containerPort::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - containerPort: PORT
    

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE: השם של שירות 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 .
    • PORT: היציאה שאליה נשלחות הבקשות.
    • REVISION עם שם חדש של גרסה או למחוק אותה (אם היא קיימת). אם מספקים שם חדש לגרסה, חובה שהוא יעמוד בקריטריונים הבאים:
      • מתחיל ב-SERVICE-
      • הוא מכיל רק אותיות קטנות, מספרים וגם -
      • לא מסתיים ב--
      • לא חורג מ-63 תווים
      .
  3. מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:

    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"

  template {
    containers {
      name = "hello-1"
      ports {
        container_port = PORT
      }
      image = "IMAGE_URL"
    }
  }
}

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE: השם של שירות Cloud Run.
  • REGION: Google Cloud האזור. לדוגמה: europe-west1.
  • 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 .
  • PORT: היציאה שאליה נשלחות הבקשות.

הגדרת נקודת כניסה וארגומנטים

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

הפקודה והארגומנטים שצוינו בקונטיינר מבטלים את ברירת המחדל של קובץ האימג' ENTRYPOINT ושל CMD.

אפשר להגדיר את פקודת נקודת הכניסה והארגומנטים באמצעות מסוף Google Cloud , באמצעות Google Cloud CLI או באמצעות קובץ YAML כשיוצרים שירות חדש או פורסים עדכון חדש:

המסוף

  1. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.

  3. אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרים, אמצעי אחסון, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.

  4. לוחצים על הכרטיסייה מאגר תגים.

    תמונה

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

gcloud

כדי לערוך את פקודת ההתחלה והארגומנטים של שירות קיים:

gcloud run services update SERVICE --command COMMAND --args ARG1,ARG-N

מחליפים את מה שכתוב בשדות הבאים:

  • COMMAND: הפקודה שהקונטיינר צריך להפעיל איתה אם לא משתמשים בפקודה שמוגדרת כברירת מחדל.
  • ARG1: הארגומנט ששולחים לפקודת המאגר. אם יש יותר מארגומנט אחד, צריך להשתמש ברשימה מופרדת בפסיקים.

כדי לציין את נקודת הכניסה ואת הארגומנטים במהלך הפריסה של שירות חדש או קיים:

gcloud run deploy --image IMAGE_URL --command COMMAND --args ARG1,ARG-N

מחליפים את 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 .

כדי למחוק את כל הפקודות והארגומנטים של נקודות הכניסה שהגדרתם (לשחזור ברירות המחדל של הקונטיינר), מספקים מחרוזות ריקות באופן הבא:

gcloud run deploy --image IMAGE_URL --command "" --args ""

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים את המאפיינים command ו-args:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
            command:
            - COMMAND
            args:
            - ARG1
            - ARG-N

    מחליפים את מה שכתוב בשדות הבאים:

    • 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 .
    • COMMAND: הפקודה שהקונטיינר יתחיל איתה אם לא משתמשים בפקודה שמוגדרת כברירת מחדל.
    • ARG1: הארגומנט שאתם שולחים לפקודת הקונטיינר. אם משתמשים בכמה ארגומנטים, צריך לציין כל אחד מהם בשורה נפרדת – לדוגמה, כמו שמוצג כאן: ARG-N.
  3. מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

מוסיפים את השורות הבאות למשאב google_cloud_run_v2_service בקובץ התצורה של Terraform:
resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-containers"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      # Container "entry-point" command
      command = ["/server"]

      # Container "entry-point" args
      args = []
    }
  }
}

בדוגמה של משאב google_cloud_run_v2_service שלמעלה מוגדרים פקודה וארגומנטים. מחליפים את /server בפקודה שמשמשת להפעלת הקונטיינר, ומוסיפים את הארגומנטים הנדרשים למערך args.

שימוש בסימני שוויון או בפסיקים בארגומנטים

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

gcloud run deploy  \
  --args="--repo-allowlist=github.com/example/example_demo"

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

הגדרת סדר הפעלת הקונטיינרים לפריסות sidecar

כדי לציין את סדר ההפעלה של הקונטיינרים בפריסת sidecar, משתמשים בתכונה container dependencies (תלות בין קונטיינרים). מציינים את כל מאגרי התגים שיש להם תלות ומפרטים את מאגרי התגים שהם תלויים בהם: מאגרי התגים האלה מופעלים קודם. הקונטיינרים שאין להם תלות בקונטיינרים אחרים תמיד מופעלים ראשונים ובמקביל.

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

שימו לב: לקונטיינרים של ingress יש בדיקת תקינות (healthcheck) שמוגדרת כברירת מחדל בזמן ההפעלה.

אפשר להשתמש במסוף Google Cloud , ב-Google Cloud CLI או ב-YAML כדי לציין את סדר ההפעלה:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

    • כדי לערוך שירות קיים, לוחצים על השירות ברשימה ובוחרים באפשרות Edit and deploy new revision (עריכה ופריסה של עדכון חדש) כדי להציג את הטופס של פריסת העדכון.
    • כדי ליצור שירות חדש, לוחצים על Deploy container (פריסת קונטיינר) כדי להציג את הטופס Create service (יצירת שירות).
  2. בשביל שירות חדש, מציינים את שם השירות, את כתובת ה-URL של מאגר התגים של הכניסה, את הקצאת המעבד, את שליטה בתעבורת נתונים נכנסת (ingress) ואת האימות. בכרטיסייה Container(s), Volumes, Networking, Security (מאגרי נתונים, אמצעי אחסון, רשת, אבטחה):

    1. מגדירים את מאגר הכניסה.
    2. כדי להוסיף כל אחד מהמאגרים האחרים שאתם פורסים, לוחצים על הוספת מאגר.
    3. לכל המאגדים חוץ ממאגד ה-Ingress, מגדירים בדיקת תקינות של הפעלה. למאגרי Ingress יש בדיקת תקינות להפעלה שמוגדרת כברירת מחדל.
    4. אם קונטיינר מסוים צריך שקונטיינרים אחרים יופעלו לפני שהוא יופעל, משתמשים בתפריט Container startup order (סדר הפעלת הקונטיינרים) כדי לבחור את הקונטיינרים שצריכים להיות מופעלים קודם.
  3. כדי לעשות זאת בשירות קיים:

    1. לכל המאגדים חוץ ממאגד ה-Ingress, מגדירים בדיקת תקינות של הפעלה. למאגרי Ingress יש בדיקת תקינות להפעלה שמוגדרת כברירת מחדל.
    2. כל קונטיינר מוצג עם תפריט Container startup order משלו. אם קונטיינר מסוים צריך שקונטיינרים אחרים יופעלו לפני שהוא מופעל, משתמשים בתפריט Container startup order (סדר הפעלת הקונטיינרים) כדי לבחור את הקונטיינרים שצריכים להיות מופעלים קודם.
  4. מבצעים את כל ההגדרות הנדרשות האחרות, ואז לוחצים על יצירה כדי ליצור שירות חדש או על פריסה כדי לפרוס שירות קיים. ממתינים עד שהפריסה תסתיים.

gcloud

לפני שמשתמשים ב-Google Cloud CLI כדי לציין את סדר ההפעלה, צריך להגדיר בדיקת תקינות של הפעלה לכל הקונטיינרים, חוץ מקונטיינר ה-Ingress. למאגרי Ingress יש בדיקת תקינות להפעלה כברירת מחדל. אי אפשר להגדיר בדיקות תקינות באמצעות Google Cloud CLI.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי לפרוס כמה מאגרי תגים בשירות עם סדר הפעלה מוגדר, מריצים את הפקודה:

  3. gcloud run deploy SERVICE \
         --container CONTAINER_1_NAME --image='INGRESS_IMAGE' --port='CONTAINER_PORT' \
         --container CONTAINER_2_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME \
         --container CONTAINER_3_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAMECONTAINER_2_NAME

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE: השם של השירות שאתם פורסים. אפשר להשמיט את הפרמטר הזה לגמרי, אבל אם תשמיטו אותו תתבקשו להזין את שם השירות.
    • CONTAINER_PORT: היציאה שבה מאזין קונטיינר ה-Ingress לבקשות נכנסות. בניגוד לשירות עם קונטיינר יחיד, בשירות שמכיל קובצי עזר, אין יציאה שמוגדרת כברירת מחדל לקונטיינר של Ingress. צריך להגדיר באופן מפורש את יציאת הקונטיינר עבור קונטיינר הכניסה, ורק לקונטיינר אחד יכולה להיות יציאה חשופה.
    • INGRESS_IMAGE: הפניה לקובץ אימג' של קונטיינר שאליו צריך להפנות את הבקשות, לדוגמה us-docker.pkg.dev/cloudrun/container/hello:latest.
    • SIDECAR_IMAGE: הפניה לקובץ אימג' של קונטיינר sidecar.

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

    YAML

    1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

      gcloud run services describe SERVICE --format export > service.yaml
    2. מעדכנים את המאפיין container-dependencies:

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        annotations:
        name: SERVICE
      spec:
        template:
          metadata:
            annotations:
              run.googleapis.com/container-dependencies: '{"CONTAINER1":["CONTAINER2"], "CONTAINER3":["CONTAINER1","CONTAINER2"]}'
      

      מחליפים את מה שכתוב בשדות הבאים:

      • CONTAINER1: השם של הקונטיינר הראשון שתלוי בקונטיינר אחד או יותר. שימו לב שאפשר להגדיר את שם הקונטיינר ב-YAML: ‏ Cloud Run ייצור שם באופן אוטומטי אם לא צוין שם.
      • CONTAINER2: השם של הקונטיינר שצריך להפעיל לפני CONTAINER1.
      • CONTAINER3: השם של הקונטיינר השני שתלוי בקונטיינר אחד או יותר.

      בדוגמה שמוצגת בקטע ה-YAML, הפעולה CONTAINER2 מתחילה ראשונה, הפעולה CONTAINER1 מתחילה שנייה והפעולה CONTAINER3 מתחילה אחרונה.

    3. מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:

      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"
    
      template {
        containers {
          name = "CONTAINER1"
          ports {
            container_port = 8080
          }
          image = "us-docker.pkg.dev/cloudrun/container/hello"
          depends_on = ["CONTAINER2"]
        }
        containers {
          name = "CONTAINER2"
          image = "us-docker.pkg.dev/cloudrun/container/hello"
          env {
            name = "PORT"
            value = "8081"
          }
          startup_probe {
            http_get {
              port = 8081
            }
          }
        }
        containers {
          name = "CONTAINER3"
          image = "us-docker.pkg.dev/cloudrun/container/hello"
          depends_on = ["CONTAINER1", "CONTAINER2"]
          env {
            name = "PORT"
            value = "8080"
          }
          startup_probe {
            http_get {
              port = 8080
            }
          }
        }
      }
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE: השם של שירות Cloud Run.
    • REGION: Google Cloud האזור. לדוגמה: europe-west1.
    • CONTAINER1: השם של הקונטיינר הראשון שתלוי בקונטיינר אחד או יותר.
    • CONTAINER2: השם של מאגר התגים שצריך להפעיל לפני CONTAINER1.
    • CONTAINER3: השם של הקונטיינר שתלוי ב-CONTAINER1 וב-CONTAINER2.

הצגת הגדרות מאגר התגים

כדי לראות את הגדרות הקונטיינר הנוכחיות של שירות Cloud Run:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

  2. לוחצים על השירות שרוצים לראות את הפרטים שלו כדי לפתוח את הדף פרטי השירות.

  3. לוחצים על הכרטיסייה עדכונים.

  4. בחלונית הפרטים בצד שמאל, הגדרת מאגר התגים מופיעה בכרטיסייה מאגר תגים.

gcloud

  1. משתמשים בפקודה הבאה:

    gcloud run services describe SERVICE
  2. מאתרים את הגדרת מאגר התגים בתצורה שמוחזרת.