Men-debug aplikasi Kubernetes di Cloud Code untuk Cloud Shell

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 menyuntikkan 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:

  1. Di status bar Cloud Code, klik nama project aktif.

    Nama project aktif di status bar

  2. Di menu Pilih Cepat yang muncul, pilih Debug di Kubernetes.

  3. Jika aplikasi Anda tidak memiliki konfigurasi Skaffold atau konfigurasi peluncuran cloudcode.kubernetes yang diperlukan, Cloud Code akan membantu Anda menyiapkannya.

  4. Konfirmasi apakah akan menggunakan konteks Kubernetes saat ini untuk menjalankan aplikasi (atau beralih ke konteks yang diinginkan).

  5. Jika Anda memilih cluster jarak jauh sebagai konteks, saat diminta, pilih registry gambar untuk mengirimkan gambar.

    Jika project Anda telah mengaktifkan Artifact Registry API dan memiliki setidaknya satu repositori Artifact Registry, Anda dapat menjelajahi dan memilih repositori Artifact Registry yang ada.

    Contoh berikut menunjukkan cara menentukan tempat penyimpanan image container untuk beberapa registry umum:

    Artifact Registry REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME
    Docker Hub docker.io/ACCOUNT
    Pastikan Anda diautentikasi dengan benar jika Anda menggunakan repositori Docker Hub pribadi.

    Untuk membuat nama repositori image akhir, Cloud Code menggabungkan registry image ini dengan nama image yang ditentukan dalam manifes Kubernetes. Pilihan ini disimpan di cloudcode.kubernetes konfigurasi peluncuran (ditemukan di .vscode/launch.json).

    Untuk mengetahui informasi selengkapnya, lihat panduan penanganan image registry.

    Cloud Code akan membangun container Anda, mengirimkannya ke registry, menerapkan konfigurasi Kubernetes ke cluster, dan menunggu peluncuran.

    Setelah peluncuran, Cloud Code akan otomatis meneruskan semua port container yang dideklarasikan ke mesin Anda dan menampilkan URL di jendela output sehingga Anda dapat menjelajahi aplikasi aktif.

  6. 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 pen-debug-an container.

    Prompt Root Jarak Jauh

    Cloud Code melampirkan sesi debug untuk setiap container yang dapat di-debug dalam aplikasi.

    Sekarang Anda dapat melakukan tugas yang sama seperti yang biasa Anda lakukan saat men-debug kode lokal, seperti menyetel titik henti sementara dan menelusuri kode, terhadap cluster Kubernetes aktif.

    Secara default, saat perubahan pada aplikasi Anda disimpan otomatis, Cloud Code akan men-deploy ulang aplikasi Anda dan menyiapkan sesi debug baru. Anda dapat mengaktifkan/menonaktifkan fitur ini dengan tanda watch di konfigurasi peluncuran project Anda.

  7. Untuk memeriksa variabel dan info stack, gunakan Sidebar Debug. Untuk berinteraksi dengan sesi penelusuran bug, gunakan Konsol Debug di penelusur bug panel bawah.

  8. Setelah sesi selesai, Anda dapat menggunakan perintah menu kontekstual berikut:

    • Membuka Log Deployment: Buka log aplikasi dari deployment tertentu dengan penjelajah log Cloud Code.
    • Open Service URL: Buka URL layanan aplikasi dari layanan tertentu di browser web
  9. Jika Anda telah menonaktifkan mode tonton di konfigurasi peluncuran dan ingin membuat perubahan pada aplikasi, serta membangun kembali dan men-deploy ulang aplikasi, di panel Sesi pengembangan, jeda tindakan jalankan, lalu klik Ikon bangun ulang dan deploy ulang Bangun kembali dan deploy ulang aplikasi.

  10. Untuk mengakhiri sesi proses debug, klik Ikon berhenti men-debug Berhenti di Toolbar Debug.

    Setelah Anda mengakhiri sesi penelusuran bug, 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 sehingga debugger dapat dilampirkan.
  • Melampirkan debugger ke satu atau beberapa container yang dapat di-debug di aplikasi Anda. Jika aplikasi Anda memiliki beberapa container yang dapat di-debug (container yang bahasanya didukung oleh proses debug Cloud Code) yang dikonfigurasi di skaffold.yaml, maka debugger akan dilampirkan ke setiap container 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 Init Container dan menulis ulang entrypoint untuk memanggil:

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

Go

Menginstal debugger dlv menggunakan Init Container dan menulis ulang titik entri sehingga sesi debug yang diluncurkan berjalan dengan server debug saja (dalam mode tanpa tampilan), melanjutkan proses yang di-debug saat dimulai, 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 penelusuran bug yang didukung Skaffold, lihat dokumentasi skaffold debug.

Menyiapkan penampung

Untuk menyiapkan penampung Anda untuk proses debug, ikuti petunjuk untuk bahasa yang Anda gunakan:

Node.js

  • Mulai aplikasi Node.js dengan --inspect=<debugPort> dengan debugPort berasal dari konfigurasi lampiran. Contoh: CMD ["node", "--inspect=9229", "index.js"]

Python

  • Pastikan Anda telah menginstal modul ptvsd di komputer dan di container Anda.
  • Mulai aplikasi Python melalui ptvsd. Cocokkan port yang ditentukan dengan kolom debugPort di konfigurasi lampiran. Contoh:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]

