ניפוי באגים באפליקציות Kubernetes באמצעות Cloud Code ל-VS Code

באמצעות Cloud Code אפשר לנפות באגים באפליקציה שנפרסה באשכול Google Kubernetes Engine‏ (GKE) באמצעות skaffold debug.

אפשר לנפות באגים באפליקציה באשכול מקומי (כמו minikube או Docker Desktop), ב-GKE או בכל ספק שירותי ענן אחר.

עם תמיכת הניפוי באגים של Cloud Code, אתם לא צריכים להשלים הגדרה ידנית כמו הגדרת העברה ליציאה אחרת או הוספת ארגומנטים לניפוי באגים שספציפיים לשפה. ניפוי באגים מחייב אפליקציית GKE שמוכנה ל-Cloud Code, כולל קובץ תצורה skaffold.yaml והגדרת הפעלה cloudcode.kubernetes.

ניפוי באגים באפליקציית GKE

כדי להתחיל בניפוי באגים באפליקציית GKE, פועלים לפי השלבים הבאים:

  1. בשורת הסטטוס של Cloud Code, לוחצים על שם הפרויקט הפעיל.

    שם הפרויקט הפעיל בשורת הסטטוס

  2. בתפריט 'בחירה מהירה' שמופיע, בוחרים באפשרות ניפוי באגים ב-Kubernetes.

  3. אם תתבקשו, אמתו את פרטי הכניסה כדי להריץ ולנפות באגים באפליקציה באופן מקומי.

  4. אם לאפליקציה שלכם אין את skaffold.yamlההגדרה או את cloudcode.kubernetes הגדרת ההפעלה הנדרשת, Cloud Code יעזור לכם להגדיר אותן.

  5. מאשרים אם להשתמש בהקשר הנוכחי של Kubernetes כדי להריץ את האפליקציה (או עוברים להקשר מועדף).

  6. אם בחרתם באשכול מרוחק כהקשר, כשתתבקשו, בחרו במאגר תמונות להעלאת התמונות.

    אם Artifact Registry API מופעל בפרויקט שלכם ויש בו לפחות מאגר אחד של Artifact Registry, תוכלו לעיין במאגר קיים של Artifact Registry ולבחור אותו.

    בדוגמאות הבאות מוסבר איך לציין איפה מאוחסנים קובצי אימג' של קונטיינר בכמה מאגרי רישום נפוצים:

    Artifact Registry ‪REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME
    Docker Hub docker.io/ACCOUNT
    Make sure that you're properly authenticated if you're using a private Docker Hub repository.
    מאגר קונטיינרים של AWS‏ (ECR) AWS_ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/APP
    ‫Azure Container Registry‏ (ACR) ACR_NAME.azurecr.io/APP

    כדי ליצור את שם מאגר התמונות הסופי, Cloud Code משרשר את מאגר התמונות הזה עם שם התמונה שצוין במניפסטים של Kubernetes. הבחירה הזו נשמרת בcloudcode.kubernetes הגדרת ההפעלה (שנמצאת ב-.vscode/launch.json).

    מידע נוסף זמין במדריך לטיפול במאגר תמונות.

    ‫Cloud Code יוצר את הקונטיינרים, מעביר אותם בדחיפה למאגר, מחיל הגדרות של Kubernetes על האשכול וממתין להשקה.

    אחרי ההשקה, Cloud Code מעביר אוטומטית את כל יציאות הקונטיינר שהוגדרו למחשב שלכם ומציג את כתובות ה-URL בחלון הפלט, כדי שתוכלו לעיין באפליקציה הפעילה.

  7. לכל מאגר שאפשר לבצע בו ניפוי באגים באפליקציה, מאשרים או מזינים את הספרייה במאגר המרוחק שבה נמצאת התוכנית שרוצים לבצע בה ניפוי באגים.

    אפשר גם להקיש על ESC כדי לדלג על ניפוי הבאגים של מאגר התגים.

    הנחיה לגישת Root מרחוק

    ‫Cloud Code מצרף סשן ניפוי באגים לכל קונטיינר שאפשר לנפות בו באגים באפליקציה.

    עכשיו אתם יכולים לבצע את אותן משימות שאתם בדרך כלל מבצעים כשמנפים באגים בקוד מקומי, כמו הגדרת נקודות עצירה והרצת קוד שלב אחר שלב, מול אשכול Kubernetes פעיל.

    כברירת מחדל, כששומרים שינוי באפליקציה, Cloud Code פורס מחדש את האפליקציה ומגדיר סשן חדש של ניפוי באגים. אפשר להפעיל או להשבית את התכונה הזו באמצעות הדגל watch בהגדרות ההפעלה של הפרויקט.

  8. כדי לבדוק משתנים ומידע על מחסנית, משתמשים בסרגל הצד של ניפוי הבאגים. כדי ליצור אינטראקציה עם סשן הניפוי באגים, משתמשים במסוף ניפוי הבאגים בחלונית התחתונה של כלי ניפוי הבאגים.

  9. אחרי שהסשן מסתיים, אפשר להשתמש בפקודות הבאות בתפריט ההקשר:

    • פתיחת יומני פריסה: פתיחת יומני האפליקציה של פריסה ספציפית באמצעות הכלי Cloud Code logs explorer.
    • פתיחת כתובת ה-URL של השירות: פתיחה של כתובת ה-URL של שירות האפליקציה של שירות ספציפי בדפדפן אינטרנט
  10. אם השבתתם את מצב הצפייה בהגדרות ההפעלה ואתם רוצים לבצע שינויים באפליקציה, לבנות אותה מחדש ולפרוס אותה מחדש, בחלונית Development sessions (סשנים של פיתוח), משהים את פעולת ההרצה ואז לוחצים על סמל הבנייה מחדש והפריסה מחדש Rebuild and redeploy the application (בנייה מחדש ופריסה מחדש של האפליקציה).

  11. כדי לסיים את סשן ניפוי הבאגים, לוחצים על סמל של עצירת ניפוי באגים Stop (הפסקה) בסרגל הכלים של ניפוי הבאגים.

    אחרי שמסיימים את סשן הניפוי באגים, כל משאבי Kubernetes שנפרסו נמחקים מהאשכול.

