Metacontroller is an add-on for Kubernetes that makes it easy to write and deploy custom controllers in the form of simple scripts.
Instead of writing and maintaining a full Go controller with client libraries, informers, and boilerplate, you describe what resources to watch declaratively and provide a webhook (in any language) that receives the current state as JSON and returns the desired state as JSON. Metacontroller takes care of the rest: watches, caching, work queues, retries, and level-triggered reconciliation.
This is a continuation of great work started by GKE here. We are excited to move forward with Metacontroller as a community maintained project. A big thank you to all of the wonderful Metacontroller community members that made this happen!
- Write controllers in any language - all you need is a webhook that speaks JSON, so Python, JavaScript, Jsonnet, Go, or anything else works.
- No boilerplate - no schema/IDL, no generated code, no client library dependencies.
- Production-ready behavior for free - label selectors, adopt/orphan semantics, garbage collection, watches, caching, work queues, optimistic concurrency, and retries with backoff all come built in.
- Build reusable abstractions - compose existing Kubernetes APIs into
higher-level operators, or reimplement APIs like
StatefulSetas Metacontroller hooks.
See the Features page for the full picture.
- 📖 Read the documentation site for a full introduction, concepts, and API reference.
- 🚀 Follow the install guide
(via
kubectl apply -kor Helm). - 💡 Browse examples to see working controllers you can adapt.
- 🛠️ Walk through creating your first controller.
kubectl apply -k https://github.com/metacontroller/metacontroller/manifests/productionSee the install guide for prerequisites, the Helm alternative, and notes on migrating from the original GKE project.
Migrating from https://github.com/GoogleCloudPlatform/metacontroller
Please follow this guide.
- File GitHub issues for bugs, feature requests, and proposals.
- Join the #metacontroller channel on Kubernetes Slack.
Contributions are very welcome! See CONTRIBUTING.md and the contributor guide for how to build the project, run tests, and submit changes.
This project is licensed under the Apache License 2.0.