Skip to content

Getting started

  1. Open app.ctrlplane.run and sign in with GitHub. During early access, new accounts wait for approval; you can close the page and come back.
  2. Choose Create control plane and give it a name. Names are prefixed with your login, so dev becomes <you>-dev.
  3. It’s ready in about a minute, when it shows Ready.

Your kubeconfig signs you in through your browser with kubelogin, a kubectl plugin. Install it once:

Terminal window
kubectl krew install oidc-login # with krew
brew install int128/kubelogin/kubelogin # or with Homebrew

Open the control plane and choose Download kubeconfig. Then:

Terminal window
export KUBECONFIG=~/Downloads/<you>-dev.kubeconfig
kubectl auth whoami # opens your browser once to sign in
kubectl get crds # empty for now

You’re signed in as github:<your login>, and commands default to the namespace named after your control plane. See Access and authentication for how this works.

Install your operator’s CRDs, either in the site (API → Add CRDs: paste YAML, upload a file, or give a release URL) or with kubectl:

Terminal window
kubectl apply -f \
https://github.com/example/operator/releases/download/v1.0.0/crds.yaml

In Controllers → Deploy a controller, give it a name and your operator’s image, for example ghcr.io/example/operator:v1.0.0. ctrlplane runs it with a kubeconfig for your control plane; most operators built with controller-runtime work unchanged. See Controllers.

Terminal window
kubectl apply -f my-resource.yaml
kubectl get <kind> -w

Your controller sees it and acts on it. Its logs and metrics are under Observability.