celld-operator

Operator configuration

Every operator flag, its Helm value, and what happens when an optional integration is absent. Flags configure the operator once; per-app behavior lives in the WorkerApp resource.

Flags and Helm values

Each flag maps to a value under operator.* in the chart's values.yaml:

FlagHelm valueDefaultPurpose
--ingress-modeoperator.ingressModehttprouteHow hostnames are routed: httproute (Gateway API), virtualservice (classic Istio), ingress (networking.k8s.io/v1), or none. See ingress modes.
--gateway-nameoperator.gatewayNameedgeShared Gateway that HTTPRoutes attach to (httproute mode).
--gateway-namespaceoperator.gatewayNamespaceinfraNamespace of that Gateway.
--istio-gatewaysoperator.istioGatewaysunsetPre-existing networking.istio.io Gateways (namespace/name, comma-separated) that VirtualServices bind to in virtualservice mode.
--ingress-classoperator.ingressClasscluster defaultIngressClass for ingress mode.
--cluster-issueroperator.clusterIssuerunsetcert-manager ClusterIssuer for ingress mode; when set, each app's Ingress requests its own TLS certificate. Drain-retry and WebSocket policies become ingress-nginx annotations in this mode (ignored by other controllers).
--prometheus-urloperator.prometheusURLhttp://prometheus-operated.monitoring.svc:9090Where KEDA queries the operator's celld_* metrics.
--operator-namespacerelease namespacecelld-operator-systemAllowed by fleet NetworkPolicies to reach :8081.
--operator-principaloperator.operatorPrincipalderivedOperator identity in Istio AuthorizationPolicies; empty derives cluster.local/ns/<release ns>/sa/<service account>.
--state-poll-intervaloperator.statePollInterval15s/state polling cadence for metrics export and rollout gating.
--deploy-poll-intervaloperator.deployPollInterval60sBucket deploy/current.json polling cadence for appVersion: auto and version-mismatch detection.

Other chart values

ValueDefaultPurpose
controllerManager.replicas1Manager replicas; leader election is on (--leader-elect).
controllerManager.container.image.repositoryghcr.io/ezgamehost/celld-operatorOperator image.
controllerManager.container.image.tag""Empty uses the chart's appVersion, the operator build the chart was released with.
crd.enabletrueInclude the CRDs in the release.
rbac.enabletrueInclude RBAC objects.

The manager runs non-root with a restricted security context, exposes health probes on :8081 (its own, not celld's) and metrics on :8443.

Graceful degradation

The operator requires none of its optional integrations to start reconciling. Absence is reported per-WorkerApp, not failed on:

MissingEffectCondition
Gateway API CRDs / implementationHostnames are not routed; fleet still serves in-clusterIngressReady: False
IstioNetworkPolicy alone guards :8081; no ambient mTLSMeshPolicyReady: False
KEDA / Prometheusspec.autoscaling has no effect; fleet runs at spec.replicasAutoscalingReady: False

Store qualification tooling

The repository ships hack/cas-hammer, the concurrency probe for qualifying object stores:

$ go run ./hack/cas-hammer --bucket <bucket> --endpoint <url> --writers 8 --rounds 32

Development

$ make test     # envtest suite + unit tests
$ make lint     # golangci-lint
$ make run      # run against the current kubeconfig

Contributions are welcome; see CONTRIBUTING.md.