This guide deploys coder-k8s in controller-only mode (--app=controller).
!!! note
deploy/deployment.yaml defaults to --app=all. In this guide, we explicitly switch it to controller-only mode.
kubectl create namespace coder-systemconfig/crd/bases/ includes CRDs for:
CoderControlPlaneCoderProvisionerCoderWorkspaceProxy
Apply them:
kubectl apply -f config/crd/bases/kubectl apply -f config/rbac/kubectl apply -f deploy/deployment.yaml
kubectl -n coder-system set args deployment/coder-k8s --containers=coder-k8s -- --app=controllerkubectl rollout status deployment/coder-k8s -n coder-system
kubectl get pods -n coder-system
kubectl logs -n coder-system deploy/coder-k8sOptional smoke check:
kubectl apply -f config/samples/coder_v1alpha1_codercontrolplane.yaml
kubectl get codercontrolplanes -ABy default, deploy/deployment.yaml uses ghcr.io/coder/coder-k8s:latest.
Edit the image tag before applying if you need a pinned version.
Skip kubectl set args ... --app=controller and keep the default --app=all, then also apply:
kubectl apply -f deploy/apiserver-service.yaml
kubectl apply -f deploy/apiserver-apiservice.yaml
kubectl apply -f deploy/mcp-service.yaml