Skip to Main Content
Lightning Talk Intermediate First Talk

Build Your Own Kubernetes API with KRO: No Operator, No Go

Proposal status is Rejected
Session Description

Every app you run on Kubernetes is a pile of objects that must agree, and nothing in the cluster makes them. So you bundle them: a Helm chart, a Kustomize overlay, or a hand-written operator when you want a real typed API. All three work. All three leave you maintaining Go templating, patches, or a reconcile loop you own forever. Helm renders your YAML once, then forgets it.

KRO (Kube Resource Orchestrator, pronounced "crow") is a quieter fourth option, born at AWS, now a joint AWS/Google/Microsoft project in kubernetes-sigs. You write a ResourceGraphDefinition: the fields you want to expose and the resources behind them, wired with CEL. KRO generates a real CRD and registers a controller at runtime. No Go, no provider packages. Your teammates apply a clean new type in a few lines, and the cluster treats it like any other API object: validated, defaulted, kubectl get webapp, status you can watch. The stack comes up in the right order, which KRO works out. That is what makes it click: you never declare the order, the references are the order.

This talk assumes you know Kubernetes and have never touched KRO. I'll build a WebApp API live, then break it on purpose. I'll go past the README into the failure that traps newcomers: one mistyped CEL reference silently parks an instance in ErrDataPending, and because the reconcile is generation-based, no timer rescues it. Then how KRO differs from Crossplane (graduated CNCF, more mature), when Helm or an operator wins instead, and the alpha-stage sharp edges, including a recent CVE that reduces to one fact: handing someone a CRD is a cluster-admin-level trust decision. You'll leave able to build your first KRO API , and clear about when not to.

Key Takeaways
  1. A working mental model of KRO: a ResourceGraphDefinition becomes a real CRD plus a controller registered at runtime, so you expose a bundle of resources as one typed API without writing a line of Go.

  2. Why KRO needs no explicit ordering: the CEL references between resources are the dependency graph, which removes a whole class of broken-selector bugs.

  3. Build one from scratch. You will see a complete WebApp RGD (schema, resources, CEL wiring, conditional resources) and leave with a copy-paste starter gist you can run on kind or minikube the same evening.

  4. A decision rule for your stack: when KRO fits versus when Helm, an operator, or Crossplane is the better call, including that KRO composes in-cluster resources and does not provision cloud infrastructure.

References

Session Categories

Tutorial about using a FOSS project

Which track are you applying for?

Cloud & DevOps

Speakers

Govind Pandey
Govind Pandey Devops Engineer | Remotestar

I'm Govind Pandey, a DevOps engineer at Remotestar. My work revolves around running infrastructure and the tooling that keeps it sane, the unglamorous plumbing between writing code and actually shipping it.