Kubernetes for Java Developers – Debug Application

Java Kubernetes (4 Part Series)

1 Kubernetes for Java Developers – Setup
2 Kubernetes for Java Developers – Creating a docker image
3 Kubernetes for Java Developers – Deploy Application
4 Kubernetes for Java Developers – Debug Application

Debug application

At this point, we deployed our application within a local cluster. But now we have a problem. How do I debug my application that is inside the docker that is inside the kubernetes that is inside a virtual machine?

Prepare to debug

In this case, we will use a remote Java debug.

First step:

Prepare your Dockerfile:

FROM openjdk:11.0.3-jdk-slim
RUN mkdir /usr/myapp
COPY target/java-kubernetes.jar /usr/myapp/app.jar
WORKDIR /usr/myapp
EXPOSE 8080
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar app.jar" ]

Enter fullscreen mode Exit fullscreen mode

This ENTRYPOINT allows you to pass options to the java through $JAVA_OPTS environment variable.

Second step:

Changing app-configmap.yaml file to fill $JAVA_OPTS.

JAVA_OPTS: "-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n -Xms256m -Xmx512m -XX:MaxMetaspaceSize=128m"

Enter fullscreen mode Exit fullscreen mode

Third step:

Building and deploy app:

mvn clean install eval $(minikube -p dev.to docker-env) && docker build --force-rm -t java-k8s .
kubectl apply -f kubernetes/app/

Enter fullscreen mode Exit fullscreen mode

Fourth step:

Exposing debug port to localhost:

Get pods:

kubectl get pods -n dev-to

NAME                     READY   STATUS    RESTARTS   AGE
myapp-7796bc89bf-h2f82   1/1     Running   0          3h3m

Enter fullscreen mode Exit fullscreen mode

Expose pod 5005 port:

kubectl port-forward -n dev-to myapp-7796bc89bf-h2f82 5005:5005
Forwarding from 127.0.0.1:5005 -> 5005
Forwarding from [::1]:5005 -> 5005

Enter fullscreen mode Exit fullscreen mode

Change your pod name as necessary.

Create a remote debug on your IDE:

On IntelliJ, go to Run/Debug Configurations.

  • Add new remote configuration like this:

After that, run the configuration. You should see the message below:

Connected to the target VM, address: 'localhost:5005', transport: 'socket'

Enter fullscreen mode Exit fullscreen mode

Check if works:

Now, you can set a breakpoint in the HelloController.

minikube -p dev.to service -n dev-to myapp --url
http://192.168.99.100:32301

Enter fullscreen mode Exit fullscreen mode

curl http://192.168.99.100:32301/hello

Enter fullscreen mode Exit fullscreen mode

Conclusion

In this part, we learned about how to debug application inside a local kubernetes cluster.

In the next part, we will see some good practices and how to access application with friendly URL using Ingress.

See you soon!

Java Kubernetes (4 Part Series)

1 Kubernetes for Java Developers – Setup
2 Kubernetes for Java Developers – Creating a docker image
3 Kubernetes for Java Developers – Deploy Application
4 Kubernetes for Java Developers – Debug Application

原文链接:Kubernetes for Java Developers – Debug Application

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容