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

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

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

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

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

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

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

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

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

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

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

אפשר להשתמש בקונטיינרים מכל מאגר קונטיינרים, כמו 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.

שורת הפקודה

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

  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, בוחרים את התפקיד שרוצים לקרוא ממנו את הנתונים במאגר:

    • ‫Artifact Registry, כולל מאגרי gcr.io ב-Artifact Registry: ‫Artifact Registry -> קורא של Artifact Registry
    • Container Registry: אחסון -> צפייה באובייקטים באחסון
  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 מופעלת

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

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

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

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

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

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