contributing-docs/29_helm_chart_development.rst
.. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
.. http://www.apache.org/licenses/LICENSE-2.0
.. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Use this document when working on the Airflow Helm chart to decide where a change belongs (chart, Kustomize overlay, or out entirely) and how to shape it. It is the contributor-facing guide for chart development.
.. contents:: Table of Contents :depth: 2 :local:
Start here when adding or modifying a chart parameter or component.
.. code-block:: text
START: Adding or modifying a chart parameter or component │ └─► Q1. New feature, or change to an existing parameter?
[New feature]
│
└─► Q2. Meets all three "belongs in chart" criteria?
│
├─► YES → CHART
│
└─► NO → Q3. Meets any "belongs in Kustomize" criterion?
│
├─► YES → KUSTOMIZE OVERLAY
│ (overlays live alongside the chart
│ but are not released as chart
│ artifacts)
│
└─► NO → Scope discussion on dev@ list
before opening a PR
[Change to existing]
│
└─► Q4. Under the right parent section?
│
├─► NO → Relocate to owning component
│ (canonical name changes; value continues to work)
│
└─► YES → Q5. Same setting reachable through more than one path?
│
├─► YES → Consolidate to one path
│
└─► NO → Q6. Defaults sensible at chart level?
│
├─► YES → Done
│
└─► NO → Tighten to least-privilege
or common-case baseline
The canonical criteria document lives at
chart/kustomize-overlays/CONTRIBUTING.rst. The summary below mirrors that
document and is aligned with the chart documentation convention.
Belongs in the chart (all must be true)
Belongs in Kustomize (any may be true)
Migration invariant
Where each component lives. Use this when adding parameters or templates that touch a specific component.
Some entries reflect routing decisions that are still being implemented — check the refurbishment tracking issue for in-flight work before assuming a component is already in its target home.
.. list-table:: :header-rows: 1 :widths: 30 25 45
registry.secretNames,
securityContext, ingress.apiServer.host,
ingress.apiServer.tls.*, or a top-level ingress.enabled here —
those belong with their owning components, not under ingress.allowJobLaunching / allowPodLaunchingserviceAccountGitDagBundle (Airflow-native). An overlay exists only
if community demand persists after the GitDagBundle migration is
documented.When adding or changing chart parameters, follow these conventions.
Configuration via environment variables. airflow.cfg is decoupled
from the chart; configuration is expressed through environment variables.
The chart keeps a basic cfg surface — complex per-component configuration
goes through overlays.
Persistence follows the bundles model. Log and Dag folders are two
distinct types: Log and Bundles. One DagBundle per deployment,
multiple DagProcessor instances per bundle. Multi-team support fits this
shape rather than retrofitted onto a different model.
Parameters belong with their owning component. Place a setting under the component that consumes it. Redis configuration goes under the celery section, jobs configuration under kubernetes, and so on. Do not introduce top-level keys for component-scoped settings.
No duplicate definition paths. A given image is defined in one place. A given setting is reachable from one section. If you find yourself adding a parameter that overlaps an existing one, consolidate instead of layering.
Defaults are least-privilege. Security context is enforced at the component and container level. Roles and role bindings follow the same principle. Probes (readiness, liveness) cover the common case in the chart; edge cases live in overlays.
Overlays are not second-class. Three things travel with every overlay PR:
uv-driven tooling, and a contribution guide modelled
on how providers are managed.