Home > OS >  Trying to debug a spring dataflow stream deployed in kubernetes
Trying to debug a spring dataflow stream deployed in kubernetes

Time:05-13

I have succesfully deployed a stream using spring dataflow in eks, but I need to debug an application of the stream.

I have set up spring.cloud.deployer.kubernetes.environment-variables: JAVA_TOOL_OPTIONS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000' in the application I want to debug, and the application starts an it is listening on that port.

Is there any property to tell kubernetes to map this port and make it accessible?

Thank you.

CodePudding user response:

Try this:

enter image description here

And then try a kubectl port-forward

service/YOUR_SERVICE_NAME Host port:Service port 

The documentation is really complete btw, there's a lot of information here:

enter image description here

add JAVA_TOOL_OPTIONS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000' into environment-variables. enter image description here

In my case I have kubernetes on aws and is deployed in private mode and the only way I have found in this moment is to create a LoadBalancer for the application. I know it is insecure but itś enough for my needs. enter image description here

Finally as @bguess pointed we have to add our debug port to serverPorts, this property isn't in the list when we psuh edit button in the application so we have to write it: enter image description here

So this is the way to configure with the web interface.

If we want to use a terminal in linux or similar we can do this steps:

definition="app-source | app-process | app-sink"
curl "$scdf_url/streams/definitions" --write-out '%{http_code}' --silent --output /dev/null -X POST -d "name=poc-stream&definition=$definition&deploy=false"

Where definition is our stream definition and scdf_url is the spring cloud dataflow server url. After the curl call we will have our stream created but undeployed, To deploy with the debug configuration:

properties="$(cat << EOF
{
"deployer.app-source.kubernetes.environment-variables":
"JAVA_TOOL_OPTIONS=’-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000’",
"deployer.app-source.kubernetes.servicePorts":"8000",
"deployer.app-source.kubernetes.create-load-balancer":"true"
}
EOF
)"
curl "$scdf_url/streams/deployments/poc-stream" --write-out '%{http_code}' --silent --output /dev/null -X POST -H "Content-Type: application/json" -d "$properties"

And that's the way I have configured it.

Additionally you will have to increase inactivity time of the LoadBalancer because his value is 60s and after that time it will disconnects you.

  • Related