בדף הבא מוסבר איך ליצור אשכולות Standard של Google Kubernetes Engine (GKE) עם צמתים שתומכים בווירטואליזציה מקוננת. מכונות וירטואליות ב-Compute Engine משתמשות בהוראות Intel VT-x כדי שמכונות וירטואליות מוטמעות יוכלו לפעול במכונה וירטואלית בסיסית של צומת GKE. אחר כך אפשר לפרוס קבוצות Pod שמשתמשות בכלים כמו QEMU כדי ליצור מכונות וירטואליות מוטמעות. אפשר להשתמש במכונות וירטואליות מקוננות כדי להריץ עומסי עבודה מיוחדים, כמו אמולטורים של Android, או עומסי עבודה שמרוויחים מה-VM כגבול בידוד.
ההשלכות על הביצועים פחות משמעותיות
בווירטואליזציה מקוננת בעזרת חומרה, יכול להיות שיהיו עומסי עבודה שפועלים במכונות וירטואליות מקוננות עם ביצועים נמוכים יותר בהשוואה להגדרות של וירטואליזציה לא מקוננת. ההשפעה על הביצועים תלויה בפרופיל העומס הספציפי, כולל מאפייני השימוש בזיכרון ובקלט/פלט.
בנוסף, יצירת מכונות וירטואליות מוטמעות במכונות הווירטואליות הבסיסיות של צמתי GKE עשויה להשפיע על הביצועים של עומסי עבודה אחרים שפועלים בצמתים האלה.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מוודאים שמדיניות הארגון תומכת ביצירת מכונות וירטואליות מוטמעות.
- בודקים את המגבלות של מכונות וירטואליות מוטמעות.
דרישות ומגבלות
כדאי להביא בחשבון את הפרטים הבאים לפני שמפעילים וירטואליזציה מקוננת ב-GKE ומאפשרים ל-Pods ליצור מכונות וירטואליות מקוננות:
- אפשר להגדיר מאגרי צמתים עם מכונות וירטואליות מוטמעות רק עם מספר מוגבל של סדרות מכונות וירטואליות. כדי לוודא אילו סדרות מכונות נתמכות, אפשר לעיין בשורה Nested virtualization בהשוואה בין סדרות מכונות.
- חובה להשתמש בסוג התמונה
UBUNTU_CONTAINERDאו בסוג התמונהCOS_CONTAINERDעם צמתים שפועלת בהם גרסה 1.28.4-gke.1083000 ואילך. - אפשר להשתמש בווירטואליזציה מקוננת רק עם אשכולות רגילים, ולא עם אשכולות של Autopilot.
- אי אפשר להשתמש בהקצאת משאבים אוטומטית של צמתים עם מאגרי צמתים שמופעלת בהם וירטואליזציה מקוננת.
- אי אפשר להשתמש בווירטואליזציה מקוננת אם האילוץ השבתת וירטואליזציה מקוננת של מכונות וירטואליות נאכף במדיניות הארגון.
- כדי ש-Pods יוכלו ליצור אינטראקציה עם מכונות וירטואליות מוטמעות, צריך להגדיר את
securityContext.privileged:true.
הפעלת וירטואליזציה מקוננת
אפשר להפעיל וירטואליזציה מקוננת כשיוצרים אשכול – על ידי הפעלת וירטואליזציה מקוננת במאגר ברירת המחדל של הצמתים – או כשיוצרים מאגר צמתים. אי אפשר להפעיל או להשבית את התכונה למאגר צמתים קיים.
בקטעים הבאים מוסבר איך ליצור מאגרי צמתים עם צמתים עם התווית nested-virtualization=enabled. אחרי ש-GKE יוצר את הצמתים, אפשר לתזמן Pods שיצרו מכונות וירטואליות מוטמעות במכונה הווירטואלית הבסיסית של הצומת.
הפעלת וירטואליזציה מקוננת באמצעות אשכול חדש מסוג Standard
יוצרים אשכול רגיל חדש עם וירטואליזציה מקוננת שמופעלת עבור מאגר הצמתים שמוגדר כברירת מחדל. GKE יוצר רק את מאגר הצמתים שמוגדר כברירת מחדל עם וירטואליזציה מקוננת מופעלת. GKE לא מפעיל באופן אוטומטי את התכונה לכל מאגרי הצמתים החדשים שנוצרים עבור האשכול:
gcloud container clusters create CLUSTER_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--machine-type=MACHINE_TYPE
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול. -
MACHINE_TYPE: סוג מכונה נתמך (אפשר לעיין בשורה 'וירטואליזציה מקוננת').
אופציונלית, בודקים שהווירטואליזציה המקוננת מופעלת בצומת במאגר הצמתים.
עכשיו אפשר לתזמן פודים שיוצרים מכונות וירטואליות מוטמעות במכונה הווירטואלית הבסיסית של הצומת.
הפעלת וירטואליזציה מקוננת באמצעות מאגר צמתים חדש
יצירת מאגר צמתים חדש עם וירטואליזציה מקוננת שמופעלת עבור אשכול רגיל קיים:
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.