fleetcommand-agent image that runs operator jobs creates definitions for an additional custom resource definition managed by the platform operator called HelmRelease. These resources map one-to-one to the Helm releases that are deployed to the cluster and are managed by Domino. They abide by a separate reconciliation loop than the Domino resource and are continuously evaluated for drift between the deployed manifest of the Helm release and the live state of the cluster.
While the operator is capable of correcting drift, this behavior is not yet enabled globally or configurable by service through the Domino resource. By default, it will warn of drift on the HelmRelease resource conditions directly. In a future release, this will be surfaced as a configurable option.
Using ddlctl is the best way to inspect the state of HelmRelease resources in your cluster:
HelmRelease is marked as Stalled when the operator detects that:
- the Helm release has drifted from the desired state,
-
the Helm release is in a
Failedstate, - the Helm release is locked in a pending state,
- the Helm release was deleted, or
-
the latest Helm revision does not match the desired revision of the current
Dominogeneration.
Ready, run the following:
HelmRelease resources are deployed with a default 5 minute interval, meaning if a release were to get out of sync in the cluster it will not necessarily register as drift immediately, but get picked up on the next reconciliation.
If you want to force a reconciliation, you can do this through the ddlctl command line:
Investigating drift
Discovering what has drifted on aHelmRelease resource can be done in a few ways.
ddlctl offers a subcommand for inspecting the diff of a Helm release against the live state of the cluster:
kubectl describe, i.e.:
Warning event will report on the resource where drift was detected, the type of drift, and include the JSON patch (either in full or in part) that would be applied if correct mode were enabled on the HelmRelease resource rather than warn.
As there is a character limit on Kubernetes events, the JSON patch will be truncated to 500 characters max, but the full patch can be found in the operator logs, which can also be accessed with
ddlctl by running ddlctl logs operator.