Go

  • Pastikan Anda telah menginstal paket dlv di komputer dan penampung Go Anda.
  • 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 untuk memulai layanan.

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 memantau 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 telah menginstal vsdbg, debugger command line .NET Core dari Microsoft, di container Kubernetes Anda.

    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 berjenis cloudcode.kubernetes.

Menambahkan file .vscode/launch.json

Jika project Anda tidak memiliki file launch.json di folder .vscode, Anda dapat menambahkannya menggunakan panel Debug.

  1. Untuk membuka panel Debug, klik Ikon debug Debug di Panel aktivitas.

  2. Pilih Tambahkan Konfigurasi dari menu drop-down.

  3. Pilih Cloud Code: Kubernetes sebagai lingkungan.

    Menetapkan Cloud Code: Kubernetes sebagai lingkungan

  4. Pilih opsi Lampirkan ke Pod Kubernetes.

    Pilih opsi konfigurasi Kubernetes

  5. Pilih bahasa pemrograman yang Anda gunakan.

    Tindakan ini akan membuat dan membuka file launch.json untuk project Anda serta membuat konfigurasi lampiran untuk Anda.

  6. Perbarui atribut konfigurasi dalam file launch.json agar sesuai dengan atribut project Anda. Untuk mengetahui informasi selengkapnya tentang atribut konfigurasi, lihat Atribut konfigurasi.

Tambahkan konfigurasi lampiran ke file .vscode/launch.json Anda

Untuk menambahkan konfigurasi lampiran baru ke file .vscode/launch.json yang ada:

  1. Buka file launch.json.
  2. Untuk memanggil Intellisense cuplikan, klik Tambahkan Konfigurasi.
  3. Untuk menambahkan konfigurasi lampiran, pilih cuplikan Cloud Code: Attach to Kubernetes Pod untuk bahasa yang Anda gunakan.
  4. Perbarui atribut dalam konfigurasi agar sesuai dengan atribut project Anda. Untuk mengetahui informasi selengkapnya tentang atribut konfigurasi, lihat Atribut konfigurasi.

Atribut konfigurasi

Atribut Deskripsi
debugPort Port debug yang digunakan di container.
podSelector Kumpulan pasangan nilai kunci yang digunakan untuk memilih pod debug. Untuk informasi selengkapnya, lihat panduan tentang pemilih. Contoh berikut menunjukkan podSelector umum:

"podSelector": { "app": <deployment-name> }
localRoot Jalur ke direktori lokal yang berisi program yang sedang di-debug. Defaultnya adalah ${workspaceFolder}.
remoteRoot Jalur absolut ke direktori jarak jauh yang berisi program yang sedang di-debug (di container Kubernetes).

Melampirkan debugger ke pod Kubernetes Anda

Cloud Code untuk Cloud Shell mendukung penyambungan debugger ke pod Kubernetes untuk Node.js, Python, Go, Java, dan .NET. Yang Anda butuhkan hanyalah penampung yang dapat di-debug dan konfigurasi penyambungan berjenis cloudcode.kubernetes.

Untuk mengetahui informasi tentang perbedaan antara melampirkan ke pod Kubernetes dan men-debug aplikasi Kubernetes, lihat Perbedaan antara melampirkan debugger ke pod dan men-debug aplikasi Kubernetes.

Untuk melampirkan debugger ke pod Kubernetes, lakukan tugas berikut:

  1. Untuk membuka panel Debug, klik Ikon debug Debug di Panel aktivitas.
  2. Pilih dan luncurkan konfigurasi dengan menekan F5.

    • localhost:${debugPort} diteruskan port ke debugPort di container selama proses debug.

    Sesi proses debug kini berhasil disiapkan. Anda dapat melakukan tugas yang biasanya Anda lakukan saat men-debug kode lokal, seperti menyetel titik henti sementara dan menelusuri kode.

  3. Untuk memeriksa variabel dan info stack, gunakan Sidebar Debug. Untuk berinteraksi dengan sesi penelusuran bug, gunakan Konsol Debug di penelusur bug panel bawah.

  4. Untuk mengakhiri sesi proses debug, klik Ikon berhenti men-debug Berhenti di Toolbar Debug.

Perbedaan antara melampirkan debugger ke pod dan melakukan proses debug aplikasi Kubernetes

Melampirkan ke pod Kubernetes Men-debug aplikasi Kubernetes
Men-debug satu pod Kubernetes. Men-debug semua container yang dapat di-debug di aplikasi.
Aplikasi harus berjalan di pod Kubernetes sebelum proses debug. Menjalankan aplikasi di cluster Kubernetes dan melampirkan debugger.
Menggunakan konfigurasi (.vscode/launch.json) jenis cloudcode.kubernetes dan meminta attach. Menggunakan konfigurasi (.vscode/launch.json) jenis cloudcode.kubernetes dan meminta launch.
Untuk mengetahui informasi selengkapnya, lihat Konfigurasi peluncuran versus 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 khusus untuk bahasa tertentu. Konfigurasi ini tidak khusus untuk bahasa tertentu.
Tidak ada perintah khusus. Debug on Kubernetes.

Langkah berikutnya