I'm successfully debugging Spring Boot applications written in Java inside Kubernetes using the following setup:
-Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
to the mvn spring-boot:run
command line in Dockerfile
.Add
- name: java-debug
containerPort: 5005
to spec.containers.ports
of the Deployment
and
- name: java-debug
protocol: TCP
port: 5005
targetPort: 5005
to spec.ports
of the Service
.
Add a Remote
run configuration with Debugger mode
set to Attach to remove JVM
and the host of the Service
.
Doing the same for a Kotlin project, the debugger connects to the JVM and accepts breakpoints, however, doesn't stop at them, no matter how often I execute the code where it should stop. The code is executed on k8s according to logs and application feedback.
I'm testing this locally on microk8s using IntelliJ 2019.1.2 CE.
As mdaniel noted, it's indeed a sign of bad practices if I need to do what I'm trying to do. This task needs to be approached with configurable logging and integration tests.