פרטי ההגדרות

‫Cloud Code מטפל באופן אוטומטי בפרטי ההגדרה הבאים לכל השפות הנתמכות:

  • העברה ליציאה אחרת של יציאת ניפוי הבאגים כדי שאפשר יהיה לצרף את הכלי לניפוי באגים.
  • מצמידים מאתר באגים למאגר אחד או יותר שאפשר לבצע בהם ניפוי באגים באפליקציה. אם לאפליקציה שלכם יש כמה קונטיינרים שאפשר לנפות בהם באגים (קונטיינרים שהשפה שלהם נתמכת על ידי ניפוי באגים ב-Cloud Code) שהוגדרו ב-skaffold.yaml, אז מנפה באגים מצורף לכל קונטיינר שאפשר לנפות בו באגים.
  • שמירת הגדרות של מיפוי מקור בין סשנים. אפשר להתאים אישית את ההגדרות האלה על ידי עריכה ישירה של קובץ .vscode/launch.json.

‫Cloud Code מטפל גם בהגדרות הבאות שספציפיות לשפה:

Node.js

שכתוב נקודת הכניסה כדי להפעיל:

node --inspect=localhost:9229

Python

התקנת מודול ptvsd באמצעות קונטיינר Init וכתיבה מחדש של נקודת הכניסה כדי להפעיל:

python -m ptvsd --host localhost --port 5678

המשך

התקנת מאגר האתחול של dlv באמצעות Init Container וכתיבה מחדש של נקודת הכניסה כך שסשן הניפוי באגים שהופעל יפעל רק עם שרת ניפוי באגים (במצב headless), ימשיך את התהליך שעבר ניפוי באגים בהתחלה, יקבל חיבורים מרובים של לקוחות ויאזין בכתובת localhost:56268:

  dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --

Java

הוספת סביבה JAVA_TOOLS_OPTIONS עם ההגדרה המתאימה של Java Debug Wire Protocol‏ (JDWP), כך שסוכן הניפוי של JDWP יאזין לחיבור שקע ביציאה 5005 ויאפשר למכונה הווירטואלית להתחיל לבצע פעולות לפני שמצורף מנפה הבאגים:

  jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y

פרטים נוספים על ניפוי באגים באמצעות skaffold debug מופיעים במסמכי התיעוד.

הגדרת מאגר התגים

כדי להכין את הקונטיינר לניפוי באגים, פועלים לפי ההוראות לשפה שבה משתמשים:

