PracticU

טכנולוגיה מאחורי קונטיינר
Linux Namespaces

בלי כתוביותעם כתוביות
PracticU › קורס קוברנטיקס - Kubernetes › טכנולוגיה מאחורי קונטיינר Linux Namespaces
מילון מושגים:
קונטיינר - חבילה קלה ומבודדת שאורזת אפליקציה עם כל תלויותיה, ורצה באופן אחיד בכל סביבה, למשל ב-Docker.
Linux - מערכת הפעלה בקוד פתוח מבוססת ליבת Linux, נפוצה מאוד בשרתים וקיימת בהפצות רבות כמו Ubuntu.
Ubuntu - הפצת Linux נפוצה וידידותית למשתמש, המשמשת בשרתים ובמחשבים אישיים.
מעטפת - תוכנה שמפרשת פקודות של המשתמש ומעבירה אותן למערכת ההפעלה, למשל Bash או PowerShell.
Bash - מעטפת שורת פקודה נפוצה במערכות Linux, המשמשת להרצת פקודות ולכתיבת סקריפטים.
מערכת קבצים - השיטה שבה מערכת ההפעלה מארגנת, שומרת ומנהלת קבצים ותיקיות על התקן אחסון, למשל NTFS.
root - משתמש העל במערכות Linux, בעל הרשאות מלאות לכל פעולה. גם הרמה העליונה בעץ של תיקיות או נתונים.
קרנל - ליבת מערכת ההפעלה, שמנהלת את החומרה, הזיכרון והתהליכים ומתווכת בינם לבין התוכנות.

טכנולוגיה מאחורי קונטיינר Linux Namespaces
קונטיינר הוא תהליך רגיל שמערכת ההפעלה עוטפת בעולם מבודד. ההרצאה בונה קונטיינר ידנית בלינוקס ומראה שלוש שכבות בידוד: תהליכים, רשת וקבצים.
רעיון ה-namespace
כל תוכנה מקבלת process ID, שבווינדוס רואים ב-Task Manager. קונטיינר חי ב-namespace משלו, ולכן הוא חושב שהוא process מספר אחד ואינו רואה מה מחוץ לו. זה feature של מערכת ההפעלה, וממנו בנויים קונטיינרים.
הדגמה ב-Ubuntu על WSL
1. הכנה: מתקינים Ubuntu 24 עם wsl --install ויוצרים בתיקיית הבית קובץ 1.txt. echo $$ מציג את מספר התהליך של ה-shell.
2. בידוד תהליכים ורשת: unshare מפעיל bin/bash חדש עם בידוד של process ID, kill child, בידוד רשת, fork ו-mount proc. בפנים echo $$ מחזיר 1, ו-ps aux ריק. ip address מראה רק loopback, בלי כרטיס eth0 של המחשב.
3. הקבצים עדיין משותפים: מתוך ה-shell המבודד רואים את 1.txt, כלומר הבידוד אינו כולל מערכת קבצים.
4. root file system: יוצרים תיקיית my container עם root FS, מורידים image של Alpine (כ-3.5 מגה, כי הוא כולל רק קבצי user land ולא קרנל) ל-tar.gz, ופותחים אותו בתיקייה עם tar.
5. chroot: מוסיפים ל-unshare את chroot לתיקיית ה-root ומריצים bin/sh. עכשיו ls / מראה את מבנה Alpine, 1.txt לא קיים, ואי אפשר לצאת החוצה. זו הפצה אחרת על אותו קרנל.
6. יציאה: exit מחזיר ל-shell האב, שבו 1.txt נראה שוב.
פקודות עיקריות
wsl --install, unshare, chroot, tar, echo $$, ps aux, ip address.
בסוף ברור איך נבנה קונטיינר מבודד בתהליכים, ברשת ובקבצים משלו, ומדוע Alpine יכול לרוץ בתוך Ubuntu: שתיהן חולקות אותו קרנל.
השיעור הבא בקורס: דיבאג קונטיינר Debug Container

פרקי ההרצאה: טכנולוגיה מאחורי קונטיינר Linux Namespaces

  1. 00:00

    process ID של תוכנה רגילה

  2. 00:38

    קונטיינר כ-process מבודד

  3. 01:15

    התקנת Ubuntu בעזרת WSL

  4. 01:50

    זיהוי ה-shell עם ps aux

  5. 02:27

    בידוד process עם unshare

תמלול ההרצאה: טכנולוגיה מאחורי קונטיינר Linux Namespaces

