פריסת תמונות של קונטיינרים

בדף הזה מוסבר איך לפרוס שירותים חדשים ועדכונים חדשים ל-Knative serving.

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

כדי להשתמש ב-Google Cloud CLI, קודם צריך להגדיר את כלי שורת הפקודה.

התחברות לאשכולות GKE

כדי לפרוס שירותים ב-Knative serving, צריך להתחבר לאשכול GKE.

מידע נוסף על חיבור לאשכולות GKE, כולל אפשרויות נוספות, זמין במאמרים הבאים:

ההרשאות שנדרשות לפריסה

אתם צריכים הרשאות ליצור, לעדכן ולמחוק ב-apiGroup serving.knative.dev וב-kind Service, ובנוסף אתם צריכים אחד מהתפקידים הבאים בניהול הזהויות והרשאות הגישה:

תמונות שאפשר לפרוס

אין הגבלה על גודל קובץ אימג' של קונטיינר שאפשר לפרוס.

אפשר להשתמש בקונטיינרים מכל מאגר קונטיינרים, כמו Docker Hub. מידע על פריסת תמונות פרטיות ממאגרי תמונות שונים מ-Container Registry או מ-Artifact Registry זמין במאמר פריסת תמונות פרטיות של קונטיינרים ממאגרי תמונות אחרים של קונטיינרים.

פריסת שירות חדש

אפשר לציין קובץ אימג' של קונטיינר עם תג (לדוגמה, gcr.io/my-project/my-image:latest) או עם תקציר מדויק (לדוגמה, gcr.io/my-project/my-image@sha256:41f34ab970ee...).

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

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

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

הגדרות ברירת המחדל של המיקום gcloud

אם הגדרתם בעבר מיקום בהגדרות של default ב-Google Cloud CLI, פקודות gcloud ישתמשו בערכים האלה כברירת מחדל, כולל:

  • compute/region
  • compute/zone
  • run/cluster
  • run/cluster_location
  • run/platform
  • run/region

מריצים את הפקודה הבאה gcloud config כדי לראות את ההגדרות של התצורה default:

gcloud config configurations describe default

המסוף

כדי לפרוס קובץ אימג' של קונטיינר:

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

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

    בטופס:

    1. בתפריט הנפתח, בוחרים אחד מאשכולות GKE הזמינים לשירות.

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

    3. בקטע קישוריות:

      • בוחרים באפשרות Internal אם רוצים להגביל את הגישה רק לשירותים אחרים של Knative serving או לשירותים באשכול שמשתמשים ב-Istio.
      • בוחרים באפשרות חיצוני כדי לאפשר גישה חיצונית לשירות.

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

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

      בטופס:

      1. בתיבת הטקסט כתובת ה-URL של קובץ אימג' של קונטיינר, מציינים את כתובת ה-URL של תמונה ממאגר תגים נתמך, לדוגמה: us-docker.pkg.dev/cloudrun/container/hello:latest

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

      3. לוחצים על יצירה כדי לפרוס את התמונה ב-Knative serving ומחכים עד שהפריסה תסתיים.

    הרגע פרסת שירות באשכול שמופעל בו Knative serving.

שורת הפקודה

כדי לפרוס קובץ אימג' של קונטיינר:

  1. מריצים את הפקודה gcloud run deploy:

    gcloud run deploy SERVICE --image IMAGE_URL

    • מחליפים את SERVICE בשם השירות שרוצים לפרוס. אם השירות שצוין לא קיים, נוצר שירות חדש.

    • מחליפים את IMAGE_URL בהפניה לקובץ אימג' של קונטיינר, לדוגמה, gcr.io/cloudrun/hello.

    • אפשרויות פריסה נוספות:

      • כדי לפרוס למרחב שמות שאינו ברירת המחדל, צריך לציין את מרחב השמות באמצעות הפרמטר --namespace.

      • כדי לפרוס למיקום שאינו הגדרת ברירת המחדל, צריך לציין את name ו-location של האשכול באמצעות הפרמטרים --cluster ו---cluster-location:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • אפשר להגדיר אפשרויות קישוריות באמצעות הדגל --connectivity כמו שמתואר במאמר שינוי הגדרות הקישוריות לשירות כדי לציין גישה פנימית או חיצונית.

      • במילוי בקשות מסוג Knative ב-VMware, צריך לכלול את הפרמטר --kubeconfig ולציין את קובץ התצורה:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. ממתינים עד שהפריסה תסתיים. אחרי שתשלימו את התהליך בהצלחה, תוצג הודעת הצלחה וכתובת ה-URL של השירות שנפרס.