Node.js

  • מפעילים את אפליקציית Node.js באמצעות --inspect=<debugPort>, כאשר debugPort מגיע מהגדרת הצירוף. לדוגמה: CMD ["node", "--inspect=9229", "index.js"]

Python

  • מוודאים שמודול ptvsd מותקן במחשב ובקונטיינר.
  • מפעילים את אפליקציית Python דרך ptvsd. היציאה שצוינה צריכה להיות זהה לערך בשדה debugPort בattach configuration. לדוגמה:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]

המשך

  • מוודאים שחבילת dlv מותקנת במחשב ובקונטיינר Go.
  • מפעילים את אפליקציית Go דרך dlv debug.

    היציאה שצוינה בפקודת ההתחלה צריכה להיות זהה לערך המאפיין debugPort בהגדרת הצירוף. לדוגמה:

    CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]

    טיפ לפתרון בעיות: כשמבצעים ניפוי באגים באפליקציית Go, האפליקציה תיעצר ותמתין לחיבור של כלי לניפוי באגים. כדי להפעיל את השירות, צריך לצרף כלי לניפוי באגים.

Java

  • מוודאים ש-JVM מותקן במחשב.
  • מפעילים את אפליקציית Java עם האפשרויות הבאות, כאשר debugPort מגיע מהגדרת הצירוף.

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=,quiet=y

    לדוגמה, כדי להפעיל את אפליקציית Java במצב ניפוי באגים ולהאזין ליציאה debugPort לחיבור:

    ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"]

