בדף הזה מוסבר איך לפרוס שירותים חדשים ועדכונים חדשים ל-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/regioncompute/zonerun/clusterrun/cluster_locationrun/platformrun/region
מריצים את הפקודה הבאה gcloud config כדי לראות את ההגדרות של התצורה default:
gcloud config configurations describe default
המסוף
כדי לפרוס קובץ אימג' של קונטיינר:
נכנסים אל Knative serving במסוף Google Cloud :
לוחצים על יצירת שירות כדי להציג את הדף יצירת שירות.
בטופס:
בתפריט הנפתח, בוחרים אחד מאשכולות GKE הזמינים לשירות.
מזינים את שם השירות הרצוי. שמות השירותים צריכים להיות ייחודיים לכל אזור ופרויקט או לכל אשכול. אי אפשר לשנות את שם השירות בהמשך.
בקטע קישוריות:
- בוחרים באפשרות Internal אם רוצים להגביל את הגישה רק לשירותים אחרים של Knative serving או לשירותים באשכול שמשתמשים ב-Istio.
- בוחרים באפשרות חיצוני כדי לאפשר גישה חיצונית לשירות.
שימו לב שאפשר לשנות את אפשרות הקישוריות בכל שלב, כמו שמתואר במאמר בנושא שינוי הגדרות הקישוריות של שירותים.
לוחצים על הבא כדי להמשיך לדף השני של טופס יצירת השירות.
בטופס:
בתיבת הטקסט כתובת ה-URL של קובץ אימג' של קונטיינר, מציינים את כתובת ה-URL של תמונה ממאגר תגים נתמך, לדוגמה:
us-docker.pkg.dev/cloudrun/container/hello:latestאפשר גם ללחוץ על הצגת הגדרות מתקדמות ולעבור בין הכרטיסיות שמופיעות כדי להגדיר:
לוחצים על יצירה כדי לפרוס את התמונה ב-Knative serving ומחכים עד שהפריסה תסתיים.
הרגע פרסת שירות באשכול שמופעל בו Knative serving.
שורת הפקודה
כדי לפרוס קובץ אימג' של קונטיינר:
מריצים את הפקודה
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
ממתינים עד שהפריסה תסתיים. אחרי שתשלימו את התהליך בהצלחה, תוצג הודעת הצלחה וכתובת ה-URL של השירות שנפרס.
YAML
אפשר לאחסן את מפרט השירות בקובץ YAML ואז לפרוס אותו באמצעות Google Cloud CLI.
יוצרים קובץ
service.yamlחדש עם התוכן הזה:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
החלפה
- SERVICE בשם של שירות Knative serving
- IMAGE בכתובת ה-URL של קובץ אימג' של קונטיינר.
אפשר גם לציין הגדרות נוספות, כמו משתני סביבה או מגבלות זיכרון.
מפעילים את השירות החדש באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
פריסת גרסה חדשה של שירות קיים
אפשר לפרוס עדכון חדש באמצעות מסוף Google Cloud , שורת הפקודה gcloud או קובץ תצורה מסוג YAML.
שימו לב ששינוי של הגדרות קונפיגורציה יוצר גרסה חדשה, גם אם לא בוצע שינוי בקובץ אימג' של קונטיינר. כל גרסה שנוצרת היא בלתי ניתנת לשינוי.
לוחצים על הכרטיסייה עם ההוראות לשימוש בכלי הרצוי.
המסוף
כדי לפרוס גרסה חדשה של שירות קיים:
נכנסים אל Knative serving במסוף Google Cloud :
מאתרים את השירות שרוצים לעדכן ברשימת השירותים ולוחצים עליו כדי לפתוח את הפרטים שלו.
לוחצים על עריכה ופריסה של גרסה חדשה. מוצג טופס הפריסה של הגרסה:
אם צריך, ספקו את כתובת ה-URL של קובץ האימג' של הקונטיינר החדש שרוצים לפרוס.
אפשר גם להגדיר:
כדי לשלוח את כל התנועה לגרסה החדשה, מסמנים את התיבה Serve this revision immediately (הצגת הגרסה הזו באופן מיידי). כדי להשיק בהדרגה גרסה חדשה, מבטלים את הסימון של תיבת הסימון הזו. כך לא יופנה תנועת גולשים לגרסה החדשה. אחרי הפריסה, פועלים לפי ההוראות להשקה הדרגתית.
לוחצים על פריסה וממתינים לסיום הפריסה.
שורת הפקודה
כדי לפרוס קובץ אימג' של קונטיינר:
מריצים את הפקודה
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
ממתינים עד שהפריסה תסתיים. אחרי שתשלימו את התהליך בהצלחה, תוצג הודעת הצלחה וכתובת ה-URL של השירות שנפרס.
YAML
אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export.
אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace.
חשוב לוודא שמשנים רק את המאפיינים שצוינו.
מורידים את ההגדרה של השירות לקובץ בשם
service.yamlבסביבת העבודה המקומית:gcloud run services describe SERVICE --format export > service.yaml
מחליפים את SERVICE בשם של שירות Knative serving.
בקובץ המקומי, מעדכנים את הגדרות הגרסה בכל מאפיין צאצא של
spec.template.פורסים את הגרסה החדשה:
gcloud run services replace service.yaml
פריסת תמונות מפרויקטים אחרים Google Cloud
אפשר לפרוס תמונות של קונטיינרים מפרויקטים אחרים Google Cloud אם מגדירים את הרשאות ה-IAM הנכונות:
במסוף Google Cloud , פותחים את הפרויקט של שירות Knative serving.
משיגים את פרטי חשבון השירות:
במקרה של אשכולות ב- Google Cloud, מעתיקים את כתובת האימייל של חשבון השירות של Compute Engine שמוגדר כברירת מחדל. היא מסתיימת ב-@developer.gserviceaccount.com
לגבי אשכולות אחרים, צריך ליצור Google Cloud חשבון שירות ולהוריד את פרטי הכניסה. מוסיפים את פרטי הכניסה האלה כברירת המחדל
imagePullSecretsשל חשבון השירות ב-Kubernetes.
פותחים את הפרויקט שכולל את מאגר התמונות של מאגר המכולות שרוצים להשתמש בו.
לוחצים על הוספה כדי להוסיף חשבון משתמש חדש.
בתיבת הטקסט New principals, מדביקים את כתובת האימייל של חשבון השירות שהעתקתם קודם.
ברשימה הנפתחת Select a role, בוחרים את התפקיד לקריאה מהרישום:
- Artifact Registry, כולל מאגרי gcr.io ב-Artifact Registry: Artifact Registry -> קורא של Artifact Registry
- Container Registry: Storage -> Storage Object Viewer
פורסים את קובץ האימג' של הקונטיינר בפרויקט שמכיל את שירות Knative Serving.
כדי לשפר את האבטחה, אפשר להגביל את הגישה:
- Artifact Registry: מעניקים את התפקיד במאגר שבו מאוחסנים קובצי האימג' של הקונטיינרים.
- Container Registry: מקצים את התפקיד בקטגוריה של Cloud Storage שבה מאוחסנים קובצי האימג' של הקונטיינרים.
פריסה של תמונות קונטיינרים פרטיות ממאגרי קונטיינרים אחרים
בקטע הזה מוסבר איך מגדירים הרשאות מתאימות לפריסת תמונות של קונטיינרים ממאגר פרטי שרירותי ל-Knative serving. במאגר פרטי של קונטיינרים נדרשים פרטי כניסה כדי לגשת לקובץ האימג' של הקונטיינר. שימו לב: אין צורך לבצע את השלבים האלה כדי לפרוס תמונות פרטיות של קונטיינרים מ-Container Registry (הוצא משימוש) או מ-Artifact Registry באותו פרויקט כמו האשכול.
כדי לפרוס קובץ אימג' פרטי של קונטיינר, צריך ליצור סוד מסוג imagePullSecret ב-Kubernetes ולשייך אותו לחשבון שירות:
יוצרים סוד של
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 בסיסמה שלכם למאגר הקונטיינרים.
פותחים את חשבון השירות שמוגדר כברירת מחדל:
kubectl edit serviceaccount default --namespace default
לכל מרחב שמות באשכול Kubernetes יש חשבון שירות שמוגדר כברירת מחדל בשם
default. חשבון השירות שמוגדר כברירת מחדל משמש לשליפת קובץ האימג' של הקונטיינר, אלא אם מציינים אחרת כשפורסים את שירות Knative Serving.מוסיפים את הסוד
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: