בעזרת Cloud Code אפשר לנפות באגים באפליקציה שנפרסה באשכול Google Kubernetes Engine (GKE) באמצעות skaffold debug.
אפשר לנפות באגים באפליקציה באשכול מקומי (כמו minikube או Docker Desktop), ב-GKE או בכל ספק שירותי ענן אחר.
בעזרת התמיכה בניפוי באגים של Cloud Code, לא צריך להשלים הגדרה ידנית כמו הגדרת העברת יציאות או הוספת ארגומנטים לניפוי באגים שספציפיים לשפה. ניפוי הבאגים דורש אפליקציית GKE שמוכנה ל-Cloud Code, כולל קובץ הגדרות skaffold.yaml והגדרת הפעלה cloudcode.kubernetes.
ניפוי באגים באפליקציית GKE
כדי להתחיל בניפוי הבאגים באפליקציית GKE, פועלים לפי השלבים הבאים:
בסרגל הסטטוס של Cloud Code, לוחצים על שם הפרויקט הפעיל.

בתפריט 'בחירה מהירה' שמופיע, בוחרים באפשרות Debug on Kubernetes (ניפוי באגים ב-Kubernetes).
אם מוצגת בקשה, מאמתים את פרטי הכניסה כדי להריץ ולנפות באגים באפליקציה באופן מקומי.
אם לאפליקציה שלכם אין הגדרת Skaffold או הגדרת הפעלה של
cloudcode.kubernetes, Cloud Code יעזור לכם להגדיר אותן.מאשרים אם להשתמש בהקשר הנוכחי של Kubernetes כדי להריץ את האפליקציה (או עוברים להקשר מועדף).
אם בחרתם באשכול מרוחק כהקשר, כשתתבקשו, בחרו במאגר תמונות להעלאת התמונות.
אם Artifact Registry API מופעל בפרויקט שלכם ויש בו לפחות מאגר אחד של Artifact Registry, תוכלו לעיין במאגר קיים של Artifact Registry ולבחור אותו.
בדוגמאות הבאות מוסבר איך לציין איפה מאוחסנים קובצי האימג' בקונטיינר בכמה מאגרי רישום נפוצים:
Artifact Registry REGION-docker.pkg.dev/PROJECT_ID/REPO_NAMEDocker 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/APPAzure Container Registry (ACR) ACR_NAME.azurecr.io/APPכדי ליצור את שם מאגר התמונות הסופי, Cloud Code משרשר את רישום התמונות הזה עם שם התמונה שצוין במניפסטים של Kubernetes. הבחירה הזו נשמרת ב
cloudcode.kubernetesהגדרת ההפעלה (שנמצאת ב-.vscode/launch.json).מידע נוסף זמין במדריך לטיפול במאגר תמונות.
Cloud Code יוצר את הקונטיינרים, מעביר אותם בדחיפה למאגר, מחיל הגדרות של Kubernetes על האשכול וממתין להשקה.
אחרי ההשקה, Cloud Code מעביר אוטומטית את כל יציאות הקונטיינר המוצהרות למחשב שלכם ומציג את כתובות ה-URL בחלון הפלט, כדי שתוכלו לעיין באפליקציה הפעילה.
עבור כל מאגר שאפשר לבצע בו ניפוי באגים באפליקציה, מאשרים או מזינים את הספרייה במאגר המרוחק שבה נמצאת התוכנית שרוצים לבצע בה ניפוי באגים.
אפשר גם להקיש על ESC כדי לדלג על ניפוי הבאגים של מאגר התגים.

