במאמר הזה מוסבר איך להגדיר את Knative Serving שפועל ב-Google Kubernetes Engine (GKE) כדי להשתמש ב-GKE Sandbox לשיפור הבידוד של עומסי העבודה מליבת המארח.
מטרות
- כאן מוסבר איך להפעיל את GKE Sandbox באשכול Knative serving.
- פריסת שירות שמוגדר להפעלה בצמתים בארגז חול.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
- במדריך הזה אנחנו מניחים שהתקנתם והגדרתם את Knative serving באשכול שלכם.
- מוודאים שסביבת שורת הפקודה מוגדרת והכלים מעודכנים:
הוספת מאגר צמתים של GKE Sandbox לאשכול Knative serving קיים
פועלים לפי השלבים להוספת מאגר צמתים שמופעלת בו האפשרות להשתמש ב-GKE Sandbox לאשכול הקיים של Knative serving. כאן פועלים עומסי העבודה שבהם בחרתם להשתמש ב-GKE Sandbox.
פריסת עומס עבודה במאגר הצמתים של GKE Sandbox
אחרי שיש לכם אשכול GKE עם מאגר צמתים שמופעל בו GKE Sandbox, צריך לעדכן את הגדרת Knative serving. בנוסף, צריך לעדכן את המפרט של כל שירות כדי להשתמש בצמתים החדשים. צריך לבצע את העדכונים האלה רק פעם אחת.
הפעלת דגל התכונה של מחלקת זמן הריצה
בקטע הזה מוסבר איך להפעיל את מחלקת זמן הריצה של Kubernetes באמצעות התכונה Knative ודגלי ההרחבה ב-config-features ConfigMap במרחב השמות knative-serving. כדי להפעיל את מחלקת זמן הריצה, מגדירים את האפשרות ConfigMap
kubernetes.podspec-runtimeclassname ל-enabled. מידע נוסף זמין במאמרים Kubernetes runtime class וConfiguring flags במסמכי Features and extensions של Knative.
פותחים את
config-featuresConfigMap לעריכה:kubectl edit configmap config-features -n knative-servingמוסיפים את דגל התכונה
kubernetes.podspec-runtimeclassname: enabledלשדהdata.במקום השלבים הקודמים, אפשר להריץ את הפקודה הבאה כדי להוסיף את הדגל הזה לתכונות של Knative:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-servingכדי לוודא שהעריכות בוצעו, מריצים את הפקודה הבאה כדי להציג את ConfigMap:
kubectl get configmap config-features -n knative-serving -o yamlקובץ ה-ConfigMap אמור להיראות כך:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
פריסת שירות שהוגדר להרצה ב-GKE Sandbox
אחרי שמפעילים את ה-feature flag של מחלקת זמן הריצה, אפשר ליצור שירותים שמציינים runtimeClassName במפרט. מגדירים את runtimeClassName ל-gvisor כדי לציין ששירות צריך לפעול במאגר הצמתים של GKE Sandbox.
מריצים את הפקודה הבאה כדי לפרוס אפליקציית Knative עם הכיתוב Hello World:
cat <<EOF | kubectl apply -f - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: runtimeClassName: gvisor containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: "gVisor User" EOFאם התכונה של שם מחלקת זמן הריצה של Kubernetes מופעלת, הפקודה אמורה להסתיים ללא שגיאות.
כדי להריץ את הפודים של השירות ואת מחלקת זמן הריצה שהוגדרה להם, מריצים את הפקודה:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'הפלט אמור להיראות כך:
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running
המאמרים הבאים
אחרי שמוודאים שאפשר לפרוס אפליקציות לא מהימנות במאגר הצמתים החדש של GKE Sandbox, אפשר להוסיף את runtimeClassName: gvisor למפרטי Kubernetes של שירותים לא מהימנים אחרים שרוצים להריץ במאגרי צמתים של GKE Sandbox.
מקורות מידע נוספים:
- מסמכי GKE Sandbox מסמכים להבנת המגבלות שעשויות לפגוע בתאימות לשירותים מסוימים.
- מסמכי gVisor בנושא פריסת שירותי Knative כוללים מדריך מפורט יותר לפריסת אפליקציות Knative ב-gVisor (שנקרא גם GKE Sandbox).