בדף הבא מוסבר איך ליצור אשכולות Standard של Google Kubernetes Engine (GKE) עם צמתים שתומכים בווירטואליזציה מקוננת. מכונות וירטואליות ב-Compute Engine משתמשות בהוראות Intel VT-x כדי שמכונות וירטואליות מוטמעות יוכלו לפעול במכונה וירטואלית בסיסית של צומת GKE. אחר כך אפשר לפרוס קבוצות Pod שמשתמשות בכלים כמו QEMU כדי ליצור מכונות וירטואליות מוטמעות. אתם יכולים להשתמש במכונות וירטואליות מקוננות כדי להריץ עומסי עבודה מיוחדים, כמו אמולטורים של Android, או עומסי עבודה שמרוויחים מהמכונה הווירטואלית כגבול בידוד, כמו מיקרו-מכונות וירטואליות שמשתמשות בקונטיינרים של Kata בקוד פתוח.
במאמר הפעלת Kata Containers ב-GKE יש הדרכה על שימוש ב-Kata Containers בקוד פתוח עם ארגז החול לסוכנים ב-GKE.
ההשלכות על הביצועים פחות משמעותיות
בווירטואליזציה מקוננת עם שיפור מהירות באמצעות חומרה, יכול להיות שיהיה שיפור בביצועים של עומסי העבודה שפועלים במכונות הווירטואליות המקוננות, בהשוואה להגדרות של וירטואליזציה לא מקוננת. ההשפעה על הביצועים תלויה בפרופיל העומס הספציפי, כולל מאפייני השימוש בזיכרון ובקלט/פלט.
בנוסף, יצירת מכונות וירטואליות מוטמעות במכונות הווירטואליות הבסיסיות של צמתי GKE עשויה להשפיע על הביצועים של עומסי עבודה אחרים שפועלים בצמתים האלה.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- לוודא שמדיניות הארגון תומכת ביצירת מכונות וירטואליות מוטמעות.
- מעיינים בהגבלות על מכונות וירטואליות מוטמעות.
דרישות ומגבלות
כדאי להביא בחשבון את הפרטים הבאים לפני שמפעילים וירטואליזציה מקוננת ב-GKE ומאפשרים ל-Pods ליצור מכונות וירטואליות מקוננות:
- אפשר להגדיר מאגרי צמתים עם מכונות וירטואליות מוטמעות רק עם מספר מוגבל של סדרות מכונות וירטואליות. כדי לוודא אילו סדרות של מכונות נתמכות, אפשר לעיין בשורה Nested virtualization בהשוואה בין סדרות של מכונות.
- חובה להשתמש בסוג התמונה
UBUNTU_CONTAINERDאו בסוג התמונהCOS_CONTAINERDעם צמתים שפועלת בהם גרסה 1.28.4-gke.1083000 ואילך. - אפשר להשתמש בווירטואליזציה מוטמעת רק עם אשכולות רגילים, ולא עם אשכולות של Autopilot.
- אי אפשר להשתמש בהקצאת משאבים אוטומטית של צמתים עם מאגרי צמתים שמופעלת בהם וירטואליזציה מקוננת.
- אי אפשר להשתמש בווירטואליזציה מקוננת אם האילוץ השבתת וירטואליזציה מקוננת של מכונות וירטואליות נאכף במדיניות הארגון.
- צריך להגדיר את
securityContext.privileged:trueכדי ש-Pods יוכלו ליצור אינטראקציה עם מכונות וירטואליות מוטמעות.
הפעלת וירטואליזציה מקוננת
אפשר להפעיל וירטואליזציה מקוננת כשיוצרים אשכול – על ידי הפעלת וירטואליזציה מקוננת עבור מאגר הצמתים שמוגדר כברירת מחדל – או כשיוצרים מאגר צמתים. אי אפשר להפעיל או להשבית את התכונה למאגר צמתים קיים.
בקטעים הבאים מוסבר איך ליצור מאגרי צמתים עם צמתים עם התווית nested-virtualization=enabled. אחרי ש-GKE יוצר את הצמתים, אפשר לתזמן את ה-Pods שיצרו מכונות וירטואליות מוטמעות במכונה הווירטואלית הבסיסית של הצומת.
הפעלת וירטואליזציה מקוננת באמצעות אשכול Standard חדש
יוצרים אשכול רגיל חדש עם וירטואליזציה מקוננת שמופעלת עבור מאגר הצמתים שמוגדר כברירת מחדל. GKE יוצר רק את מאגר הצמתים שמוגדר כברירת מחדל עם וירטואליזציה מקוננת מופעלת. GKE לא מפעיל באופן אוטומטי את התכונה לכל מאגרי הצמתים החדשים שנוצרים עבור האשכול:
המסוף
- נכנסים לדף Create a Kubernetes cluster במסוף Google Cloud .
- מגדירים את האשכול.
- בתפריט הניווט, בוחרים באפשרות default-pool בקטע NODE POOLS (מאגרי צמתים). אחר כך בוחרים באפשרות צמתים.
- בקטע Machine configuration, בוחרים סוג מכונה נתמך (ראו את השורה Nested virtualization).
- אחרי הקטע Reservations, מסמנים את התיבה Enable nested virtualization.
- כדי ליצור את האשכול, לוחצים על Create.
gcloud
gcloud container clusters create CLUSTER_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--machine-type=MACHINE_TYPE
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול. -
MACHINE_TYPE: סוג מכונה נתמך (אפשר לעיין בשורה 'וירטואליזציה מקוננת').
אופציונלי, בודקים שהווירטואליזציה המקוננת מופעלת עבור צומת במאגר הצמתים.
עכשיו אפשר לתזמן פודים שיוצרים מכונות וירטואליות מוטמעות במכונה הווירטואלית הבסיסית של הצומת.
הפעלת וירטואליזציה מקוננת באמצעות מאגר צמתים חדש
ליצור מאגר צמתים חדש עם וירטואליזציה מקוננת שמופעלת עבור אשכול קיים מסוג Standard:
המסוף
נכנסים לדף Kubernetes clusters במסוף Google Cloud .
כדי לפתוח את דף הפרטים של האשכול, לוחצים על השם של האשכול שבו רוצים ליצור מאגר צמתים חדש עם הפעלת וירטואליזציה מקוננת.
מגדירים את מאגר הצמתים.
לוחצים על הכרטיסייה Nodes.
בכותרת של הקטע Node pools, לוחצים על add_box Create user-managed node pool.
בתפריט הניווט, לוחצים על Nodes (צמתים).
בקטע Machine configuration, בוחרים סוג מכונה נתמך (ראו את השורה Nested virtualization).
אחרי הקטע Reservations, מסמנים את התיבה Enable nested virtualization.
כדי ליצור את מאגר הצמתים, לוחצים על Create (יצירה).
gcloud
gcloud container node-pools create NODEPOOL_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE
מחליפים את מה שכתוב בשדות הבאים:
-
NODEPOOL_NAME: השם של מאגר הצמתים שבו מופעלת וירטואליזציה מקוננת. -
CLUSTER_NAME: שם האשכול. -
MACHINE_TYPE: סוג מכונה נתמך (אפשר לעיין בשורה 'וירטואליזציה מקוננת').
אופציונלי, בודקים שהווירטואליזציה המקוננת מופעלת עבור צומת במאגר הצמתים.
עכשיו אפשר לתזמן פודים שיוצרים מכונות וירטואליות מוטמעות במכונה הווירטואלית הבסיסית של הצומת.
תזמון של Pod לצומת שתומך בווירטואליזציה מקוננת
כדי לתזמן הפעלה של Pod בצומת שבו מופעלת וירטואליזציה מקוננת, מוסיפים את בורר הצמתים הבא למפרט:
nodeSelector:
nested-virtualization: enabled
בנוסף, כדי שה-Pod יתחבר למכונה וירטואלית מוטמעת, צריך להגדיר את ה-Pod כבעל הרשאת גישה על ידי הגדרת securityContext.privileged:true.