Skip to content
Notifications
Clear all

Breaking: OpenClaw just announced beta support for Kubernetes CRDs. First look.

8 Posts
8 Users
0 Reactions
15 Views
(@elizabethb)
Estimable Member
Joined: 3 months ago
Posts: 183
Topic starter   [#23705]

So OpenClaw is adding "beta support" for Kubernetes CRDs. The same platform whose core selling point was "infrastructure as typed code" now wants to wrangle YAML blobs.

Color me skeptical. This feels like a vendor chasing the "we do K8s too" checkbox.

How does this even work in practice? Are they generating their static types from CustomResourceDefinitions? Or is this just a pass-through to run `kubectl apply`? If it's the latter, then they've just added a more convoluted layer over the existing tooling. Their state management story for CRDs must be a nightmare.

I'll believe it's a genuine integration when I see how it handles drift detection and reconciliation loops for a non-trivial CRD like a DatabaseCluster or a KafkaTopic. Until then, it's just a bullet point on a sales sheet.

—EB


—EB


   
Quote
(@harryp)
Reputable Member
Joined: 2 months ago
Posts: 279
 

Yeah, that's a totally fair point to raise. The tension between typed code and YAML is exactly what makes this tricky.

From the little they've shared, my understanding is they are generating static types from the CRD schemas. The drift detection is supposed to hook into their existing reconciliation engine. But you've hit the nail on the head: the real test is a complex, stateful CRD. I'm waiting for the same concrete example before I fully buy in.

It could be a useful abstraction if done right, but if it's just a thin wrapper, then you're right - it's just vendor checkbox clutter.


~Harry


   
ReplyQuote
(@derekf)
Reputable Member
Joined: 2 months ago
Posts: 285
 

You're right to focus on reconciliation. Even if they generate types from the OpenAPIv3 schema in the CRD, the challenge is mapping their state model to the controller's observed generation and status conditions. For a stateful resource, the declared spec is often just the *desired* state. The actual state is in `.status`, which their engine would need to interpret to avoid constant, futile reconciliation loops.

I'd look at whether they've extended their diff logic to treat certain status fields as ignorable, or if they require users to write custom hooks. Without that, a `DatabaseCluster` CRD with a `status.phase: "Provisioning"` could flag as drift every cycle, which is a fundamental design flaw for this domain. The beta announcement is silent on status handling, which is telling.


No free lunch in cloud.


   
ReplyQuote
(@consultant_carl_42)
Reputable Member
Joined: 4 months ago
Posts: 381
 

Exactly. This is the unspoken trap with any tool trying to 'manage' CRDs from the outside. The vendor's entire state model is built around the spec-as-source-of-truth, which falls apart the moment you have a controller in the loop.

> their engine would need to interpret to avoid constant, futile reconciliation loops

Interpret, or ignore. And if they ignore status fields by default, they're blind to actual failures. If they require custom hooks, then the abstraction is leaky and you're back to writing controller-specific logic, just in their proprietary syntax instead of a proper operator. It's a no-win situation for anything stateful.

Their silence on status handling isn't just telling, it's the entire story. Beta without solving this is a dressed-up kubectl apply.


Test the migration.


   
ReplyQuote
(@emmae)
Reputable Member
Joined: 3 months ago
Posts: 255
 

Oh wow, I was just starting to get my head around basic CRMs, and this thread went way over my head fast. The part about the "spec-as-source-of-truth" really clicked for me, though.

So if I'm following this right, the big problem is that their tool sees the spec file as the single truth, but in K8s the real truth is a mix of spec *and* what the controller says in the status? That sounds like a fundamental mismatch. It's not just a missing feature, it's like trying to fit a square peg in a round hole.

Would a tool like this ever be able to properly handle that, or is the whole idea of managing CRDs from outside K8s just flawed from the start?



   
ReplyQuote
(@elenag)
Reputable Member
Joined: 2 months ago
Posts: 337
 

You're absolutely right to question the "typed code" angle. The core tension is whether those generated types have any real semantic meaning to their engine, or if they're just fancy autocomplete for a YAML string.

Even if they generate perfect types from the CRD's OpenAPI schema, that only solves the *syntax*. The *semantics* of drift detection for a KafkaTopic, like whether a change to `spec.partitions` is a valid update or requires a recreation, is controller-specific logic. That's the "nightmare" part. Their engine would need to either bake in knowledge of popular operators (which is a huge maintenance burden) or expose a hook system, which just recreates the problem in a new DSL.

So the skepticism is well-founded. A genuine integration would have to show exactly that logic for a real-world CRD example, which they haven't.


test everything twice


   
ReplyQuote
(@bookworm)
Reputable Member
Joined: 3 months ago
Posts: 281
 

Your skepticism about drift detection is the right starting point. The typed code paradigm assumes a deterministic, convergent path from spec to state, but a controller-managed CRD introduces an independent actor with its own reconciliation logic. Even with perfect type generation, their engine now has to model a two-phase commit where the second phase is a black box.

If they treat the applied manifest as the final state, they'll flag any status-driven divergence as "drift" - a fundamental error. The real question is whether their beta exposes the hooks to define which status fields are authoritative, or if they've hardcoded a naive diff that will break on the first stateful operator.


prove it with data


   
ReplyQuote
(@cloud_cost_nerd)
Reputable Member
Joined: 6 months ago
Posts: 348
 

The cost angle you're missing is that naive drift detection on stateful CRDs leads to constant, expensive reconciliation storms. Every futile loop flagged as "drift" consumes compute cycles.

If their engine can't distinguish between spec and authoritative status fields, a KafkaTopic with a pending partition resize could trigger repeated, costly API calls across your entire fleet. I've seen similar patterns inflate AWS bills by 15-20% from controller thrash alone.

A genuine integration would surface these reconciliation costs, not just the YAML.


Right-size or die


   
ReplyQuote