Cloud Code מצרף סשן ניפוי באגים לכל קונטיינר שאפשר לנפות בו באגים באפליקציה.
עכשיו אתם יכולים לבצע את אותן משימות שאתם בדרך כלל מבצעים כשמנפים באגים בקוד מקומי, כמו הגדרת נקודות עצירה והרצת קוד שלב אחר שלב, מול אשכול Kubernetes פעיל.
כברירת מחדל, כששומרים שינוי באפליקציה, Cloud Code פורס מחדש את האפליקציה ומגדיר סשן חדש לניפוי באגים. אפשר להפעיל או להשבית את התכונה הזו באמצעות הדגל
watchבהגדרות ההפעלה של הפרויקט.כדי לבדוק משתנים ומידע על מחסנית, משתמשים בסרגל הצד של ניפוי הבאגים. כדי ליצור אינטראקציה עם סשן הניפוי באגים, משתמשים במסוף ניפוי הבאגים בחלונית התחתונה של כלי ניפוי הבאגים.
אחרי שהסשן מסתיים, אפשר להשתמש בפקודות הבאות בתפריט ההקשר:
- פתיחת יומני פריסה: פתיחת יומני האפליקציה של פריסה ספציפית באמצעות הכלי Cloud Code logs explorer.
- פתיחת כתובת ה-URL של השירות: פתיחה של כתובת ה-URL של שירות האפליקציה של שירות ספציפי בדפדפן אינטרנט
אם השבתתם את מצב הצפייה בהגדרות ההפעלה ואתם רוצים לבצע שינויים באפליקציה, לבנות אותה מחדש ולפרוס אותה מחדש, בחלונית Development sessions (סשנים של פיתוח), משהים את פעולת ההרצה ואז לוחצים על
Rebuild and redeploy the application (בנייה מחדש ופריסה מחדש של האפליקציה).כדי לסיים את סשן ניפוי הבאגים, לוחצים על 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>כאשרdebugPortמגיע מהגדרת הצירוף. לדוגמה:CMD ["node", "--inspect=9229", "index.js"]
Python
- מוודאים שמודול
ptvsdמותקן במחשב ובקונטיינר. - מפעילים את אפליקציית Python דרך
ptvsd. היציאה שצוינה צריכה להיות זהה לערך בשדהdebugPortבצירוף ההגדרה. לדוגמה: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
מוודאים שמותקן במאגר התגים של Kubernetes הכלי
vsdbg, מאתר הבאגים בשורת הפקודה של .NET Core מבית מיקרוסופט.לדוגמה:
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, אתם יכולים להוסיף אותו באמצעות חלונית הניפוי באגים.
כדי לנווט לחלונית Debug, לוחצים על
Run and Debug
בסרגל הפעילות.בתפריט הנפתח, בוחרים באפשרות הוספת הגדרה.
בוחרים באפשרות Cloud Code: Kubernetes בתור הסביבה.

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

בוחרים את שפת התכנות שבה השתמשתם.
פעולה זו יוצרת ופותחת קובץ
launch.jsonעבור הפרויקט ויוצרת עבורכם הגדרת צירוף.מעדכנים את מאפייני ההגדרה בקובץ
launch.jsonכך שיתאימו למאפיינים של הפרויקט. מידע נוסף על מאפייני הגדרה זמין במאמר מאפייני הגדרה.
הוספת הגדרת צירוף לקובץ .vscode/launch.json
כדי להוסיף הגדרת צירוף חדשה לקובץ .vscode/launch.json קיים:
- פותחים את הקובץ
launch.json. - כדי להפעיל את ה-Intellisense של קטע הקוד, לוחצים על Add Configuration (הוספת הגדרה).
- כדי להוסיף הגדרת צירוף, בוחרים את קטע הקוד Cloud Code: Attach to Kubernetes Pod בשפה שבה משתמשים.
- מעדכנים את המאפיינים בהגדרה כך שיתאימו למאפיינים של הפרויקט. מידע נוסף על מאפייני הגדרה זמין במאמר מאפייני הגדרה.
מאפייני ההגדרה
| מאפיין | תיאור |
|---|---|
| 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, מבצעים את המשימות הבאות:
- כדי לנווט לחלונית Debug, לוחצים על
Run and Debug
בסרגל הפעילות. בוחרים את ההגדרה ומפעילים אותה על ידי לחיצה על
F5.-
localhost:${debugPort}מועבר ל-debugPortבקונטיינר במהלך ניפוי באגים.
סיימתם להגדיר את סשן ניפוי הבאגים. אתם יכולים לבצע את המשימות שאתם בדרך כלל מבצעים כשמנפים באגים בקוד מקומי, כמו הגדרת נקודות עצירה והרצת קוד שלב אחר שלב.
-
כדי לבדוק משתנים ומידע על מחסנית, משתמשים בסרגל הצד של ניפוי הבאגים. כדי ליצור אינטראקציה עם סשן הניפוי באגים, משתמשים במסוף ניפוי הבאגים בחלונית התחתונה של כלי ניפוי הבאגים.
כדי לסיים את סשן ניפוי הבאגים, לוחצים על
Stop
בסרגל הכלים של ניפוי הבאגים.
מה ההבדל בין צירוף כלי לניפוי באגים לבין ניפוי באגים באפליקציית Kubernetes
| צירוף ל-pod של Kubernetes | ניפוי באגים באפליקציית Kubernetes |
|---|---|
| ניפוי באגים ב-pod יחיד ב-Kubernetes. | מבצע ניפוי באגים בכל מאגרי התגים שניתן לבצע בהם ניפוי באגים באפליקציה. |
| האפליקציה צריכה לפעול ב-Kubernetes pod לפני ניפוי הבאגים. | האפליקציה מופעלת באשכול 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 להפעיל מחדש את הכלי לניפוי באגים אחרי ששומרים שינויים. |
המאמרים הבאים
- כדי לפתח מהר יותר, אפשר להשתמש בסנכרון קבצים וטעינה מחדש של קבצים.
- הגדרת סביבת פיתוח רציף ב-Cloud Code.
- צפייה ביומני Kubernetes ב-Cloud Code.