Setting up Your Development Environment

March 16, 2026 ยท View on GitHub

This page explains you how to set up your development environment.

Requirements

Before you start, install the following tools and packages:

  • go (>= 1.17)
  • golangci-lint
  • kubectl (>= 1.14)
  • kubebuilder (>= 2.0.0)
  • docker (>= 19.0.0 with optional buildx extension for multi-arch builds)
  • helm (>= 3.2.0, preferably 3.9.x)
  • helm unittest (only needed if developing helm charts) helm plugin install https://github.com/helm-unittest/helm-unittest.git --version 1.0.3
  • Kubernetes distribution such as minikube or kind, or access to a hosted Kubernetes service such as GKE or AKS

Get sources

git clone https://github.com/elastic/cloud-on-k8s.git
cd cloud-on-k8s

Check prerequisites

Run make check-requisites to check that all dependencies are installed.

Development

  1. Run make dependencies to download the Go libraries needed to compile the project.
  2. Get a working development Kubernetes cluster. You can use:
  • Minikube

    make bootstrap-minikube
    
  • Kind

    Use deployer (see the deployer README on how to customize which version of Kind will be used):

    make switch-kind bootstrap-cloud
    

    Note for Linux users: If you encounter "too many open files" errors from the operator (e.g., failed to create fsnotify watcher), you may need to increase inotify limits:

    sudo sysctl -w fs.inotify.max_user_instances=512
    

    Docker Desktop on macOS typically has higher defaults (8192), so this is usually only needed on Linux with stock distro settings.

  • Cloud providers

    Use deployer (note that some one time configuration is required):

    • GKE: make switch-gke bootstrap-cloud
    • AKS: make switch-aks bootstrap-cloud
  1. Docker registry

The docker.elastic.co registry and the eck-dev namespace are setup by default.

It is up to you to manage the authentication (docker login -u $username docker.elastic.co) to be able to push images into it.

A file .registry.env can be created to use another Docker registry.

make switch-registry-gcr configures this file to use Google Container Registry with:

REGISTRY = eu.gcr.io
REGISTRY_NAMESPACE = my-gcloud-project
E2E_REGISTRY_NAMESPACE = my-gcloud-project
  1. Deploy the operator
  • make run to run the operator locally, or make deploy to deploy the operators into the configured k8s cluster.
  • make samples to apply a sample stack resource.

Running unit and integration tests

make unit integration

Running E2E tests

E2E tests will run in the e2e-mercury and e2e-venus namespaces.

Run make run to start the operator and then run make e2e-local in a separate shell to run the E2E tests.

Enabling APM tracing

ECK is instrumented with Elastic APM tracing. To run ECK locally with tracing enabled, run:

ENABLE_TRACING=true ELASTIC_APM_SERVER_URL=https://<apm-server-url> ELASTIC_APM_SECRET_TOKEN=<token> ELASTIC_APM_VERIFY_SERVER_CERT=false make run

Development mode

Starting the operator with the --development flag enables the development mode. The following set of flags become available for use in this mode.

FlagDescription
auto-port-forwardAllows the operator to be run locally (outside of a Kubernetes cluster) by port-forwarding to the remote cluster.
debug-http-listenAddress to start the debug server which provides access to pprof endpoints. Default is localhost:6060.