Skip to content

Restructure Helm Charts – CRD Installation Refactor #1186

@saileshd1402

Description

@saileshd1402

Description

We currently face conflicts when installing ai-gateway-crd-helm and ai-gateway-helm as two subcharts under a parent Helm chart. This proposal suggests refactoring CRD handling to avoid duplicate ownership issues when used as subcharts and follow the Helm standards.

Setup / Problem

  • We have two Helm subcharts under a parent chart: ai-gateway-crd-helm and ai-gateway-helm. Both include the same CRDs, causing ownership / conflict issues when installing the parent chart.
  • While installing ai-gateway-helm through Helm CLI, we can use --skip-crds to avoid CRD installation, but ai-gateway-helm doesn’t have a corresponding setting in values.yaml to skip its CRDs when added as a subchart.
  • The current workaround is to install the parent chart with the --skip-crds flag, so only ai-gateway-crd-helm installs the CRDs and ai-gateway-helm’s CRDs (in its crds/ directory) are skipped. But this feels unintuitive and fragile.

Proposed Solutions

1. Remove CRDs from ai-gateway-helm Chart

  • Remove all CRDs from ai‑gateway‑helm, so that ai‑gateway‑crd‑helm is the single chart responsible for defining and managing CRDs.
  • The CRD chart owns the lifecycle of CRDs — installation, upgrades (as appropriate), etc., while ai‑gateway‑helm handles the rest of the resources.
  • Having a single owner of CRDs avoids the conflict/ownership issues when installing multiple charts under a parent.
  • kserve follows this approach where they have completely separate charts for CRDs (kserve-crd) and resources (kserve-resources)

2. Toggle + Move CRDs into templates/ in ai-gateway-helm Chart

  • Move CRDs from ai‑gateway‑helm’s crds/ directory into templates/.
  • Add a Boolean toggle in ai‑gateway‑helm’s values.yaml (e.g. crds.enabled) that controls whether the CRD templates are rendered and installed.
  • cert-manager follows this approach where it includes CRDs within the templates/ directory of its Helm chart, allowing installation to be toggled via the crds.enabled flag in values.yaml.

Upgrade Considerations

From my testing, both proposed approaches have breaking changes. Upgrading from the current chart version to a version implementing either solution will likely require special migration steps. If not, they would face helm ownership conflict issues when upgrading.

I’d appreciate your thoughts on these proposals, and I’m open to any other ideas the community may suggest.

I’m also happy to help implement whichever approach is decided

Thank you!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions