בדף הזה מוסבר איך לפרוס שירותים חדשים ועדכונים חדשים ל-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/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.
שורת הפקודה
כדי לפרוס קובץ אימג' של קונטיינר:
מריצים את הפקודה
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: אחסון -> צפייה באובייקטים באחסון
פורסים את קובץ האימג' של הקונטיינר בפרויקט שמכיל את שירות 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 מופעלת
כדי לפרוס את השירות עם הזרקת קובץ עזר של Istio מופעלת, אפשר לעיין במאמר בנושא הזרקת קובץ עזר אוטומטית מופעלת במסמכי Cloud Service Mesh.
פריסת שירותים ברשת פנימית
כדי לפרוס שירותים ברשת פנימית, צריך להגדיר רשת פנימית פרטית.
המאמרים הבאים
אחרי שמפעילים שירות חדש, אפשר:
- השקות הדרגתיות, החזרת גרסאות למצב קודם, העברת תנועה
- הצגת יומני שירות
- מעקב אחרי ביצועי השירות
- הגדרת השירותים לדוגמה, הגדרת מגבלות זיכרון, הגדרת משתני סביבה או שינוי של מספר הפעולות המקבילות.
- ניהול:
אתם יכולים להפוך את הגרסאות והפריסות של שירותי Knative serving לאוטומטיות באמצעות Cloud Build Triggers: