באמצעות 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.yamlההגדרה או את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 Container (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 מטפל באופן אוטומטי בפרטי ההגדרה הבאים לכל השפות הנתמכות:
- העברת פורט לצורך ניפוי באגים כדי שאפשר יהיה לצרף את ה-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 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.