Support zero-downtime main InstallerSet upgrades
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Quiet
- Tech stack
- go, kubernetes
- Domain
- infrastructure
Research direction
Start with MainSet and CleanupMainSet in pkg/reconciler/kubernetes/tektoninstallerset/client/main_set.go, then read TektonInstallerSet finalization in pkg/reconciler/kubernetes/tektoninstallerset/tektoninstallerset.go. Trace ErrVersionDifferent and the existing InstallerSet lifecycle before designing coexistence and readiness-gated retirement. Done means the listed coexistence, handoff, cleanup, idempotency, and resource-preservation cases are covered by tests.
Written by the indexing model from the issue text.
Description
Feature request
Main InstallerSet upgrades should use a readiness-gated handoff instead of deleting the current InstallerSets before creating their replacements.
Today, a release-version mismatch calls CleanupMainSet, and the old InstallerSet finalizers delete resources from the previous manifests before replacement sets are created:
MainSetcleans up onErrVersionDifferentTektonInstallerSetfinalization deletes its manifest resources
This can temporarily remove shared ConfigMaps, RBAC, Services, APIService objects, and admission webhook configurations during an operator upgrade.
Implement a blue/green-style handoff for main InstallerSets:
- Keep the current generation while creating the desired-generation static and workload InstallerSets.
- Make replacement creation idempotent so reconciliation can resume after a partial failure.
- Wait for all desired-generation InstallerSets to report Ready.
- Retire only the explicitly identified old-generation InstallerSets.
- During old-generation finalization, preserve resources also represented by a non-deleting successor InstallerSet and delete only resources absent from every successor.
- Keep full cleanup when a component is removed and no successor exists.
The design should support the static/deployment split and the optional StatefulSet path without using broad CleanupMainSet selection during retirement.
Acceptance criteria:
- Shared resources remain available until the desired generation is Ready.
- Resources removed from the desired manifests are still pruned after a successful handoff.
- Interrupted replacement creation resumes without producing duplicate sets.
- Component deletion retains the existing cleanup behavior.
- Tests cover generation coexistence, readiness-gated retirement, partial creation, shared-resource preservation, and obsolete-resource deletion.
Related work: #374 introduced InstallerSets for pruning resources removed by new releases, and #2121 guards reconciliation when a resource is already being deleted.
Use case
An operator upgrade changes the main InstallerSet release version while Tekton components continue serving requests. The old and desired generations share resources such as configuration, admission registration, RBAC, and Services. Those resources must remain present until the desired generation is healthy; otherwise the upgrade can create an admission or service-availability gap even though the resources will be recreated later.
- Dominant language
- Go
- Stars
- 606
- Forks
- 270
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 159
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from tektoncd/operator
-
Difficulty 1/5 Under an hour Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
kind/feature
Difficulty 4/5 Over a week Newbie friendliness 30/100
tektoncd/operator#4275 · 3 comments ·
Maintainers usually reply within 1 day
-
kind/feature
Difficulty 5/5 Over a week Newbie friendliness 30/100
tektoncd/operator#3977 · 2 comments · 3 reactions ·
Maintainers usually reply within 1 day
-
Support trusted provider hostnames for Pipelines as CodePossibly taken @jkhelil claimed this 34 days ago. Openarea/dependency kind/feature
Difficulty 4/5 3-5 days Newbie friendliness 50/100
tektoncd/operator#3946 · 1 comment · 1 reaction · 2 assignees ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 42/100
tektoncd/operator#3845 · 2 reactions ·
Maintainers usually reply within 1 day
All issues in tektoncd/operator
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
CycloneDX/cyclonedx-go#304 ·
-
[Bug]: snowflake_share fails to read a share attached to a listing with target accounts ('TARGETED ACCOUNTS' in the "to" column)Possibly taken @akhil9tiet claimed this today. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
snowflakedb/terraform-provider-snowflake#5366 · 2 comments ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
txn2/mcp-data-platform#2493 ·
Maintainers usually reply within 1 day
-
fix(doctor): format MongoDB URI and UNIX socket addresses correctly in doctor diagnostic outputOpenbug good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
oscarbol09/branchbase#178 ·
Maintainers usually reply within 4 days