DEV Community 👩‍💻👨‍💻

Cover image for Debug Kubernetes Operator-sdk locally using Vscode
Austin Cunningham
Austin Cunningham

Posted on • Updated on

Debug Kubernetes Operator-sdk locally using Vscode

I recently got started with Kubernetes Operators on Openshift 4.1 . A lot of lessons learned but have more to learn.

What are Operators

Kubernetes Operator are a way of leveraging the Kubernetties API to create your own Kubernetes custom resources.

The project I am working on Integreatly is using the Operator-sdk framework to build operators, this takes some of the complexity out of building a Kubernetes Operators.

I won't go into installing a operator that's documented in the Operator-sdk docs.

Running locally

You can run the operator-sdk locally, and point it at the namespace for your operator

operator-sdk up local --namespace=integreatly-operator

NOTE: command changed with v0.15.0 operator-sdk run --local --namespace=integreatly-operator

What this means that instead of having to build a container image and push it to a app registry like quay.io or dockerhub.com, you can just use your local code base as the source instead of a container image and use it to deploy your operator to your Openshift 4 cluster.

Setup Vscode to debug

I use Vscode so how do I debug using operator-sdk up local?

Delve is a debug tool for golang, it can be downloaded here https://github.com/go-delve/delve/tree/master/Documentation/installation or by just using go

go get -u github.com/go-delve/delve/cmd/dlv 

Delve is used by this Vscode Go plugin https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go

You need to run delve with the command line switch --enable-delve on the up local command
e.g. The operator I am working on is called integreatly-operator so the commands to run it are as follows

# You need to set the namespace to watch 
$ export WATCH_NAMESPACE=integreatly-operator
# You can then run the up local with delve enabled
$ operator-sdk up local --namespace=integreatly-operator --enable-delve
# you will see something like
INFO[0000] Running the operator locally.                
INFO[0000] Using namespace integreatly-operator.        
INFO[0000] Delve debugger enabled with args [--listen=:2345 --headless=true --api-version=2 exec build/_output/bin/integreatly-operator-local --] 
API server listening at: [::]:2345

NOTE: WATCH_NAMESPACE should always point to the namespace for your operator

You will need a launch json for Vscode to interact with this headless mode of delve

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Integreatly Operator",
        "type": "go",
        "request": "launch",
        "mode": "auto",
        "program": "${workspaceFolder}/cmd/manager/main.go",
        "env": {
          "WATCH_NAMESPACE": "integreatly-operator"
        },
        "args": []
      }
    ]
  }

Start the vscode debugger. Open the Debug console and you will see the standard output from the operator-sdk up local command, Your debugger will stop on the set breakpoints.
Alt Text

Top comments (0)

Join us at DEV
Yes, this is technically an “ad”, but really we just want to ask if you want to join DEV. We have 900k+ developers reading, posting, and enjoying community, and would love to have you.   Create an account and continue your coding journey.