Cloud Code memungkinkan Anda men-debug aplikasi yang di-deploy ke
cluster Google Kubernetes Engine (GKE) dengan memanfaatkan
skaffold debug
.
Anda dapat men-debug aplikasi di cluster lokal (seperti minikube atau Docker Desktop), GKE, atau penyedia cloud lainnya.
Dengan dukungan proses debug Cloud Code, Anda tidak perlu menyelesaikan penyiapan manual seperti menyiapkan penerusan port atau memasukkan argumen debug khusus bahasa. Proses debug memerlukan aplikasi GKE yang siap untuk Cloud Code yang menyertakan file konfigurasi skaffold.yaml
dan konfigurasi peluncuran cloudcode.kubernetes
.
Men-debug aplikasi GKE
Untuk mulai men-debug aplikasi GKE, ikuti langkah-langkah berikut:
Di status bar Cloud Code, klik nama project yang aktif.
Di menu Pilih Cepat yang muncul, pilih Debug on Kubernetes.
Jika aplikasi Anda tidak memiliki konfigurasi Skaffold atau konfigurasi peluncuran
cloudcode.kubernetes
yang diperlukan, Cloud Code akan membantu Anda menyiapkannya.Konfirmasi apakah akan menggunakan konteks Kubernetes saat ini untuk menjalankan aplikasi (atau beralih ke konteks yang diinginkan).
Jika Anda memilih cluster jarak jauh sebagai konteks, saat diminta, pilih registry gambar tempat gambar akan di-push. Jika menggunakan Container Registry, Anda dapat membuka registry yang ada atau menentukan nama registry yang akan dibuat. Jika project Anda telah mengaktifkan Artifact Registry API dan setidaknya satu repositori Artifact Registry, Anda dapat menjelajahi dan memilih repositori Artifact Registry yang ada.
Contoh berikut menunjukkan cara menentukan tempat image container disimpan untuk beberapa registry umum:
Artifact Registry {region}-docker.pkg.dev/{project_id}/{repo-name} Container Registry gcr.io/{project_id} Docker Hub docker.io/{account}
Pastikan Anda diautentikasi dengan benar jika menggunakan repositori Docker Hub pribadi.Untuk membuat nama repositori image akhir, Cloud Code akan menyambungkan registry image ini dengan nama image yang ditentukan dalam manifes Kubernetes. Pilihan ini disimpan di konfigurasi peluncuran
cloudcode.kubernetes
Anda (ditemukan di.vscode/launch.json
).Untuk mengetahui informasi selengkapnya, lihat panduan penanganan registry image.
Cloud Code mem-build container Anda, mengirimkannya ke registry, menerapkan konfigurasi Kubernetes ke cluster, dan menunggu peluncuran.
Setelah peluncuran, Cloud Code akan otomatis meneruskan semua port penampung yang dideklarasikan ke mesin Anda dan menampilkan URL di jendela output sehingga Anda dapat menjelajahi aplikasi live.
Untuk setiap penampung yang dapat di-debug di aplikasi Anda, konfirmasi atau masukkan direktori di penampung jarak jauh tempat program yang ingin Anda debug berada.
Atau, Anda dapat menekan ESC untuk melewati proses proses debug penampung.
Cloud Code melampirkan sesi debug untuk setiap penampung yang dapat di-debug dalam aplikasi.
Sekarang Anda dapat melakukan tugas yang sama seperti yang biasanya Anda lakukan saat men-debug kode lokal, seperti menetapkan titik henti sementara dan menelusuri kode, terhadap cluster Kubernetes yang aktif.
Secara default, saat perubahan pada aplikasi Anda disimpan secara otomatis, Cloud Code akan men-deploy ulang aplikasi Anda dan menyiapkan sesi debug baru. Anda dapat mengaktifkan/menonaktifkan fitur ini dengan flag
watch
di konfigurasi peluncuran project.Untuk memeriksa variabel dan info stack, gunakan Sidebar Debug. Untuk berinteraksi dengan sesi proses debug, gunakan Debug Console di debugger panel bawah.
Setelah sesi selesai, Anda dapat menggunakan perintah menu kontekstual berikut:
- Buka Log Deployment: Buka log aplikasi deployment tertentu dengan Logs Explorer Cloud Code.
- Buka URL Layanan: Membuka URL layanan aplikasi dari layanan tertentu di browser web
Jika Anda telah menonaktifkan mode watch di konfigurasi peluncuran dan ingin melakukan perubahan pada aplikasi serta mem-build ulang dan men-deploy ulang aplikasi, di panel sesi Pengembangan, jeda tindakan run, lalu klik Build ulang dan deploy ulang aplikasi.
Untuk mengakhiri sesi proses debug, klik Stop di Debug Toolbar.
Setelah Anda mengakhiri sesi proses debug, semua resource Kubernetes yang di-deploy akan dihapus dari cluster.
Detail konfigurasi
Cloud Code, yang didukung oleh Skaffold, secara otomatis menangani detail konfigurasi berikut untuk semua bahasa yang didukung:
- Meneruskan port debug agar debugger dapat dilampirkan.
- Melampirkan debugger ke satu atau beberapa penampung yang dapat di-debug di aplikasi Anda.
Jika aplikasi Anda memiliki beberapa penampung yang dapat di-debug (penampung yang bahasanya didukung oleh debug Cloud Code) yang dikonfigurasi di
skaffold.yaml
, debugger akan dilampirkan ke setiap penampung yang dapat di-debug. - Mempertahankan definisi pemetaan sumber di seluruh sesi; Anda dapat menyesuaikan definisi ini dengan mengedit file
.vscode/launch.json
secara langsung.
Cloud Code juga menangani detail konfigurasi khusus bahasa berikut:
Node.js
Menulis ulang titik entri untuk memanggil:
node --inspect=localhost:9229
Python
Menginstal modul ptvsd
menggunakan Penampung Init dan menulis ulang titik entri untuk memanggil:
python -m ptvsd --host localhost --port 5678
Go
Menginstal
debugger dlv
menggunakan Penampung Init dan menulis ulang titik entri sehingga sesi debug
yang diluncurkan berjalan hanya dengan server debug (dalam mode headless), melanjutkan
proses yang di-debug saat memulai, menerima beberapa koneksi klien, dan memproses di
localhost:56268
:
dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --
Java
Menambahkan lingkungan JAVA_TOOLS_OPTIONS
dengan konfigurasi Java Debug
Wire Protocol (JDWP) yang sesuai sehingga agen proses debug JDWP memproses
koneksi soket di port 5005 dan memungkinkan VM mulai dieksekusi
sebelum debugger dilampirkan:
jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y
Untuk mengetahui detail selengkapnya tentang proses debug yang didukung Skaffold, lihat
dokumentasi skaffold debug
.
Menyiapkan penampung
Untuk menyiapkan penampung guna melakukan proses debug, ikuti petunjuk untuk bahasa yang Anda gunakan:
Node.js
- Mulai aplikasi Node.js dengan
--inspect=<debugPort>
dengandebugPort
berasal dari konfigurasi lampiran. Contoh:CMD ["node", "--inspect=9229", "index.js"]
Python
- Pastikan Anda telah menginstal modul
ptvsd
di komputer dan penampung. - Mulai aplikasi Python melalui
ptvsd
. Cocokkan port yang ditentukan dengan kolomdebugPort
di konfigurasi lampiran. Contoh:CMD ["python", "-m", "ptvsd", "--port", "
" , "app.py"]
Go
- Pastikan Anda telah menginstal paket
dlv
di komputer dan penampung Go. Mulai aplikasi Go Anda melalui
dlv debug
.Port yang ditentukan dalam perintah awal harus sama dengan nilai atribut
debugPort
dalam konfigurasi lampiran. Contoh:CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]
Tips Pemecahan Masalah: Saat men-debug aplikasi Go, aplikasi akan berhenti dan menunggu debugger dilampirkan. Lampirkan debugger agar layanan dimulai.
Java
- Pastikan JVM diinstal di komputer Anda.
Mulai aplikasi Java dengan opsi berikut, dengan
debugPort
berasal dari konfigurasi lampiran.-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=
,quiet=y Misalnya, untuk memulai aplikasi Java dalam mode debug dan memproses koneksi di port
debugPort
:ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"]
.NET Core
Pastikan Anda memiliki
vsdbg
, debugger command line .NET Core dari Microsoft, yang diinstal di penampung Kubernetes.Contoh:
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
Menyiapkan konfigurasi lampiran
Untuk melampirkan ke penampung yang dapat di-debug, Anda harus memiliki
konfigurasi lampiran
dari jenis cloudcode.kubernetes
.
Menambahkan file .vscode/launch.json
Jika project Anda tidak memiliki file launch.json
di folder
.vscode
, Anda dapat menambahkannya menggunakan panel Debug.
Untuk membuka panel Debug, klik Debug di panel Aktivitas.
Pilih Tambahkan Konfigurasi dari menu drop-down.
Pilih Cloud Code: Kubernetes sebagai lingkungan.
Pilih opsi Lampirkan ke Pod Kubernetes.
Pilih bahasa pemrograman yang Anda gunakan.
Tindakan ini akan membuat dan membuka file
launch.json
untuk project Anda dan membuat konfigurasi lampiran untuk Anda.Perbarui atribut konfigurasi dalam file
launch.json
agar cocok dengan project Anda. Untuk informasi selengkapnya tentang atribut konfigurasi, lihat Atribut konfigurasi.
Menambahkan konfigurasi lampiran ke file .vscode/launch.json
Untuk menambahkan konfigurasi lampiran baru ke file .vscode/launch.json
yang ada:
- Buka file
launch.json
. - Untuk memanggil Intellisense cuplikan, klik Tambahkan Konfigurasi.
- Untuk menambahkan konfigurasi lampiran, pilih cuplikan Cloud Code: Attach to Kubernetes Pod untuk bahasa yang Anda gunakan.
- Perbarui atribut dalam konfigurasi agar cocok dengan atribut project Anda. Untuk informasi selengkapnya tentang atribut konfigurasi, lihat Atribut konfigurasi.
Atribut konfigurasi
Atribut | Deskripsi |
---|---|
debugPort | Port debug yang digunakan di penampung. |
podSelector | Kumpulan pasangan nilai kunci yang digunakan untuk memilih pod debug. Untuk informasi
selengkapnya, lihat
panduan tentang pemilih).
Contoh berikut menunjukkan podSelector standar:
"podSelector": {
"app": <deployment-name>
}
|
localRoot | Jalur ke direktori lokal yang berisi program yang sedang di-debug. Default-nya adalah ${workspaceFolder}. |
remoteRoot | Jalur absolut ke direktori jarak jauh yang berisi program yang sedang di-debug (di penampung Kubernetes). |
Melampirkan debugger ke pod Kubernetes
Cloud Code untuk Cloud Shell mendukung pemasangan debugger ke pod Kubernetes untuk Node.js, Python, Go, Java, dan .NET. Yang Anda butuhkan hanyalah penampung yang dapat di-debug dan konfigurasi lampiran dari jenis cloudcode.kubernetes
.
Untuk mengetahui informasi tentang perbedaan antara cara melampirkan ke pod Kubernetes dengan melakukan proses debug aplikasi Kubernetes, lihat Perbedaan antara cara melampirkan debugger ke pod dengan melakukan proses debug aplikasi Kubernetes.
Untuk memasang debugger ke pod Kubernetes, lakukan tugas berikut:
- Untuk membuka panel Debug, klik Debug di panel Aktivitas.
Pilih dan luncurkan konfigurasi dengan menekan
F5
.localhost:${debugPort}
diteruskan port kedebugPort
di container saat proses debug.
Sesi proses debug kini berhasil disiapkan. Anda dapat melakukan tugas yang biasanya dilakukan saat men-debug kode lokal, seperti menetapkan titik henti sementara dan melacak kode.
Untuk memeriksa variabel dan info stack, gunakan Sidebar Debug. Untuk berinteraksi dengan sesi proses debug, gunakan Debug Console di debugger panel bawah.
Untuk mengakhiri sesi proses debug, klik Stop di Toolbar Debug.
Cara memasang debugger ke pod berbeda dengan proses debug aplikasi Kubernetes
Melampirkan ke pod Kubernetes | Men-debug aplikasi Kubernetes |
---|---|
Men-debug satu pod Kubernetes. | Men-debug semua penampung yang dapat di-debug dalam aplikasi. |
Aplikasi harus berjalan di pod Kubernetes sebelum proses debug. | Menjalankan aplikasi di cluster Kubernetes dan melampirkan debugger. |
Menggunakan konfigurasi (.vscode/launch.json) dari jenis cloudcode.kubernetes dan meminta attach .
|
Menggunakan konfigurasi (.vscode/launch.json) dari jenis cloudcode.kubernetes dan meminta launch .Untuk informasi selengkapnya, lihat Konfigurasi peluncuran versus konfigurasi lampiran. |
Contoh Konfigurasi:
{ "name": "Attach to Kubernetes Pod (NodeJS)", "type": "cloudcode.kubernetes", "request": "attach", "language": "Node", "debugPort": 9229, "podSelector": { "app": "hello-world" }, "localRoot": "${workspaceFolder}", "remoteRoot": "/app" } |
Contoh Konfigurasi:
{ "name": "Run/Debug on Kubernetes", "type": "cloudcode.kubernetes", "request": "launch", "skaffoldConfig": "${workspaceFolder}/skaffold.yaml", "watch": true, "cleanUp": true, "portForward": true } |
Konfigurasi ini tidak dapat digunakan untuk menjalankan aplikasi. | Konfigurasi ini dapat digunakan untuk menjalankan atau men-debug aplikasi. |
Konfigurasi ini bersifat khusus per bahasa. | Konfigurasi ini tidak khusus bahasa. |
Tidak ada perintah khusus. | Perintah Debug on Kubernetes. |
Langkah selanjutnya
- Gunakan sinkronisasi file dan hot reload untuk mempercepat pengembangan.
- Siapkan lingkungan continuous development di Cloud Code.
- Lihat log Kubernetes di Cloud Code.