וירטואליזציה ברמת מערכת ההפעלה

וירטואליזציה ברמת מערכת ההפעלה הוא שיטת וירטואליזציה במערכות מחשב, בעיקר בשרתים המבוססת על יכולת ליבת מערכת ההפעלה לאפשר את קיומם של מספר מרחבי משתמש נפרדים, החולקים ליבת מערכת הפעלה משותפת. מופעים כאלה, אשר נקראים לפעמים קונטיינר (Container) או קונטיינר תוכנה (software container), מנועי וירטואליזציה (VEs) או jails (כדוגמת FreeBSD jail(אנ') או chroot jail), עשויים להיראות כמו שרת ממשי מנקודת מבט של בעליו והמשתמשים. וירטואליזציה ברמת מערכת ההפעלה מאפשרת להתקין ולשלב יישומיי תוכנה במהירות ובאמינות בסביבות מחשב שונות. במערכות הפעלה דמויות יוניקס ניתן לראות בטכנולוגיה זו מימוש מתקדם למנגנון chroot סטנדרטי. בנוסף לבידוד מנגנונים, ליבת מערכת ההפעלה מספקת לעיתים קרובות יכולות של ניהול משאבים כדי להגביל את ההשפעה של הפעולות בקונטיינר אחד על קונטיינרים אחרים. במערכת מחשב ישנו בדרך כלל מרחב משתמש יחיד אשר כולל אוסף של ספריות תוכנה, מערכת קבצים, הגדרות אופן העבודה, ושירותים שונים אשר משמשים את יישומי המחשב השונים. מרחבי המשתמש במערכות מחשב שונות יכולים להיבדל זה מזה, בין השאר בגרסאות הספריות, בארגון ובתכולת מערכת הקבצים, באוסף השירותים הקיים בהם או בהגדרות אופן העבודה. מרחבי משתמש של המערכות השונות עלולים שלא להתאים לצרכים של יישום חדש, אשר פותח ונבדק בסביבות מחשב בהן תוכן מרחב המשתמש היה שונה. ההבדלים במרחב המשתמש עלולים להקשות על ההתקנה והשילוב של היישום החדש או לגרום לכך שהיישום יתפקד באופן פגום או באופן שונה מהאופן בו תפקד בסביבה בה פותח ונבדק. השימוש בווירטואליזציה ברמת מערכת ההפעלה מאפשר קיום מספר רב של מרחבי משתמש במקביל. כך ניתן להתאים מרחב משתמש שונה ונפרד לכל יישום ויישום. כל יישום נארז, על ידי ספק היישום, במעין מכולה (Container) יחד עם מרחב משתמש תואם, הזהה למרחב המשתמש בו פותח וניבדק. חבילה זו מותקנת במערכת המחשב. באופן זה ניתן להבטיח התקנה ושילוב פשוטים של היישום החדש, ואת התפקוד התקין והאחיד של היישום במערכות מחשב שונות. בניגוד למכונה וירטואלית, כל מרחבי המשתמש והיישומים חייבים להיות מותאמים לאותה ליבת מערכת הפעלה. וירטואליזציה ברמת מערכת ההפעלה מקובלת בסביבות אירוח וירטואלי, שם היא משמשת להקצאה מאובטחת של משאבי חומרה מוגבלים בין מספר גדול של משתמשים שאינם בוטחים זה בזה. מנהלי מערכת יכולים להשתמש בווירטואליזציה, במידה פחותה, על מנת לאחד חומרה של שרתים באמצעות העברה של שירותים הנמצאים על מארחים נפרדים למספר קונטיינרים שיושבים על שרת אחד. שימושים טיפוסיים נוספים כוללים הפרדת מספר יישומים למספר קונטיינרים נפרדים כדי להשיג אבטחה משופרת, חוסר תלות בחומרה, וכדי ליהנות מיכולות של ניהול משאבים. מימושים של וירטואליזציה ברמת מערכת ההפעלה אשר תומכים בנדידה חיה (Live migration) יכולים לשמש גם עבור איזון עומסים דינמי של קונטיינרים בין מחשבים בקלסטר. וירטואליזציה ברמת מערכת ההפעלה כרוכה בדרך כלל בתקורה מועטה אם בכלל, כי תוכניות במחיצות וירטואליות משתמשות בממשק הרגיל של קריאות מערכת של מערכת ההפעלה ואינן נתונות לתקורה הנובעת מאמולציה או מריצה במכונה וירטואלית, כמו במקרים עם כל וירטואליזציה של מערכת מלאה (כגון VMware ESXi, QEMU או Hyper-V) או פארא-וירטואליזציה (כגון Xen או UML). צורה זו של וירטואליזציה גם אינה דורשת תמיכה של החומרה כדי להתבצע ביעילות. וירטואליזציה ברמת מערכת ההפעלה אינה גמישה כמו גישות וירטואליזציה אחרות מאחר שלא ניתן לארח מערכת הפעלה שונה. לדוגמה, בלינוקס, ניתן לארח הפצות שונות, אך לא מערכות הפעלה אחרות כגון Windows. מערכת ההפעלה "סולריס" מתגברת חלקית על מגבלה זו באמצעות "אזורים ממותגים" (branded zones), אשר מספקים את היכולת להריץ סביבה בקונטיינר אשר מדמה גרסאות ישנות של Solaris 8 או 9 ב-Solaris 10 המארח. אזורים ממותגים בלינוקס (מכונה אזורי "lx") זמינים גם על מערכות x86 מבוססות סולריס, ומספקים מרחב המשתמש לינוקסי ותמיכה בהרצת יישומי לינוקס; בנוסף, Solaris מספקת את כלים הדרושים כדי להתקין הפצות לינוקס Red Hat Enterprise Linux 3.x או CentOS 3.x בתוך אזורי "lx". עם זאת, ב-2010 בוטלה בסולריס התמיכה באזורי לינוקס ממותגים; ב-2014 הם הוחזרו ב-Illumos, גרסת עותק הקוד הפתוח של סולריס, שמאפשרת תמיכה בליבות לינוקס 32 ביט. חלק מהמימושים של וירטואליזציה ברמת מערכת ההפעלה מספקים מנגנוני העתקה בזמן כתיבה ברמת הקובץ (בדרך כלל, מערכת קבצים רגילה משותפת בין מחיצות, ומחיצות שמשנות קבצים יוצרות אוטומטית עותקים משלהן). גישה זו חסכונית יותר במקום ומאפשרת גיבוי קל יותר בהשוואה לגישות המקובלות במערכת וירטואלית מלאה. עם זאת, וירטואליזציה מלאה מאפשרת עבודה עם מערכות קבצים לא סטנדרטיות, וליצור ולשחזר תמונות של מצב כל המערכת. מחשוב ענן Kubernetes מנהלי מערכת (root) יכולים לעקוף את chroot, שלא מתוכנן להיות מנגנון אבטחה. תוך שימוש במנגנון תזמון הוגן בהחלט (CFQ), יש תור נפרד לכל אורח. 14 יכולות משתמש נחשבות בטוחות בתוך קונטיינר. עבור היתר לא מובטח שיוכלו להתבצע בקונטיינר מבלי לאפשר לתהליך להתערב בצורה פונטנציאלית בדברים מחוץ לקונטיינר. יכולות הרשת מופרדות, ללא וירטואליזציה. הגבלות על הדיסק לכל קונטיינר אפשריות כאשר משתמשים במחיצות נפרדות לכל קונטיינר בעזרת LVM, או כאשר מערכת הקבצים היא btrfs, שבה תת-כוננים של btrfs משתמשים בצורה אוטומטית. הגבלת קצב קריאה/כתיבה נתמכת בעזרת Btrfs. ראו נתמך החל מליבת לינוקס בגרסה 2.6.18-028stable021. המימוש מבוסס על תור הוגן בהחלט (CFQ), אך הוא רב שכבתי, כך שתעדוף פעולות קריאה/כתיבה אינו נפרד לכל תהליך, אלא לכל קונטיינר. לכל קונטיינר יכולות להיות כתובות IP משלו, חוקי חומת אש, טבלאות ניתוב וכו'. מספר הגדרות רשת נתמכות: מבוסס ניתוב, מבוסס גשר ושיוך כרטיס רשת אמיתי לקונטיינר. קונטיינרים של Docker יכולים לרוץ בתוך קונטיינרים של OpenVZ. כל קונטיינר יכול להיות בעל הרשאות מנהל מערכת מבלי להשפיע על קונטיינרים אחרים. נתמך מאז גרסה 4.0, ינואר 2008. קונטיינרים של Docker יכולים לרוץ בתוך קונטיינרים של Virtuozzo. עם illumos כאשר השכבה העליונה היא KVM zone (illumos) או kz zone (Oracle). החל מ Solaris 11.3 בטא, Solaris Kernel Zones יכולים להשתמש בנדידה חיה. יש מימוש של נדידה קרה (כיבוי-נדידה-הפעלה מחדש). מתחמים לא גלובליים מוגבלים כך שלא ישפיעו על מתחמים אחרים באמצעות הגבלות. ראו אפשרות "allow.quotas" ופסקה "Jails and File Systems" בתיעוד FreeBSD jail for details. נתמך החל מ TL 02. כן עם כוננים לוגיים. "3.5. Limiting your program's environment". freebsd.org. Linux-VServer Paper, Secure Capabilities Graber, Stéphane (1 בינואר 2014). "LXC 1.0: Security features [6/10]". נבדק ב-12 בפברואר 2014. LXC now has support for user namespaces. [...] LXC is no longer running as root so even if an attacker manages to escape the container, he’d find himself having the privileges of a regular user on the host {{cite web}}: (עזרה) "Live Migration in LXD". Ubuntu Insights Web site. "I/O priorities for containers". OpenVZ Virtuozzo Containers Wiki. "Docker inside CT". "Container". OpenVZ Virtuozzo Containers Wiki. "Parallels Virtuozzo Now Provides Native Support for Docker". Pijewski, Bill. "Our ZFS I/O Throttle". Network Virtualization and Resource Control (Crossbow) FAQ "Managing Network Virtualization and Network Resources in Oracle® Solaris 11.2". Oracle Solaris 11.1 Administration, Oracle Solaris Zones, Oracle Solaris 10 Zones and Resource Management E29024.pdf, pp. 356–360. Available within an archive. "Hierarchical_Resource_Limits - FreeBSD Wiki". Wiki.freebsd.org. 2012-10-27. נבדק ב-2014-01-15. "Implementing a Clonable Network Stack in the FreeBSD Kernel" (PDF). usenix.org. 2003-06-13. "VPS for FreeBSD". נבדק ב-2016-02-20. "[Announcement] VPS // OS Virtualization // alpha release". נבדק ב-2016-02-20. "3.5. Limiting your program's environment". Freebsd.org. נבדק ב-2014-01-15. "IBM Fix pack information for: WPAR Network Isolation - United States". ibm.com. Live Application Mobility in AIX 6.1