chore(kaap): upgrade operator + CRDs to 0.4.4 for modern k8s (1.33+) - #7
chore(kaap): upgrade operator + CRDs to 0.4.4 for modern k8s (1.33+)#7dcbouius wants to merge 1 commit into
Conversation
KAAP 0.3.0 cannot reconcile on Kubernetes 1.33+ (incl. GKE 1.35): its bundled fabric8 client fails to parse the API server /version response (Unrecognized field "emulationMajor"), so the operator throws before creating any Pulsar resources — silently inert on upgraded clusters. Brings helm/kaap to upstream 0.4.4 (fork carried no local deltas): - operator image datastax/kaap:0.3.0 -> 0.4.4 (newer fabric8 client) - refreshed all 8 CRDs to 0.4.4 (declare securityContext etc. that the 0.4.4 operator emits; stale CRDs stall reconcile on typed-patch errors) - split RBAC into cluster-scoped/namespace-scoped, gated on new operator.watchAllNamespaces flag (default false = namespaced watch, same scope as before). configmap sets JOSDK_WATCH_CURRENT accordingly - operator template gains nodeSelector/tolerations passthrough - bump kaap-stack dependency to 0.4.x + regenerate Chart.lock NOTE: helm does not upgrade CRDs on `helm upgrade` (crds/ only installs on first install). Existing clusters must `kubectl apply --server-side` the 0.4.4 CRDs before/with the operator bump.
Review: LGTM — prod-ready with a 3-step pre-flightThe operator/CRD/RBAC changes are sound, and the namespaced-watch scope is preserved correctly ( Prod deploy checklist (existing cluster)
securityContext roll risk — checked, non-issueThe "in-place upgrade may roll the STS on a securityContext diff" caveat was verified empirically against the GKE dev cluster running this 0.4.4 build: the operator generated the ZK and bookkeeper StatefulSets with Consequence: no ownership change, no recursive chown on the large bookie volume, no UID switch, no data-permission risk, and no securityContext-driven roll. Any restart during adoption would be benign template normalization. This downgrades the prod apply from a careful maintenance window to a routine operator upgrade. Minor (non-blocking)
|
Why
KAAP 0.3.0 cannot reconcile against a Kubernetes 1.33+ API server (incl. GKE 1.35). Its bundled fabric8 kubernetes-client parses the
/versionresponse strictly and throwsUnrecognizedPropertyException: Unrecognized field "emulationMajor"before creating/reconciling any Pulsar resource. The operator pod stays Ready with 0 restarts but is silently inert — this is why KAAP went dead on upgraded prod EKS, and it blocks the GKE migration.What
Brings
helm/kaapto upstream 0.4.4 (the fork carried no local deltas from 0.3.0):datastax/kaap:0.3.0→ 0.4.4 (newer fabric8 client toleratesemulationMajor)securityContextetc. that the 0.4.4 operator emits; stale CRDs stall reconcile withfield not declared in schematemplates/rbac/{cluster-scoped,namespace-scoped}.yaml, gated on a newoperator.watchAllNamespacesflag (defaultfalse= namespaced watch, same scope as before).configmap.yamlsetsJOSDK_WATCH_CURRENTwhen namespacednodeSelector/tolerationspassthroughkaap-stackdependency to0.4.x; regenerate Chart.lockhelm lintclean; umbrella renders operator 0.4.4 + namespaced Role carrying thekaap.oss.datastax.comCR grants.Validated
GKE 1.35 dev: 0.4.4 operator + 0.4.4 CRDs stood up a healthy Pulsar (zk+bookie+broker+bastion,
pulsar-admin brokers healthcheck= ok), then LangStream + a sample app passed an end-to-end produce→agent→consume test.crds/installs only on first install). Apply the 0.4.4 CRDs manually first — server-side is required (they exceed the client-side annotation limit):securityContextdiff and trigger a rolling restart. Treat as a maintenance window and let each tier recover before the next. (Not exercised in the demo — fresh cluster.)operator.watchAllNamespaces: falsefor prod to preserve the current namespaced watch scope.