Local development and debugging

Tips and tricks for contributors

Local run of metacontroller

There are different flavours of manifests shipped to help with local development:

  • manifests/dev
  • manifests/debug

Development build

The main difference it that image defined in manifest is localhost/metacontroller:dev, therefore:

  • apply dev manifests - kubectl apply -k manifests/dev
  • build docker image with command - make image - this will compile the binary and build the container image
  • load image into cluster (i.e. kind load docker-image localhost/metacontroller:dev in kind)
  • restart pod (i.e. kubectl delete pod/metacontroller-0 --namespace metacontroller)

Debug build

Debug requires building go sources in special way, which is done with make build_debug; the following image built with the Dockerfile.debug dockerfile will then add it to the debug Docker image:

  • apply debug manifests - kubectl apply -k manifests/debug
  • build debug binary and image - make image_debug
  • load image into cluster (i.e. kind load docker-image localhost/metacontroller:debug in kind)
  • restart pod
  • on startup, go process will wait for debugger on port 40000
  • port forward port 40000 from container into localhost, i.e. kubectl port-forward metacontroller-0 40000:40000
  • attach go debugger to port 40000 on localhost