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

בעזרת 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. בתפריט 'בחירה מהירה' שמופיע, בוחרים באפשרות Debug on Kubernetes (ניפוי באגים ב-Kubernetes).

  3. אם לאפליקציה שלכם אין הגדרת Skaffold או הגדרת הפעלה של cloudcode.kubernetes, ‏ Cloud Code יעזור לכם להגדיר אותן.

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

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

    אם 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.

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

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

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

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

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

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

    הנחיה של שורש מרוחק

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

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

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

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

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

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

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

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

פרטי ההגדרות האישיות

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

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

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

Node.js

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

node --inspect=localhost:9229

Python

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

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

המשך

התקנת מאגר התגים של dlv באמצעות מאגר תגים של Init ושכתוב נקודת הכניסה כך שהפעלת סשן הניפוי באגים תתבצע רק עם שרת ניפוי באגים (במצב ללא ממשק משתמש), תמשיך את התהליך בניפוי באגים בהפעלה, תקבל כמה חיבורי לקוח ותאזין בכתובת 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 זמינים במאמרי העזרה בנושא skaffold debug.

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

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

Node.js

  • מפעילים את אפליקציית Node.js באמצעות --inspect=<debugPort> כאשר