Mirror the images deployed by feature charts - #1319
Merged
Merged
Conversation
catalog/ listed the feature charts themselves but never the container images they deploy, so no third-party feature-chart image was ever mirrored: opencost, kyverno, longhorn, topolvm, external-secrets, gatekeeper, sealed-secrets, crossplane, nfsplugin, metrics-server, reloader and prometheus-adapter were all absent. Those images cannot be recovered from this tree. They appear only inside a Feature's spec.values, as maps rather than the plain image strings image-packer collects, and without a tag -- the tag comes from the feature chart's own appVersion. kmodules/image-packer#60 renders each feature chart at its pinned version to resolve them, and writes catalog/feature-chart-images.yaml. Feed that file to generate-scripts, adding 545 images to the mirror scripts. The generated scripts change by addition only; no existing mirror line is touched. Signed-off-by: Arnob Kumar Saha <arnob@appscode.com>
The previous commit rendered all 114 feature charts, but 59 of them belong to a catalog that already publishes their images: 12 to this repo's own catalog/imagelist.yaml, 41 to one of the component installers collected per org by appscode-cloud/artifacts (pkg/collect/orgs.go), and 6 to the externally maintained charts artifacts renders itself from curated CI values (pkg/collect/externals.go). Rendering them here restated 398 of 545 entries and made this repo's mirror scripts carry a second copy of every database image, work the component installers already do. Exclude those 59 by name. The list is grouped by owning catalog, and image-packer reports any entry that matches no chart, so it cannot rot silently. 117 images remain -- reloader, prometheus-adapter, kyverno, longhorn, opencost, gatekeeper, topolvm, stash, voyager and the rest that no other catalog publishes. Signed-off-by: Arnob Kumar Saha <arnob@appscode.com>
appscode-cloud/artifacts now collects stashed, voyagermesh and virtual-secrets as component installers, so their charts join the exclusion list -- stash alone was 53 of the entries here. The six charts artifacts used to render from hand-curated hack/ci values move the other way, out of the exclusion list and into this file. They are feature charts like any other, and the values their Feature carries are what ACE actually deploys: the curated values had drifted, building the flux2 kustomize and notification controllers that the Feature disables. 79 images, all of them belonging to no installer repo. Signed-off-by: Arnob Kumar Saha <arnob@appscode.com>
Signed-off-by: Arnob Kumar Saha <arnob@appscode.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
catalog/listed the feature charts but never the container images those charts deploy. Every feature-chart image that no other catalog publishes was missing from the mirror scripts:reloader,prometheus-adapter,kyverno,longhorn,opencost,gatekeeper,sealed-secrets,external-secrets,topolvm,crossplane, the CSI drivers, the credential managers.This surfaced from an air-gapped install: a live ACE cluster was running
ghcr.io/stakater/reloader:v1.4.14andregistry.k8s.io/prometheus-adapter/prometheus-adapter:v0.11.2, neither of which appears in any catalog.These images can't be recovered from this repo. They exist only inside a
Feature'sspec.values, as maps rather than the plain image strings image-packer collects:and the tag isn't in this tree at all — it comes from the feature chart's own appVersion. So no sample-values change here could fix it (unlike #1318, which fixed a genuinely different problem: subcharts that never rendered).
Fix
kmodules/image-packer#60 renders each feature chart at its pinned version, using the values its
Featurecarries, and writescatalog/feature-chart-images.yaml. This PR feeds that file togenerate-scripts.catalog/feature-chart-images.yaml— 79 images from 49 feature charts (new, generated)hack/scripts/update-catalog.sh— the exclusion list below, plus one added--srccatalog/{copy,export,import}-images.sh,catalog/import-into-k3s.sh— regeneratedWhich charts are excluded, and why
65 of the 114 feature charts belong to a catalog that already publishes their images. Rendering them here restated 398 of 545 entries and made this repo's mirror scripts carry a second copy of every database image — work the component installers already do.
catalog/imagelist.yamlcatalog/imagelist.yaml, collected per org byappscode-cloud/artifactspkg/collect/orgs.goThe list was derived, not guessed: each component installer's
charts/directory intersected againstcatalog/feature-charts.yaml. image-packer reports any exclusion matching no chart, so it can't rot silently — the run reports 65 excluded, 0 unmatched.stash,voyagerandvirtual-secretscharts are excluded because appscode-cloud/artifacts#4 adds those three as component installers.stashalone accounted for 53 image entries here.Externally maintained charts are deliberately NOT excluded.
cert-manager,flux2,keda,keda-add-ons-http,kube-prometheus-stackandsnapshot-controllerwere rendered by artifacts from hand-curatedhack/ci/*-ci-values.yaml. Those values had drifted from what ACE deploys — they built the flux2 kustomize and notification controllers that the ACEFeaturedisables — so rendering from theFeaturehere is the more accurate source, and artifacts retires its step.Verification
+79 / -0in each of the four, zero removed lines, no duplicate$CMD cp(364 total = 285 existing + 79 new).catalog/feature-charts.yamlis byte-identical to master — the existing consumer is unaffected.images/<chart>.yamlfiles, minus only the two flux2 controllers ACE disables.generate-scriptsfollowed bymake add-license fmt.Notes for reviewers
us-docker.pkg.dev/secretmanager-csi/secrets-store-csi-driver-provider-gcp/plugin@sha256:a493a78…is pinned by digest with no tag, andgenerate-scriptsderives both the tarball name and the destination reference from the tag. Dropped with a warning naming it rather than failing the run. It is the only digest-only reference in the entire catalog corpus.gateway-api(v2025.3.14) andvoyager-gateway(v2026.1.15) are excluded as voyagermesh-owned, but that repo is collected at thevoyageranchor v2026.3.23. Same latent version skew the other components already have.image-packerrelease carrying Collect images referenced by feature charts and container flags kmodules/image-packer#60 —--exclude-chartdoes not exist in the current binary. Then Collect stash, voyager and virtual-secrets; retire the externals step artifacts#4.Unrelated bug this surfaced
charts/opscenter-features/templates/featuresets/opscenter-secret-management/reloader.yaml(and the identical block incharts/ace-installer/) sets the image atreloader.deployment.image.name, butappscode-charts/reloader:2.2.9reads it from top-levelimage.repository— that path does not exist in the chart's values. The override is silently ignored, which is why clusters pullghcr.io/stakater/reloaderrather thanghcr.io/appscode/reloader. Not fixed here; the catalog now lists what is actually pulled.