הטקסט המלא של הדקות הראשונות בהרצאה «טכנולוגיה מאחורי קונטיינר Linux Namespaces» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום לכולם. היום אנחנו נראה איך עובדים קונטיינרים מאחורי הקלעים. איך אפשר ליצור קונטיינר בצורה ידנית. תראו תוכנה רגילה שרצה יש לה איזשהו מספר סידורי process ID.

  2. 00:16

    בווינדוס אנחנו יכולים לראות process ID ב-Task Manager ב-Details. אתם רואים? יש פה process ID, מספר תהליך במערכת ההפעלה ואם עכשיו אני אפעיל מחשבון נניח calc פה ב-processes הוא קיבל מספר אלף חמש מאות ושתיים עשרה.

  3. 00:32

    אם אני אהרוג את ה-process הזה end ואני אאשר end process תראו הופה המחשבון נעלם מאחורה. אז כל תוכנה שמורצת מקבלת איזשהו process ID.

  4. 00:41

    אבל כשאנחנו מריצים קונטיינר בדומה למכונה וירטואלית בתוך הקונטיינר הוא חושב שהוא process ID אחד. הוא לא מודע לעולם החיצון. במציאות הוא process שלוש במחשב הפיזי, אבל מבחינתו כשהוא מסתכל ב-Task Manager שלו הוא חושב שהוא היחיד בעולם הזה.

  5. 01:00

    הוא לא מסוגל לראות את מה שיש מחוץ ל-namespace שלו. זה feature במערכת ההפעלה שפשוט בונה עולם וירטואלי סביב process מסוים וככה בנו קונטיינר.

  6. 01:13

    בואו נראה את כל זה בפעולה. אני נכנס ל-CMD ואני רוצה לעשות WSL מינוס מינוס install להתקין מכונה וירטואלית של Linux בתוך הווינדוס בעזרת WSL של Microsoft.

  7. 01:27

    זה מובנה בווינדוס. כרגע הוא מתקין לי Ubuntu. אני כותב לו שה-username שלי זה יוני password אני שם ספרה אחת. בואו נראה באיזה מערכת הפעלה אני.

  8. 01:36

    Cat OS release. אני בתוך Ubuntu גרסה עשרים וארבע. קודם כל אני יוצר פה קובץ אחד נקודה TXT ושם לתוכו AAA. עכשיו יש לי בלינוקס הפיזי שלי קובץ אחד נקודה טקסט.

  9. 01:50

    PS aux זה כמו task manager שמראה לי את כל התוכנות שרצות ו-process ID שלהם. process ID מספר אחד זאת מערכת ההפעלה זה האינית. אני רוצה למצוא פה את השל שלנו.

  10. 02:03

    האמת יש טריק יותר פשוט לעשות את זה. אפשר לכתוב Echo דולר דולר ואני רואה שהוא מראה לי שש מאות תשעים. זה שש מאות תשעים הזה זה הבא שלנו. עכשיו אני אראה לכם טריק איך לפתוח bin bash חדש אבל ה-bin bash החדש הזה יפתח על ידי unshare ואני אומר לה לבודד process ID kill child אני אומר לו שיסגר ה-bin bash הזה כל מה שהוא יפתח גם תהרוג אותם, גם תעשה namespace ל-network.

  11. 02:32

    אם לא הייתי עושה את זה הוא היה רואה את כתובת ה-IP של המחשב הפיזי ומינוס מינוס fork אומר תייצר shell חדש ו-mount proc מחביא ממנו את הרשימה של כל ה-processes. זה עושה אותו process מספר אחד בעולם וירטואלי וזה מחביא ממנו את כל האחרים.

  12. 02:50

    שימו לב אני מריץ את זה. זה נראה ששום דבר לא השתנה, אבל מאחורי הקלעים אני כבר בתוך ה-bin bash החדש ואם אני אעשה Echo דולר דולר אני אראה process ID מספר אחד.

  13. 03:01

    יותר מזה ב-PS aux אני אראה שאין אף תוכנה

לקורס המלא: קורס קוברנטיס – Kubernetes

ההרצאה הקודמת: הגדלה אוטומטית - של קלסטר בעומס - HPA Kubernetes

ההרצאה הבאה: דיבאג קונטיינר - Debug Container

הרצאות קשורות מקורסים אחרים

  • Linux VM on Google Cloud
  • התקנה של linux על 10 Windows
  • סילבוס קורס לינוקס - LINUX
  • Linux Container on Server 2019

קורסים נוספים במסלול

  • קורס AWS - ניהול מכונה וירטואלית בענן
  • קורס Terraform - DevOps - Azure & AWS
  • קורס Docker - עם Swarm Cluster
  • קורס DevOps - Ansible
  • קורס PowerShell
  • קורס Git ו-GitHub עם Visual Studio