Getting started
1. Sign in and create a control plane
Section titled “1. Sign in and create a control plane”- 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.
- Choose Create control plane and give it a name. Names are prefixed with your login, so
devbecomes<you>-dev. - It’s ready in about a minute, when it shows Ready.
2. Install kubelogin
Section titled “2. Install kubelogin”Your kubeconfig signs you in through your browser with kubelogin,
a kubectl plugin. Install it once:
kubectl krew install oidc-login # with krewbrew install int128/kubelogin/kubelogin # or with Homebrew3. Download the kubeconfig and connect
Section titled “3. Download the kubeconfig and connect”Open the control plane and choose Download kubeconfig. Then:
export KUBECONFIG=~/Downloads/<you>-dev.kubeconfigkubectl auth whoami # opens your browser once to sign inkubectl get crds # empty for nowYou’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.
4. Add your API types
Section titled “4. Add your API types”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:
kubectl apply -f \ https://github.com/example/operator/releases/download/v1.0.0/crds.yaml5. Deploy your controller
Section titled “5. Deploy your controller”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.
6. Create a resource
Section titled “6. Create a resource”kubectl apply -f my-resource.yamlkubectl get <kind> -wYour controller sees it and acts on it. Its logs and metrics are under Observability.
- Your operator needs to reach something in your own network? Turn on a tunnel.
- Want your own dashboards? Use the data in Grafana.