‎.NET Core

  • מוודאים שvsdbg, מאתר הבאגים בשורת הפקודה של ‎ .NET Core מבית מיקרוסופט, מותקן במאגר Kubernetes.

    לדוגמה:

    RUN apt-get update 
    && apt-get install -y --no-install-recommends unzip
    && apt-get install -y procps
    && rm -rf /var/lib/apt/lists/*
    && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /dbg/netcore/vsdbg

הגדרת צירוף

כדי לצרף קובץ למאגר שאפשר לבצע בו ניפוי באגים, צריך הגדרת צירוף מסוג cloudcode.kubernetes.

הוספת קובץ ‎ .vscode/launch.json

אם אין קובץ launch.json בתיקייה .vscode של הפרויקט, אפשר להוסיף אותו באמצעות חלונית הניפוי באגים.

  1. כדי לנווט לחלונית הניפוי באגים, לוחצים על סמל ניפוי הבאגים Run and Debug בסרגל הפעילות.

  2. בתפריט הנפתח, בוחרים באפשרות הוספת הגדרה.

  3. בוחרים באפשרות Cloud Code: Kubernetes בתור הסביבה.

    הגדרת Cloud Code: Kubernetes כסביבה

  4. בוחרים באפשרות Attach to Kubernetes Pod (צירוף ל-Pod של Kubernetes).

    בחירת אפשרות ההגדרה של Kubernetes

  5. בוחרים את שפת התכנות שבה משתמשים.

    פעולה זו תיצור קובץ launch.json לפרויקט ותיצור בשבילכם הגדרת צירוף.

  6. מעדכנים את מאפייני ההגדרה בקובץ launch.json כך שיתאימו למאפיינים של הפרויקט. מידע נוסף על מאפייני הגדרה זמין במאמר מאפייני הגדרה.

מוסיפים הגדרת צירוף לקובץ .vscode/launch.json

כדי להוסיף הגדרת צירוף חדשה לקובץ .vscode/launch.json קיים:

  1. פותחים את הקובץ launch.json.
  2. כדי להפעיל את ה-Intellisense של קטע הקוד, לוחצים על Add Configuration (הוספת הגדרה).
  3. כדי להוסיף הגדרת צירוף, בוחרים את קטע הקוד Cloud Code: Attach to Kubernetes Pod בשפה שבה אתם משתמשים.
  4. מעדכנים את המאפיינים בהגדרה כך שיתאימו למאפיינים של הפרויקט. מידע נוסף על מאפייני הגדרה זמין במאמר מאפייני הגדרה.

מאפייני ההגדרה

מאפיין תיאור
debugPort יציאת ניפוי הבאגים שמשמשת את הקונטיינר.
podSelector קבוצה של צמדי מפתח/ערך שמשמשת לבחירת ה-pod לניפוי הבאגים. מידע נוסף זמין במדריך בנושא כלים לבחירת רכיבים. בדוגמה הבאה מוצג podSelector טיפוסי:

"podSelector": { "app": <deployment-name> }
localRoot הנתיב לספרייה המקומית שמכילה את התוכנית שמבצעים בה ניפוי באגים. ברירת המחדל היא ${workspaceFolder}.
remoteRoot הנתיב המוחלט לספרייה המרוחקת שמכילה את התוכנית שמבצעים בה ניפוי באגים (בקונטיינר של Kubernetes).

צירוף מאתר באגים ל-pod של Kubernetes

‫Cloud Code ל-VS Code תומך בצירוף מאתר באגים ל-pod של Kubernetes עבור Node.js, ‏ Python, ‏ Go, ‏ Java ו-‎ .NET. כל מה שצריך זה מאגר שאפשר לנפות בו באגים והגדרת צירוף מסוג cloudcode.kubernetes.

במאמר ההבדל בין חיבור מאתר באגים ל-Pod לבין ניפוי באגים באפליקציית Kubernetes מוסבר איך החיבור ל-Pod של Kubernetes שונה מניפוי באגים באפליקציית Kubernetes.

כדי לצרף מאתר באגים ל-pod של Kubernetes, מבצעים את המשימות הבאות:

  1. כדי לנווט לחלונית הניפוי באגים, לוחצים על סמל ניפוי הבאגים Run and Debug בסרגל הפעילות.
  2. בוחרים את ההגדרה ומפעילים אותה על ידי לחיצה על F5.

    • ‫localhost:${debugPort} מועבר ליציאה אחרת אל debugPort בקונטיינר במהלך ניפוי הבאגים.

    סיימתם להגדיר את סשן ניפוי הבאגים. אתם יכולים לבצע את המשימות שאתם בדרך כלל מבצעים כשמנפים באגים בקוד מקומי, כמו הגדרת נקודות עצירה והרצת קוד בשלבים.

  3. כדי לבדוק משתנים ומידע על מחסנית, משתמשים בסרגל הצד של ניפוי הבאגים. כדי ליצור אינטראקציה עם סשן הניפוי באגים, משתמשים במסוף ניפוי הבאגים בחלונית התחתונה של כלי ניפוי הבאגים.

  4. כדי לסיים את סשן ניפוי הבאגים, לוחצים על סמל של עצירת ניפוי באגים Stop בסרגל הכלים של ניפוי הבאגים.

מה ההבדל בין צירוף מנפה באגים לבין ניפוי באגים באפליקציית Kubernetes

צירוף ל-pod של Kubernetes ניפוי באגים באפליקציית Kubernetes
ניפוי באגים של pod יחיד ב-Kubernetes. מבצע ניפוי באגים בכל הקונטיינרים שניתן לבצע בהם ניפוי באגים באפליקציה.
האפליקציה צריכה לפעול בתא Kubernetes לפני שמבצעים ניפוי באגים. מריצים את האפליקציה באשכול Kubernetes ומצרפים את הכלי לניפוי באגים.
משתמש בהגדרה (‎.vscode/launch.json) מהסוג cloudcode.kubernetes ובבקשה attach. משתמש בהגדרה (‎.vscode/launch.json) מהסוג cloudcode.kubernetes ובבקשה launch.
מידע נוסף זמין במאמר השוואה בין הגדרות של הפעלה לבין הגדרות של צירוף.
הגדרה לדוגמה:
{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
הגדרה לדוגמה:
{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
אי אפשר להשתמש בהגדרה הזו כדי להפעיל את האפליקציה. אפשר להשתמש בהגדרה הזו כדי להריץ את האפליקציה או לבצע בה ניפוי באגים.
ההגדרה הזו ספציפית לשפה. ההגדרה הזו לא ספציפית לשפה.
אין פקודה ייעודית. הפקודה Debug on Kubernetes.
מצב צפייה לא זמין, לכן אחרי שמבצעים שינויים צריך להפעיל מחדש את מאתר הבאגים באופן ידני. מצב צפייה מאפשר ל-Cloud Code להפעיל מחדש את הכלי לניפוי באגים אחרי ששומרים שינויים.

המאמרים הבאים

תמיכה

כדי לשלוח משוב, אפשר לשאול שאלה ב-Stack Overflow. אם אתם לקוחות Google Cloud, אתם יכולים לשלוח כרטיסי תמיכה דרך ערוצי התמיכה הרגילים של Google Cloud.