PracticU

דיבאג קונטיינר
Debug Container

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

דיבאג קונטיינר Debug Container
קונטיינר ללא shell, כמו ה-frontend בחנות הדוגמה, לא מאפשר exec רגיל. ההרצאה מראה איך kubectl debug מכניס אותך ל-namespace שלו עם כלים משלך.
הבעיה והפתרון
1. הבעיה: kubectl exec עם bin/bash וגם עם bin/sh החזיר "no such file". ב-Dockerfile של ה-frontend רואים שה-image בנוי על distroless static של גוגל, ללא shell וללא כלים, רק התוכנה עצמה. זה קטן יותר ובטוח יותר לתקיפה.
2. debug: kubectl debug פורס בתוך הפוד קונטיינר זמני מ-image של busybox ומכניס אותך אליו אינטראקטיבית. מציינים את שם הקונטיינר המדובג מההגדרה ב-deployment, כאן server.
3. מה רואים: ps aux מציג את התהליך /src/server של השרת. top מראה את צריכת ה-CPU שלו, וניתן להתחבר אליו ולחפש באגים.
4. עומס חי: kubectl scale של ה-load generator ל-30 העלה את ה-CPU לכ-2 אחוז, וירידה ל-0 הורידה אותו בחזרה מיד. זה נצפה ישר ממערכת ההפעלה, בלי להסתמך על kubectl top שעובר דרך שרת סטטיסטיקות.
בידוד תהליכים מול קבצים
- מבחינת תהליכים אין בידוד: רואים את התהליך של הקונטיינר האחר.
- מבחינת מערכת הקבצים יש בידוד: ls -l מציג את הקבצים של busybox, ו-cd /src לא עובד. כך כדי להשתמש בכלים של busybox ולא בקבצים של הקונטיינר המדובג, שאין בו כלים.
מי שהשלים את ההרצאה יכול לדבג קונטיינר מצומצם בלי shell על ידי הצטרפות ל-process namespace שלו.

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

  1. 00:00

    כניסה ל-namespace של קונטיינר אחר

  2. 00:39

    image מסוג distroless ללא shell

  3. 01:15

    kubectl debug עם busybox

  4. 01:56

    דיבאג הקונטיינר בשם server

  5. 02:28

    בדיקת עומס עם top

תמלול ההרצאה: דיבאג קונטיינר Debug Container

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

  1. 00:02

    שלום לכולם. בסרטון זה אני אראה לכם איך אפשר להיכנס לתוך ה-namespace, לתוך הבידוד של קונטיינר אחר. הקונטיינר הזה של frontend לא נתן לי להתחבר אליו עם bin bash רגיל.

  2. 00:15

    עשיתי kubectl exec מינוס interactive. נתתי שם של קונטיינר סלאש bin bash והוא כותב לי no such file. קובץ לא קיים. אמרתי אוקיי, אולי זה bin sh וגם פה הוא ייתן לי עכשיו קובץ לא קיים.

  3. 00:30

    no such file. אמרתי אוקיי, איך אני נכנס פנימה? למזלי יש לי את ה-source code של האתר, אז הלכתי לתיקייה הראשית ל-src, ל-source code. מצאתי פה את הפרויקט, את המיקרוсерביס של frontend.

  4. 00:44

    יש פה את כל הקוד מקור ואת ה-dockerfile שאיתו בנו את ה-image שלו. אני עשיתי right click edit וראיתי בתוך ה-image שבנו אותו על בסיס image distroless static של גוגל.

  5. 00:58

    ובפנים מה מתברר? שהם לא שמו שום shell. כל מה שה-image הזה עושה הוא רק מריץ את התוכנה וזהו. אין בתוכו כלום חוץ מהמינימום הנדרש להרצה של התוכנה שלנו.

  6. 01:10

    יש לי רק תוכנה שרצה ואין שום כלים נוספים. ככה בנו את ה-image הזה שאי אפשר יהיה לתקוף אותו, שלא יתפוס מקום. הורידו משם הכל. זאת אומרת שהוא יושב פה ב-namespace מבודד ואין לי שום כלי להריץ בפנים כי פשוט אין שם כלים בפנים.

  7. 01:25

    למזלנו ב-kubectl יש פקודת kubectl debug שהוא יודע לפרוס אותי בצורה אינטראקטיבית בתוך הפוד הזה של ה-frontend image של busybox, שזה לינוקס עם כלים שאני צריך בתוך ה-namespace של הקונטיינר של ה-frontend.

  8. 01:44

    זאת אומרת, בקובץ שפורס לנו את ה-frontend deployment שלו, של ה-frontend. יש לנו את ההגדרה של הקונטיינר, מאיזה image הוא נפרס, אבל מה שחשוב לי פה בקונטיינר שלנו, מה השם שלו.

  9. 01:57

    השם זה server. אני מבקש מ-kubectl לדבג את הקונטיינר הזה וכדי שאני אוכל לדבג אותו הוא פורס לי את ה-image של busybox בתוך ה-namespace המבודד הזה.

  10. 02:11

    זאת אומרת שהוא מכניס אותי פה פנימה, מכניס אותי לתוך הבידוד שלו. אני אהיה process ID נוסף כאן בפנים. ברגע שאני עושה את זה, אני בפנים. אני יכול לעשות PS aux, לראות את כל התוכנות שרצות ואני רואה את ה סלאש src סלאש server רץ.

  11. 02:27

    אתם רואים? זה זה. סלאש src סלאש server. זאת התוכנה שמורצת עם הקונטיינר. אני עכשיו יכול לדבג אותה, להתחבר אליה, לראות עומסים.

  12. 02:36

    לדוגמה לעשות top. פה אני רואה עומס שיש כרגע על השרת, על התוכנה של השרת. היא תופסת אפס זמן מעבד כי אף אחד לא פונה לשרת הזה.

  13. 02:45

    בואו נדמה עומס ונראה אותו בלייב, כאילו אנחנו ב-task manager של אותו קונטיינר. אני עושה kubectl scale. תגדיל לי כמות הפודים מסוג load generator,

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

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

ההרצאה הבאה: הסבר על Helm - Kubernetes

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

  • container
  • דיבאג בג'אווה - Debug Mode
  • Debug View
  • מצב Debug מצב Release

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

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