kaijaytu commented on code in PR #569: URL: https://github.com/apache/yunikorn-site/pull/569#discussion_r3802886844
########## docs/developer_guide/env_setup.md: ########## @@ -255,3 +255,108 @@ Or follow these simplified steps: More documentation can be found [here](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/). + +## Debug scheduler in a remote cluster + +This section explains how to deploy a debug-enabled scheduler image to a remote cluster and attach a debugger from your local machine using [Delve](https://github.com/go-delve/delve). + +### Prerequisites + +- A remote Kubernetes cluster accessible via `kubectl` (see [above](#access-remote-kubernetes-cluster)) +- A container registry you can push to (Docker Hub, private registry, etc.) +- [Delve](https://github.com/go-delve/delve) installed locally: + ```shell script + go install github.com/go-delve/delve/cmd/dlv@latest + ``` + +### Build a debug image + +Compile the scheduler with optimizations and inlining disabled so that the debugger can map breakpoints correctly: + +```shell script +cd yunikorn-k8shim +CGO_ENABLED=0 go build -gcflags="all=-N -l" -o _output/shim ./pkg/cmd/shim +``` + +Create a Dockerfile for the debug image. This installs Delve and uses it as the entrypoint: + +```dockerfile +FROM golang:1.22 AS dlv-builder +RUN go install github.com/go-delve/delve/cmd/dlv@latest + +FROM ubuntu:22.04 +COPY --from=dlv-builder /go/bin/dlv /usr/local/bin/dlv +COPY _output/shim /scheduler +EXPOSE 2345 +ENTRYPOINT ["dlv", "exec", "/scheduler", "--headless", "--listen=:2345", "--api-version=2", "--accept-multiclient"] +``` + +Build and tag the image: + +```shell script +docker build -t <your-registry>/yunikorn:scheduler-debug -f Dockerfile.debug . +``` + +### Push image to registry + +```shell script +docker push <your-registry>/yunikorn:scheduler-debug +``` + +Alternatively, update the `REGISTRY` variable in the `Makefile` (see [Build Docker images](build.md#build-docker-images)) and adapt the build target. Review Comment: You are right, that sentence is misleading. There is no dedicated debug-image target in the k8shim Makefile today, so editing REGISTRY in the Makefile alone does not help build or push the debug image. I will drop that line and rewrite it around the docker tag / docker push flow the user has to run manually. As a side note: @wilfred-s left a follow-up suggesting a cleaner path -- adding DEBUG_BUILDS=1 make image support in the k8shim Makefile so users can do REGISTRY=<reg> DEBUG_BUILDS=1 make image instead of the manual go build + custom Dockerfile shown here. That is a bigger change (touches k8shim, not just the docs), so I will handle the wording fix in this PR first and open a separate discussion for the Makefile enhancement. Let me know if you would prefer the doc to already reference the future flag. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
