Skip to content

Tenant csi HelmRelease remediates by uninstall, and its 10m install budget is spent pulling latest-tagged images #3576

Description

packages/apps/kubernetes/templates/helmreleases/csi.yaml carries remediation.retries: -1 on install and upgrade (:24-30) with no install.strategy, so a failed install is remediated by uninstalling the release. That is the same configuration #3552 changes for cilium. The general form is known and covers every tenant addon HelmRelease the chart renders; this issue is about the one chain that has now been seen ending a suite on its own.

What was observed

Run 31025557528 on 4d16f4fdb, job E2E Tests, suite kubernetes-previous, failing at hack/e2e-chainsaw/_lib/run-kubernetes.sh:677:

error: timed out waiting for the condition on helmreleases/kubernetes-test-previous-version-csi

That run carries #3552, so the tenant cilium release no longer remediates by uninstall. Its events are InstallFailed and then UpgradeSucceeded with nothing torn down between them, both tenant workers reach Ready, and node join passes for the first time on that branch. With cilium no longer ending the suite earlier, csi is what ends it.

The csi events from the same run, ages as printed in a dump taken at 18:52:36:

6m20s  Warning  InstallFailed       helmrelease/kubernetes-test-previous-version-csi  Helm install failed ... timeout waiting for: [DaemonSet/cozy-csi/kubevirt-csi-node status: 'InProgress']
6m20s  Normal   UninstallSucceeded  helmrelease/kubernetes-test-previous-version-csi  Helm uninstall remediation for release ...

Three things compound

Times below are the dump timestamp minus the printed event age, and carry that granularity.

dependsOn starts the clock too early. csi.yaml:60 depends on <release>-cilium, so the install begins when cilium reports Ready, at roughly 18:36:36. The tenant workers reached Ready at roughly 18:44, from node ages of 4m41s and 5m30s read at 18:49. kubevirt-csi-node is a DaemonSet, so for about eight of its ten minutes there were no nodes to schedule on and no way for the rollout to progress.

The strategy turns a slow install into a restart. With no install.strategy.name: RetryOnFailure next to the retries: -1 that never exhausts (csi.yaml:24-27), the install that failed at 18:46:16 is remediated by an uninstall, and the next attempt starts from a torn-down release instead of resuming a rollout that had finally acquired nodes.

The suite budget cannot absorb one retry. csi.yaml:12 sets timeout: 10m, and run-kubernetes.sh:677 waits --timeout=10m on the same release. The two are equal, so the first attempt to exhaust its own timeout is terminal for the suite whatever the retry does next. The uninstall at 18:46:16 falls inside the suite window, which ran from 18:39:29 to 18:49:29.

Relation to #3555

#3555 records that the dependency gate protects the tenant addons declaring dependsOn, since a release waiting on a dependency returns before the release reconciler runs and never increments a failure count. That holds, and this narrows it: the gate protects only while the dependency is not ready. csi fails right after the gate opens, and it fails partly because the gate opened, since that is the moment its own timeout starts counting while the workers still do not exist. A release whose readiness depends on nodes needs a budget that starts from something later than the CNI.

Shape of a fix

#3552 is the precedent for the strategy part, on both actions for the reason given there. The other two are independent of it. The budget equality is a test-side choice, and the early clock is a property of what csi waits for rather than of the remediation strategy. Fixing only the strategy leaves a csi install that still spends most of its timeout before a node exists.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/kubernetesIssues or PRs related to the tenant Kubernetes appkind/bugCategorizes issue or PR as related to a bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions