This is an automated email from the ASF dual-hosted git repository.
jscheffl pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 653b8f6a3f2 Add workers.celery.terminationGracePeriodSeconds &
workers.kubernetes.terminationGracePeriodSeconds (#61892)
653b8f6a3f2 is described below
commit 653b8f6a3f22245a4852bf14a8b44a571a056085
Author: Przemysław Mirowski <[email protected]>
AuthorDate: Thu Mar 12 06:27:13 2026 +0100
Add workers.celery.terminationGracePeriodSeconds &
workers.kubernetes.terminationGracePeriodSeconds (#61892)
---
chart/files/pod-template-file.kubernetes-helm-yaml | 2 +-
chart/values.schema.json | 18 +++++++++-
chart/values.yaml | 8 +++++
.../airflow_aux/test_pod_template_file.py | 16 +++++----
.../tests/helm_tests/airflow_core/test_worker.py | 15 +++++++++
.../helm_tests/airflow_core/test_worker_sets.py | 39 ++++++++++++++--------
6 files changed, 77 insertions(+), 21 deletions(-)
diff --git a/chart/files/pod-template-file.kubernetes-helm-yaml
b/chart/files/pod-template-file.kubernetes-helm-yaml
index 99c617b8b29..bad917ae2bf 100644
--- a/chart/files/pod-template-file.kubernetes-helm-yaml
+++ b/chart/files/pod-template-file.kubernetes-helm-yaml
@@ -233,7 +233,7 @@ spec:
{{- if $schedulerName }}
schedulerName: {{ $schedulerName }}
{{- end }}
- terminationGracePeriodSeconds: {{
.Values.workers.terminationGracePeriodSeconds }}
+ terminationGracePeriodSeconds: {{
.Values.workers.kubernetes.terminationGracePeriodSeconds | default
.Values.workers.terminationGracePeriodSeconds }}
tolerations: {{- toYaml $tolerations | nindent 4 }}
topologySpreadConstraints: {{- toYaml $topologySpreadConstraints | nindent 4
}}
serviceAccountName: {{ include "worker.serviceAccountName" . }}
diff --git a/chart/values.schema.json b/chart/values.schema.json
index f73cf1ee7da..f4186e6d784 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -2282,7 +2282,7 @@
"$ref":
"#/definitions/io.k8s.api.core.v1.ResourceRequirements"
},
"terminationGracePeriodSeconds": {
- "description": "Grace period for tasks to finish after
SIGTERM is sent from Kubernetes. It is used by Airflow Celery workers and
pod-template-file.",
+ "description": "Grace period for tasks to finish after
SIGTERM is sent from Kubernetes. It is used by Airflow Celery workers and
pod-template-file. Use ``workers.celery.terminationGracePeriodSeconds`` and/or
``workers.kubernetes.terminationGracePeriodSeconds`` to separate value between
Celery workers and pod-template-file",
"type": "integer",
"default": 600
},
@@ -3275,6 +3275,14 @@
}
],
"$ref":
"#/definitions/io.k8s.api.core.v1.ResourceRequirements"
+ },
+ "terminationGracePeriodSeconds": {
+ "description": "Grace period for tasks to finish
after SIGTERM is sent from Kubernetes.",
+ "type": [
+ "integer",
+ "null"
+ ],
+ "default": null
}
}
},
@@ -3548,6 +3556,14 @@
}
],
"$ref":
"#/definitions/io.k8s.api.core.v1.ResourceRequirements"
+ },
+ "terminationGracePeriodSeconds": {
+ "description": "Grace period for tasks to finish
after SIGTERM is sent from Kubernetes.",
+ "type": [
+ "integer",
+ "null"
+ ],
+ "default": null
}
}
}
diff --git a/chart/values.yaml b/chart/values.yaml
index b9a0be6ff9a..94a6e005608 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -909,6 +909,8 @@ workers:
# Grace period for tasks to finish after SIGTERM is sent from kubernetes.
# It is used by Airflow Celery workers and pod-template-file.
+ # Use workers.celery.terminationGracePeriodSeconds and/or
workers.kubernetes.terminationGracePeriodSeconds
+ # to separate value between Celery workers and pod-template-file
terminationGracePeriodSeconds: 600
# This setting tells kubernetes that its ok to evict when it wants to scale
a node down.
@@ -1262,6 +1264,9 @@ workers:
# cpu: 100m
# memory: 128Mi
+ # Grace period for tasks to finish after SIGTERM is sent from kubernetes
+ terminationGracePeriodSeconds: ~
+
kubernetes:
# Command to use in pod-template-file (templated)
command: ~
@@ -1326,6 +1331,9 @@ workers:
# cpu: 100m
# memory: 128Mi
+ # Grace period for tasks to finish after SIGTERM is sent from kubernetes
+ terminationGracePeriodSeconds: ~
+
# Airflow scheduler settings
scheduler:
enabled: true
diff --git a/helm-tests/tests/helm_tests/airflow_aux/test_pod_template_file.py
b/helm-tests/tests/helm_tests/airflow_aux/test_pod_template_file.py
index 1ed5a2ad09e..15324d6cb51 100644
--- a/helm-tests/tests/helm_tests/airflow_aux/test_pod_template_file.py
+++ b/helm-tests/tests/helm_tests/airflow_aux/test_pod_template_file.py
@@ -1114,13 +1114,17 @@ class TestPodTemplateFile:
"preStop": {"exec": {"command": ["echo", "preStop",
"test-release"]}}
}
- def test_termination_grace_period_seconds(self):
+ @pytest.mark.parametrize(
+ "workers_values",
+ [
+ {"terminationGracePeriodSeconds": 123},
+ {"kubernetes": {"terminationGracePeriodSeconds": 123}},
+ {"terminationGracePeriodSeconds": 1, "kubernetes":
{"terminationGracePeriodSeconds": 123}},
+ ],
+ )
+ def test_termination_grace_period_seconds(self, workers_values):
docs = render_chart(
- values={
- "workers": {
- "terminationGracePeriodSeconds": 123,
- },
- },
+ values={"workers": workers_values},
show_only=["templates/pod-template-file.yaml"],
chart_dir=self.temp_chart_dir,
)
diff --git a/helm-tests/tests/helm_tests/airflow_core/test_worker.py
b/helm-tests/tests/helm_tests/airflow_core/test_worker.py
index 4a9e611b92c..325695d9631 100644
--- a/helm-tests/tests/helm_tests/airflow_core/test_worker.py
+++ b/helm-tests/tests/helm_tests/airflow_core/test_worker.py
@@ -1721,6 +1721,21 @@ class TestWorker:
values={"workers": workers_values},
show_only=["templates/workers/worker-deployment.yaml"]
)
+ @pytest.mark.parametrize(
+ "workers_values",
+ [
+ {"terminationGracePeriodSeconds": 5},
+ {"celery": {"terminationGracePeriodSeconds": 5}},
+ {"terminationGracePeriodSeconds": 10, "celery":
{"terminationGracePeriodSeconds": 5}},
+ ],
+ )
+ def test_termination_grace_period(self, workers_values):
+ docs = render_chart(
+ values={"workers": workers_values},
show_only=["templates/workers/worker-deployment.yaml"]
+ )
+
+ assert
jmespath.search("spec.template.spec.terminationGracePeriodSeconds", docs[0]) ==
5
+
class TestWorkerLogGroomer(LogGroomerTestBase):
"""Worker groomer."""
diff --git a/helm-tests/tests/helm_tests/airflow_core/test_worker_sets.py
b/helm-tests/tests/helm_tests/airflow_core/test_worker_sets.py
index d9a6aeb5f89..58107647491 100644
--- a/helm-tests/tests/helm_tests/airflow_core/test_worker_sets.py
+++ b/helm-tests/tests/helm_tests/airflow_core/test_worker_sets.py
@@ -2177,21 +2177,34 @@ class TestWorkerSets:
"limits": {"cpu": "3m", "memory": "4Mi"},
}
- def test_overwrite_termination_grace_period_seconds(self):
- docs = render_chart(
- values={
- "workers": {
- "celery": {
- "enableDefault": False,
- "sets": [
- {
- "name": "test",
- "terminationGracePeriodSeconds": 5,
- }
- ],
- },
+ @pytest.mark.parametrize(
+ "workers_values",
+ [
+ {
+ "celery": {
+ "enableDefault": False,
+ "sets": [{"name": "test", "terminationGracePeriodSeconds":
5}],
}
},
+ {
+ "terminationGracePeriodSeconds": 20,
+ "celery": {
+ "enableDefault": False,
+ "sets": [{"name": "test", "terminationGracePeriodSeconds":
5}],
+ },
+ },
+ {
+ "celery": {
+ "terminationGracePeriodSeconds": 20,
+ "enableDefault": False,
+ "sets": [{"name": "test", "terminationGracePeriodSeconds":
5}],
+ }
+ },
+ ],
+ )
+ def test_overwrite_termination_grace_period_seconds(self, workers_values):
+ docs = render_chart(
+ values={"workers": workers_values},
show_only=["templates/workers/worker-deployment.yaml"],
)