YAML

אפשר לאחסן את מפרט השירות בקובץ YAML ואז לפרוס אותו באמצעות Google Cloud CLI.

  1. יוצרים קובץ service.yaml חדש עם התוכן הזה:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    החלפה

    • SERVICE בשם של שירות Knative serving
    • IMAGE בכתובת ה-URL של קובץ אימג' של קונטיינר.

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

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

    gcloud run services replace service.yaml

פריסת גרסה חדשה של שירות קיים

אפשר לפרוס עדכון חדש באמצעות מסוף Google Cloud , שורת הפקודה gcloud או קובץ תצורה מסוג YAML.

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

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

המסוף

כדי לפרוס גרסה חדשה של שירות קיים:

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

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

  3. לוחצים על עריכה ופריסה של גרסה חדשה. מוצג טופס הפריסה של הגרסה:

  4. אם צריך, ספקו את כתובת ה-URL של קובץ האימג' של הקונטיינר החדש שרוצים לפרוס.

  5. אפשר גם להגדיר:

  6. כדי לשלוח את כל התנועה לגרסה החדשה, מסמנים את התיבה Serve this revision immediately (הצגת הגרסה הזו באופן מיידי). כדי להשיק בהדרגה גרסה חדשה, מבטלים את הסימון של תיבת הסימון הזו. כך לא יופנה תנועת גולשים לגרסה החדשה. אחרי הפריסה, פועלים לפי ההוראות להשקה הדרגתית.

  7. לוחצים על פריסה וממתינים לסיום הפריסה.

שורת הפקודה

כדי לפרוס קובץ אימג' של קונטיינר:

  1. מריצים את הפקודה gcloud run services update:

    gcloud run services update SERVICE --image IMAGE_URL
    • לכל שינוי מוקצה באופן אוטומטי סיומת של מספר גרסה. אם רוצים לציין סיומת משלכם לציון מספר הגרסה, מוסיפים את הפרמטר --revision-suffix.

    • מחליפים את SERVICE בשם השירות שרוצים לפרוס. אם השירות שצוין לא קיים, נוצר שירות חדש.

    • מחליפים את IMAGE_URL בהפניה לקובץ אימג' של קונטיינר, לדוגמה, gcr.io/cloudrun/hello.

    • אפשרויות פריסה נוספות:

      • כדי לפרוס למרחב שמות שאינו ברירת המחדל, צריך לציין את מרחב השמות באמצעות הפרמטר --namespace.

      • כדי לפרוס למיקום שאינו הגדרת ברירת המחדל, צריך לציין את name ו-location של האשכול באמצעות הפרמטרים --cluster ו---cluster-location:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • אפשר להגדיר אפשרויות קישוריות באמצעות הדגל --connectivity כמו שמתואר במאמר שינוי הגדרות הקישוריות לשירות כדי לציין גישה פנימית או חיצונית.

      • במילוי בקשות מסוג Knative ב-VMware, צריך לכלול את הפרמטר --kubeconfig ולציין את קובץ התצורה:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. ממתינים עד שהפריסה תסתיים. אחרי שתשלימו את התהליך בהצלחה, תוצג הודעת הצלחה וכתובת ה-URL של השירות שנפרס.

YAML

אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export. אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace. חשוב לוודא שמשנים רק את המאפיינים שצוינו.

  1. מורידים את ההגדרה של השירות לקובץ בשם service.yaml בסביבת העבודה המקומית:

    gcloud run services describe SERVICE --format export > service.yaml

    מחליפים את SERVICE בשם של שירות Knative serving.

    1. בקובץ המקומי, מעדכנים את הגדרות הגרסה בכל מאפיין צאצא של spec.template.

    2. פורסים את הגרסה החדשה:

      gcloud run services replace service.yaml

פריסת תמונות מפרויקטים אחרים Google Cloud

