Prerequisites
- Kubernetes cluster 1.24+
kubectlconfigured for your cluster- Helm 3.x (for Helm installation)
- Chart
0.11.1or newer onarm64nodes, including AWS Graviton and Apple Silicon kind or k3d clusters. Every image up to and including0.11.0wasamd64-only. See Versions.
Helm (recommended)
Install the operator from the OCI registry:Failure detection is on out of the box as of chart 0.8.0. The health-check reconciler runs every 60 seconds, opens
IncidentMemory records, and proposes RemediationAction fixes for what it finds. Nothing is ever applied without your approval.Earlier charts defaulted healthCheck.enabled to false, which meant following this page produced an operator that detected nothing. If you are reading an older copy of these instructions, that is the difference.AI
Versions
Current versions: CLI
v0.14.1 with operator v0.13.1 (Helm chart 0.13.1; the chart version, the chart appVersion, and the operator version are always the same number). Newest of each is always the right answer, and this note is the only place in these docs that states which that is.CLI v0.13.0 removed the manifest generation and cluster setup commands (generate, init, config, persona generate|apply, cluster setup|info|init, platform serve, watch, sync), so if you relied on one, read the CLI migration guide before upgrading.On arm64 nodes, 0.11.1 is a floor and not a preference. Every operator image published before it, up to and including 0.11.0, was pushed as a single-platform amd64 manifest rather than a manifest list. That covers AWS Graviton nodegroups and any kind or k3d cluster on an Apple Silicon Mac. On containerd there is no manifest list to select from, so the pull succeeds and the container dies immediately with exec /manager: exec format error and exit code 255. The pod reads CrashLoopBackOff, not ImagePullBackOff. 0.11.1 is that image and nothing else: no API, CRD, controller, or chart-template change, which is why everything below still names v0.11.0 as the release each behaviour landed in.CLI v0.14.0 and operator v0.13.0 are a pair, and the order you upgrade them in matters. v0.13.0 adds the approval-time re-check and the apply ticket. A CLI older than v0.14.0 does not read tickets, so it patches the Deployment from the plan with none of those checks, and the operator cannot stop it. Upgrade the CLI first, then the operator. Steps, breaking changes and new settings are in the upgrade guide.CLI v0.14.1 and operator v0.13.1 are the patch release of that pair. They change no CRD, no RBAC and no flag or Helm value, and they are meant to move together: upgrade the CLI first, as before. dorgu report counts a refusal that has since cleared only with CLI v0.14.1 against operator v0.13.1. With an older half it reads the live ProposalRefused condition as it always did, and a refusal that cleared before the report ran is not counted. See the changelog.Before that pair, every field either side had added was optional and additive, so a half that did not know about a field simply saw it absent and nothing had to move in lockstep. The ticket is the exception.These mismatches change behaviour. Two are unsafe, the first and the last, and in both it is the old CLI that is the risk, not the old operator:One operator upgrade is worth doing on its own merits, with no CLI implication at all: with
aiRemediation.enabled=true, operator v0.11.0 is the release that made AI-planned remediations appliable. On v0.10.0 and older, a plan that diagnosed a resource change could be persisted with nothing to apply. See AI setup.Operator v0.12.0 is worth upgrading to on its own as well: it protects the namespace Dorgu is installed in from remediation, and it makes healthCheck.enabled=false mean no incidents and no proposals. It also removed the validating webhook, so an upgrade that still sets webhook.enabled=true fails until you drop the value. See Helm values.Operator v0.13.0 is the release that makes an approval safe to give on a cluster you care about: the gate runs again at approval on the live cluster, and what is applied is a short-lived ticket. It also adds probe and restart detection and a complete set of metrics. It needs the CRDs applied and a v0.14.0 CLI. See How Dorgu decides.Operator v0.12.1 is the one to install if you turn on AI: it keeps incidents in protected namespaces, including the namespace Dorgu runs in, out of every model call. On v0.12.0 the diagnosis call still sent them. No values, flags or RBAC change.Both mismatch directions in full, with the ownership reasoning behind them: version coupling. Newest published releases: CLI and operator.Turn detection off
To run the operator for validation and cluster discovery only:OOMKilled incidents and wrote RemediationAction proposals with detection off, so upgrade if you depend on this.
Pin a chart version
The command above resolves the newest published chart. To pin an exact version for reproducibility, add--version:
The chart version and the operator version are the same number, so
--version 0.13.1 installs operator v0.13.1. If the literal above has fallen behind, Versions is the statement to trust on this page, and operator releases is the statement to trust over both.Verify what you install (build provenance)
Releases from v0.13.1 carry a build provenance attestation for the operator image, the chart archive and the chart as it sits in the registry, signed by the release workflow ofdorgu-ai/dorgu-operator. Check them with the GitHub CLI before you install. A passing check says the artifact was built by that workflow from a tagged commit, and the output names the commit.
helm install oci://... pulls:
Releases before v0.13.1 have no attestation:
gh attestation verify answers 404 for them.Install with a values file
To customize the installation, create avalues.yaml file:
Kustomize
Install CRDs and deploy the operator using kustomize:make uninstall deletes the CRDs, so it deletes every ApplicationPersona, IncidentMemory, RemediationAction and DorguEvent in the cluster along with them. Read Uninstall before you run it, particularly the part about your API key, which neither command touches.
Build from source
v0.12.0 its own defaults match the chart’s: --enable-health-check defaults to true in the binary as well. On older binaries it defaulted to false, so pass --enable-health-check there to get the detection loop a Helm install gives you. The binary reads its own namespace from POD_NAMESPACE, then from the mounted service account. Outside a pod neither exists, so set POD_NAMESPACE yourself if you want the deny-list to protect the namespace you installed into.
Build and push Docker image
Verify installation
The chart prints a post-install summary that reports whether detection is on, whether AI is on, and what to run next. Re-read it at any time withhelm get notes dorgu-operator -n dorgu-system.
Check that the operator is running:
Confirm detection actually started:
Phase 2a/2b health check and remediation enabled with the interval. If it is absent, detection is off.
Uninstall
1. Remove the release
dorgu-operator-manager ClusterRole and ClusterRoleBinding, and the metrics Service. The operator stops within seconds and nothing further is detected, diagnosed, or proposed.
2. Know what is still there
Quite a lot, and none of it announces itself:
The volume is larger than it sounds. A clean-room evaluation, meaning a stranger installing from these published docs and nothing else, measured 176 custom resources across 12 namespaces,
kube-system included, on a five-application test cluster after a single hour:
DorguEvent records reach kube-system because they are written into the namespace of the object they describe, and Dorgu watches the whole cluster. That is worth knowing before you install, not after.
That run was on operator v0.12.x. From v0.13.0 the event pipeline is off by default, so no DorguEvent records are written unless you turn it on with eventPipeline.enabled=true, and the dorguevent count above is zero on a fresh install. The incidentmemory and remediationaction records remain.
3. Keep the history, if you want it
The incident and remediation records are the only account of what Dorgu saw. Step 4 destroys them, so export first if that matters:4. Delete the CRDs
This is the step that completes the teardown. Deleting a CRD garbage-collects every custom resource of that kind, in every namespace, so five commands’ worth of cleanup is one command and no label selector is needed:5. Delete the namespace
Only if Dorgu was the only thing in it:helm uninstall and stops there keeps the key, which is why it leads this section.
6. Verify
Removing the operator but keeping the record
A common middle case: you are done evaluating, but the incident history is worth keeping, or the personas are under GitOps and you intend to reinstall. Run step 1 only, and stop:helm install picks the same objects straight back up. The two things to be deliberate about are that DorguEvent records will not be pruned while no operator is running, and that the API key Secret is still there. If you only want the records gone and the CRDs kept, delete the records directly instead of the CRDs:
ClusterPersona is cluster-scoped, which is why it is a separate command.
Next steps
Quickstart
Apply your first persona and see the operator in action
Already have apps running?
Import personas from your live Deployments
Turn on AI
BYO Anthropic key for AI diagnosis and ordered plans
Security and permissions
The operator’s full ClusterRole and the verbs it does not have
Configuration
Customize flags and Helm values
Uninstall
Complete teardown, starting with your API key