This page describes how to install Metacontroller, either to develop your own controllers or just to run third-party controllers that depend on it.


  • Kubernetes v1.8+ is recommended for the improved CRD support, especially garbage collection on custom resources.
  • You should have kubectl available and configured to talk to the desired cluster.

Grant yourself cluster-admin (GKE only)

Due to a known issue in GKE, you’ll need to first grant yourself cluster-admin privileges before you can install the necessary RBAC manifests.

kubectl create clusterrolebinding <user>-cluster-admin-binding --clusterrole=cluster-admin --user=<user>@<domain>

Replace <user> and <domain> above based on the account you use to authenticate to GKE.

Install Metacontroller

# Create 'metacontroller' namespace, service account, and role/binding.
kubectl apply -f
# Create CRDs for Metacontroller APIs, and the Metacontroller StatefulSet.
kubectl apply -f

If you prefer to build and host your own images, please see the build instructions in the contributor guide.


The Metacontroller server has a few settings that can be configured with command-line flags (by editing the Metacontroller StatefulSet in manifests/metacontroller.yaml):

Flag Description
-v Set the logging verbosity level (e.g. -v=4). Level 4 logs Metacontroller’s interaction with the API server. Levels 5 and up additionally log details of Metacontroller’s invocation of lambda hooks. See the troubleshooting guide for more.
--discovery-interval How often to refresh discovery cache to pick up newly-installed resources (e.g. --discovery-interval=10s).
--cache-flush-interval How often to flush local caches and relist objects from the API server (e.g. --cache-flush-interval=30m).