אפשר לפרוס תמונות של קונטיינרים מפרויקטים אחרים Google Cloud אם מגדירים את הרשאות ה-IAM הנכונות:

  1. במסוף Google Cloud , פותחים את הפרויקט של שירות Knative serving.

  2. כניסה לדף IAM

  3. משיגים את פרטי חשבון השירות:

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

  5. כניסה לדף IAM

  6. לוחצים על הוספה כדי להוסיף חשבון משתמש חדש.

  7. בתיבת הטקסט New principals, מדביקים את כתובת האימייל של חשבון השירות שהעתקתם קודם.

  8. ברשימה הנפתחת Select a role, בוחרים את התפקיד לקריאה מהרישום:

  9. פורסים את קובץ האימג' של הקונטיינר בפרויקט שמכיל את שירות Knative Serving.

כדי לשפר את האבטחה, אפשר להגביל את הגישה:

  • ‫Artifact Registry: מעניקים את התפקיד במאגר שבו מאוחסנים קובצי האימג' של הקונטיינרים.
  • ‫Container Registry: מקצים את התפקיד בקטגוריה של Cloud Storage שבה מאוחסנים קובצי האימג' של הקונטיינרים.

פריסה של תמונות קונטיינרים פרטיות ממאגרי קונטיינרים אחרים

בקטע הזה מוסבר איך מגדירים הרשאות מתאימות לפריסת תמונות של קונטיינרים ממאגר פרטי שרירותי ל-Knative serving. במאגר פרטי של קונטיינרים נדרשים פרטי כניסה כדי לגשת לקובץ האימג' של הקונטיינר. שימו לב: אין צורך לבצע את השלבים האלה כדי לפרוס תמונות פרטיות של קונטיינרים מ-Container Registry (הוצא משימוש) או מ-Artifact Registry באותו פרויקט כמו האשכול.

כדי לפרוס קובץ אימג' פרטי של קונטיינר, צריך ליצור סוד מסוג imagePullSecret ב-Kubernetes ולשייך אותו לחשבון שירות:

  1. יוצרים סוד של imagePullSecret בשם container-registry:

    kubectl create secret docker-registry container-registry \
      --docker-server=DOCKER_REGISTRY_SERVER \
      --docker-email=REGISTRY_EMAIL \
      --docker-username=REGISTRY_USER \
      --docker-password=REGISTRY_PASSWORD
    • מחליפים את DOCKER_REGISTRY_SERVER ב-FQDN של הרישום הפרטי (לדוגמה: https://gcr.io/ ל-Container Registry או https://hub.docker.com‎ ל-DockerHub).
    • מחליפים את REGISTRY_EMAIL בכתובת האימייל.
    • מחליפים את REGISTRY_USER בשם המשתמש שלכם במאגר הקונטיינרים.

      אם אתם משתמשים ב-Container Registry או ב-Artifact Registry ורוצים לאחסן ולשלוף פרטי כניסה לטווח ארוך במקום להעביר אסימוני גישה לטווח קצר, כדאי לעיין במאמר שיטות אימות: קובץ מפתח JSON.

    • מחליפים את REGISTRY_PASSWORD בסיסמה שלכם למאגר הקונטיינרים.

  2. פותחים את חשבון השירות שמוגדר כברירת מחדל:

    kubectl edit serviceaccount default --namespace default

    לכל מרחב שמות באשכול Kubernetes יש חשבון שירות שמוגדר כברירת מחדל בשם default. חשבון השירות שמוגדר כברירת מחדל משמש לשליפת קובץ האימג' של הקונטיינר, אלא אם מציינים אחרת כשפורסים את שירות Knative Serving.

  3. מוסיפים את הסוד imagePullSecret שנוצר לחשבון השירות שמוגדר כברירת מחדל:

    imagePullSecrets:
    - name: container-registry
    

    חשבון השירות שלכם אמור להיראות עכשיו כך:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

מעכשיו, לכל פוד חדש שייווצר במרחב השמות default הנוכחי יהיה מוגדר הסוד imagePullSecret.

פריסה עם הזרקה אוטומטית של קובץ sidecar

כדי לפרוס את השירות עם הזרקת sidecar של Istio מופעלת, אפשר לעיין במאמר בנושא הזרקת sidecar אוטומטית מופעלת במסמכי Cloud Service Mesh.

פריסת שירותים ברשת פנימית

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

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

אחרי שמפעילים שירות חדש, אפשר:

אתם יכולים להפוך את הגרסאות build והפריסות של שירותי Knative Serving לאוטומטיות באמצעות Cloud Build Triggers: