באמצעות 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, לוחצים על שם הפרויקט הפעיל.

בתפריט 'בחירה מהירה' שמופיע, בוחרים באפשרות ניפוי באגים ב-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 (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 מטפל באופן אוטומטי בפרטי ההגדרה הבאים לכל השפות הנתמכות:
- העברה ליציאה אחרת של יציאת ניפוי הבאגים כדי שאפשר יהיה לצרף את הכלי לניפוי באגים.
- מצמידים מאתר באגים למאגר אחד או יותר שאפשר לבצע בהם ניפוי באגים באפליקציה.
אם לאפליקציה שלכם יש כמה קונטיינרים שאפשר לנפות בהם באגים (קונטיינרים שהשפה שלהם נתמכת על ידי ניפוי באגים ב-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 של הפרויקט, אפשר להוסיף אותו באמצעות חלונית הניפוי באגים.
כדי לנווט לחלונית הניפוי באגים, לוחצים על
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, מבצעים את המשימות הבאות:
- כדי לנווט לחלונית הניפוי באגים, לוחצים על
Run and Debug
בסרגל הפעילות. בוחרים את ההגדרה ומפעילים אותה על ידי לחיצה על
F5.-
localhost:${debugPort}מועבר ליציאה אחרת אלdebugPortבקונטיינר במהלך ניפוי הבאגים.
סיימתם להגדיר את סשן ניפוי הבאגים. אתם יכולים לבצע את המשימות שאתם בדרך כלל מבצעים כשמנפים באגים בקוד מקומי, כמו הגדרת נקודות עצירה והרצת קוד בשלבים.
-
כדי לבדוק משתנים ומידע על מחסנית, משתמשים בסרגל הצד של ניפוי הבאגים. כדי ליצור אינטראקציה עם סשן הניפוי באגים, משתמשים במסוף ניפוי הבאגים בחלונית התחתונה של כלי ניפוי הבאגים.
כדי לסיים את סשן ניפוי הבאגים, לוחצים על
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 להפעיל מחדש את הכלי לניפוי באגים אחרי ששומרים שינויים. |
המאמרים הבאים
- כדי לזרז את תהליך הפיתוח, אפשר להשתמש בסנכרון קבצים ו-Hot Reload.
- הגדרת סביבת פיתוח רציף ב-Cloud Code.
- צפייה ביומני Kubernetes ב-Cloud Code.