Using ArgoCD to deploy Thoras
The Thoras Helm chart is designed to render deterministically for GitOps tools. Credentials are never generated at template time: anything you don’t supply is seeded in-cluster by the Thoras config-controller, and anything you pin invalues.yaml is rendered verbatim. Two things still need attention:
- Disable legacy secret seeding. Set
featureFlags.enableLegacySecretSeeding: false. The flag defaults totrueonly so clusters upgrading from chart 4.x can migrate their pre-existing credentials. The legacy Secrets it renders use Helmlookup, which Argo CD cannot evaluate. If you are upgrading from 4.x, complete the upgrade with the flag on, then set it tofalseonce the pods are healthy. During that upgrade window, keepjsonPointers: [/data]ignoreDifferencesentries for theapi-client-secretandthoras-timescale-passwordSecrets so Argo CD does not overwrite them with freshly-rendered random values before the config-controller has migrated them. Remove those entries once the flag isfalse. See Upgrading. - Ignore fields that are managed in-cluster. The webhook
caBundleis injected after apply (by the chart’s cert-generator or by cert-manager), and thethoras-forecast-workerreplica count is managed by Thoras’s built-in scaler. Add both tospec.ignoreDifferences.
Example Application config
Credential rotation under GitOps
When a credential changes (you rotate a pinned value invalues.yaml, update a
Secret you manage, or delete a generated key so it is re-seeded), the
config-controller restarts the affected Thoras workloads for you. It does this
by evicting pods rather than patching the Deployment’s pod template, so the
restart never shows up as drift in Argo CD. No kubectl rollout restart is
needed. See Credentials.
Flux
The same guidance applies to Flux: setfeatureFlags.enableLegacySecretSeeding: false and prefer cert-manager for
webhook TLS. Additionally set flux.enabled: true so Flux’s drift detection
does not revert the operator’s own rollout restarts:
Using ArgoCD to manage a Thoras horizontally controlled workload
When Thoras manages horizontal scaling for a workload, it uses a validation webhook to prevent the default Kubernetes Horizontal Pod Autoscaler (HPA) from reducing replicas during anticipated usage spikes. By design, this ensures workloads remain scaled up until Thoras determines it’s safe to scale down. However, ArgoCD interprets these blocked scale-down attempts as HPA errors. This can cause the Application to appear in a degraded state even though the workload is healthy. To prevent this, you can customize ArgoCD’s health assessment logic for HPAs so that these Thoras-specific conditions are handled correctly.When Do I Need This?
You only need this customization if all of the following are true:- The workload is horizontally controlled by Thoras.
- You are using ArgoCD to monitor the workload state.
- You notice ArgoCD incorrectly marking the HPA as Degraded when Thoras blocks a scale-down.
argocd-cm ConfigMap in the argocd namespace:
data:

