You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by je...@apache.org on 2022/08/23 18:13:12 UTC

[airflow] branch main updated: Added labels to specific airflow components (#25031)

This is an automated email from the ASF dual-hosted git repository.

jedcunningham 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 1e807ce974 Added labels to specific airflow components (#25031)
1e807ce974 is described below

commit 1e807ce97446c16270c61167a3e03d3e2bfb0f1d
Author: Rishabh Karajgi <ri...@gmail.com>
AuthorDate: Tue Aug 23 23:43:01 2022 +0530

    Added labels to specific airflow components (#25031)
---
 chart/files/pod-template-file.kubernetes-helm-yaml |  4 +-
 chart/templates/cleanup/cleanup-cronjob.yaml       |  6 +-
 .../templates/cleanup/cleanup-serviceaccount.yaml  |  6 +-
 chart/templates/flower/flower-deployment.yaml      |  4 +-
 chart/templates/flower/flower-ingress.yaml         |  6 +-
 chart/templates/flower/flower-networkpolicy.yaml   |  4 +-
 chart/templates/flower/flower-service.yaml         |  4 +-
 chart/templates/flower/flower-serviceaccount.yaml  |  6 +-
 .../jobs/create-user-job-serviceaccount.yaml       |  6 +-
 chart/templates/jobs/create-user-job.yaml          |  4 +-
 .../templates/scheduler/scheduler-deployment.yaml  |  4 +-
 .../scheduler/scheduler-networkpolicy.yaml         |  4 +-
 .../scheduler/scheduler-poddisruptionbudget.yaml   |  4 +-
 chart/templates/scheduler/scheduler-service.yaml   |  4 +-
 .../scheduler/scheduler-serviceaccount.yaml        |  6 +-
 .../templates/triggerer/triggerer-deployment.yaml  |  6 +-
 .../triggerer/triggerer-serviceaccount.yaml        |  6 +-
 .../templates/webserver/webserver-deployment.yaml  |  4 +-
 chart/templates/webserver/webserver-ingress.yaml   |  6 +-
 .../webserver/webserver-networkpolicy.yaml         |  4 +-
 .../webserver/webserver-poddisruptionbudget.yaml   |  4 +-
 chart/templates/webserver/webserver-service.yaml   |  4 +-
 .../webserver/webserver-serviceaccount.yaml        |  6 +-
 chart/templates/workers/worker-deployment.yaml     |  4 +-
 chart/templates/workers/worker-kedaautoscaler.yaml |  4 +-
 chart/templates/workers/worker-networkpolicy.yaml  |  4 +-
 chart/templates/workers/worker-service.yaml        |  4 +-
 chart/templates/workers/worker-serviceaccount.yaml |  6 +-
 chart/values.schema.json                           | 56 +++++++++++++++
 chart/values.yaml                                  | 20 ++++++
 tests/charts/test_cleanup_pods.py                  | 33 +++++++++
 tests/charts/test_create_user_job.py               | 27 ++++++++
 tests/charts/test_flower.py                        | 59 ++++++++++++++++
 tests/charts/test_ingress_flower.py                | 15 ++++
 tests/charts/test_ingress_web.py                   | 13 ++++
 tests/charts/test_pdb_scheduler.py                 | 16 +++++
 tests/charts/test_pdb_webserver.py                 | 15 ++++
 tests/charts/test_pod_template_file.py             | 15 ++++
 tests/charts/test_scheduler.py                     | 62 +++++++++++++++++
 tests/charts/test_triggerer.py                     | 29 ++++++++
 tests/charts/test_webserver.py                     | 53 ++++++++++++++
 tests/charts/test_worker.py                        | 81 ++++++++++++++++++++++
 42 files changed, 561 insertions(+), 67 deletions(-)

diff --git a/chart/files/pod-template-file.kubernetes-helm-yaml b/chart/files/pod-template-file.kubernetes-helm-yaml
index 12ec49a71c..35b2b382ec 100644
--- a/chart/files/pod-template-file.kubernetes-helm-yaml
+++ b/chart/files/pod-template-file.kubernetes-helm-yaml
@@ -28,8 +28,8 @@ metadata:
     tier: airflow
     component: worker
     release: {{ .Release.Name }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.workers.labels) }}
+{{- mustMerge .Values.workers.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
   {{- if or .Values.airflowPodAnnotations .Values.workers.podAnnotations }}
   annotations:
diff --git a/chart/templates/cleanup/cleanup-cronjob.yaml b/chart/templates/cleanup/cleanup-cronjob.yaml
index 583d9a11b4..05e0c0330e 100644
--- a/chart/templates/cleanup/cleanup-cronjob.yaml
+++ b/chart/templates/cleanup/cleanup-cronjob.yaml
@@ -54,9 +54,9 @@ spec:
             tier: airflow
             component: airflow-cleanup-pods
             release: {{ .Release.Name }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 12 }}
-{{- end }}
+          {{- if or (.Values.labels) (.Values.cleanup.labels) }}
+          {{- mustMerge .Values.cleanup.labels .Values.labels | toYaml | nindent 12 }}
+          {{- end }}
           annotations:
             sidecar.istio.io/inject: "false"
             {{- if .Values.airflowPodAnnotations }}
diff --git a/chart/templates/cleanup/cleanup-serviceaccount.yaml b/chart/templates/cleanup/cleanup-serviceaccount.yaml
index f4e1f02dce..faaa809ba7 100644
--- a/chart/templates/cleanup/cleanup-serviceaccount.yaml
+++ b/chart/templates/cleanup/cleanup-serviceaccount.yaml
@@ -28,9 +28,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{ toYaml . | nindent 4 }}
-    {{- end }}
+      {{- if or (.Values.labels) (.Values.cleanup.labels) }}
+      {{- mustMerge .Values.cleanup.labels .Values.labels | toYaml | nindent 4 }}
+      {{- end }}
   {{- with .Values.cleanup.serviceAccount.annotations }}
   annotations:
   {{ toYaml . | nindent 4 }}
diff --git a/chart/templates/flower/flower-deployment.yaml b/chart/templates/flower/flower-deployment.yaml
index 9111c4625e..f8c9b2a663 100644
--- a/chart/templates/flower/flower-deployment.yaml
+++ b/chart/templates/flower/flower-deployment.yaml
@@ -55,8 +55,8 @@ spec:
         tier: airflow
         component: flower
         release: {{ .Release.Name }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 8 }}
+{{- if or (.Values.labels) (.Values.flower.labels) }}
+{{- mustMerge .Values.flower.labels .Values.labels | toYaml | nindent 8 }}
 {{- end }}
       annotations:
         checksum/airflow-config: {{ include (print $.Template.BasePath "/configmaps/configmap.yaml") . | sha256sum }}
diff --git a/chart/templates/flower/flower-ingress.yaml b/chart/templates/flower/flower-ingress.yaml
index 152c1a2ee7..994f8a0ea4 100644
--- a/chart/templates/flower/flower-ingress.yaml
+++ b/chart/templates/flower/flower-ingress.yaml
@@ -35,9 +35,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{- toYaml . | nindent 4 }}
-    {{- end }}
+{{- if or (.Values.labels) (.Values.flower.labels) }}
+{{- mustMerge .Values.flower.labels .Values.labels | toYaml | nindent 4 }}
+{{- end }}
   {{- with .Values.ingress.flower.annotations }}
   annotations:
     {{- toYaml . | nindent 4 }}
diff --git a/chart/templates/flower/flower-networkpolicy.yaml b/chart/templates/flower/flower-networkpolicy.yaml
index d9bf0f89da..32a0e5288c 100644
--- a/chart/templates/flower/flower-networkpolicy.yaml
+++ b/chart/templates/flower/flower-networkpolicy.yaml
@@ -32,8 +32,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.flower.labels) }}
+{{- mustMerge .Values.flower.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   podSelector:
diff --git a/chart/templates/flower/flower-service.yaml b/chart/templates/flower/flower-service.yaml
index 785f15041d..07e114e9db 100644
--- a/chart/templates/flower/flower-service.yaml
+++ b/chart/templates/flower/flower-service.yaml
@@ -30,8 +30,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.flower.labels) }}
+{{- mustMerge .Values.flower.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 {{- with .Values.flower.service.annotations }}
   annotations:
diff --git a/chart/templates/flower/flower-serviceaccount.yaml b/chart/templates/flower/flower-serviceaccount.yaml
index 27da42fc55..ab05a06baf 100644
--- a/chart/templates/flower/flower-serviceaccount.yaml
+++ b/chart/templates/flower/flower-serviceaccount.yaml
@@ -29,9 +29,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{ toYaml . | nindent 4 }}
-    {{- end }}
+{{- if or (.Values.labels) (.Values.flower.labels) }}
+{{- mustMerge .Values.flower.labels .Values.labels | toYaml | nindent 4 }}
+{{- end }}
   {{- with .Values.flower.serviceAccount.annotations }}
   annotations:
   {{ toYaml . | nindent 4 }}
diff --git a/chart/templates/jobs/create-user-job-serviceaccount.yaml b/chart/templates/jobs/create-user-job-serviceaccount.yaml
index 588218dc81..f81b0819ee 100644
--- a/chart/templates/jobs/create-user-job-serviceaccount.yaml
+++ b/chart/templates/jobs/create-user-job-serviceaccount.yaml
@@ -29,9 +29,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{ toYaml . | nindent 4 }}
-    {{- end }}
+{{- if or (.Values.labels) (.Values.createUserJob.labels) }}
+{{- mustMerge .Values.createUserJob.labels .Values.labels | toYaml | nindent 4 }}
+{{- end }}
   {{- with .Values.createUserJob.serviceAccount.annotations }}
   annotations:
   {{ toYaml . | nindent 4 }}
diff --git a/chart/templates/jobs/create-user-job.yaml b/chart/templates/jobs/create-user-job.yaml
index f0b2160fe3..5de066c416 100644
--- a/chart/templates/jobs/create-user-job.yaml
+++ b/chart/templates/jobs/create-user-job.yaml
@@ -54,8 +54,8 @@ spec:
         tier: airflow
         component: create-user-job
         release: {{ .Release.Name }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 8 }}
+{{- if or (.Values.labels) (.Values.createUserJob.labels) }}
+{{- mustMerge .Values.createUserJob.labels .Values.labels | toYaml | nindent 8 }}
 {{- end }}
       {{- if or .Values.airflowPodAnnotations .Values.createUserJob.annotations }}
       annotations:
diff --git a/chart/templates/scheduler/scheduler-deployment.yaml b/chart/templates/scheduler/scheduler-deployment.yaml
index 49684ef7d6..a4a93190f6 100644
--- a/chart/templates/scheduler/scheduler-deployment.yaml
+++ b/chart/templates/scheduler/scheduler-deployment.yaml
@@ -77,8 +77,8 @@ spec:
         tier: airflow
         component: scheduler
         release: {{ .Release.Name }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 8 }}
+{{- if or (.Values.labels) (.Values.scheduler.labels) }}
+{{- mustMerge .Values.scheduler.labels .Values.labels | toYaml | nindent 8 }}
 {{- end }}
       annotations:
         checksum/metadata-secret: {{ include (print $.Template.BasePath "/secrets/metadata-connection-secret.yaml") . | sha256sum }}
diff --git a/chart/templates/scheduler/scheduler-networkpolicy.yaml b/chart/templates/scheduler/scheduler-networkpolicy.yaml
index 37e00ed93c..a65d43b454 100644
--- a/chart/templates/scheduler/scheduler-networkpolicy.yaml
+++ b/chart/templates/scheduler/scheduler-networkpolicy.yaml
@@ -29,8 +29,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.scheduler.labels) }}
+{{- mustMerge .Values.scheduler.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   podSelector:
diff --git a/chart/templates/scheduler/scheduler-poddisruptionbudget.yaml b/chart/templates/scheduler/scheduler-poddisruptionbudget.yaml
index 24a627f270..5f634b93bc 100644
--- a/chart/templates/scheduler/scheduler-poddisruptionbudget.yaml
+++ b/chart/templates/scheduler/scheduler-poddisruptionbudget.yaml
@@ -33,8 +33,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: {{ .Chart.Name }}
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.scheduler.labels) }}
+{{- mustMerge .Values.scheduler.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   selector:
diff --git a/chart/templates/scheduler/scheduler-service.yaml b/chart/templates/scheduler/scheduler-service.yaml
index 55e6f012bf..1bc9c9f54e 100644
--- a/chart/templates/scheduler/scheduler-service.yaml
+++ b/chart/templates/scheduler/scheduler-service.yaml
@@ -29,8 +29,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.scheduler.labels) }}
+{{- mustMerge .Values.scheduler.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   clusterIP: None
diff --git a/chart/templates/scheduler/scheduler-serviceaccount.yaml b/chart/templates/scheduler/scheduler-serviceaccount.yaml
index c1acedd41c..8d851f24af 100644
--- a/chart/templates/scheduler/scheduler-serviceaccount.yaml
+++ b/chart/templates/scheduler/scheduler-serviceaccount.yaml
@@ -29,9 +29,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{ toYaml . | nindent 4 }}
-    {{- end }}
+{{- if or (.Values.labels) (.Values.scheduler.labels) }}
+{{- mustMerge .Values.scheduler.labels .Values.labels | toYaml | nindent 4 }}
+{{- end }}
   {{- with .Values.scheduler.serviceAccount.annotations }}
   annotations:
     {{- range $key, $value := . }}
diff --git a/chart/templates/triggerer/triggerer-deployment.yaml b/chart/templates/triggerer/triggerer-deployment.yaml
index 65be4738d6..434b1037c3 100644
--- a/chart/templates/triggerer/triggerer-deployment.yaml
+++ b/chart/templates/triggerer/triggerer-deployment.yaml
@@ -59,9 +59,9 @@ spec:
         tier: airflow
         component: triggerer
         release: {{ .Release.Name }}
-        {{- with .Values.labels }}
-        {{- toYaml . | nindent 8 }}
-        {{- end }}
+{{- if or (.Values.labels) (.Values.triggerer.labels) }}
+{{- mustMerge .Values.triggerer.labels .Values.labels | toYaml | nindent 8 }}
+{{- end }}
       annotations:
         checksum/metadata-secret: {{ include (print $.Template.BasePath "/secrets/metadata-connection-secret.yaml") . | sha256sum }}
         checksum/pgbouncer-config-secret: {{ include (print $.Template.BasePath "/secrets/pgbouncer-config-secret.yaml") . | sha256sum }}
diff --git a/chart/templates/triggerer/triggerer-serviceaccount.yaml b/chart/templates/triggerer/triggerer-serviceaccount.yaml
index cf128abe8c..c3836a82bc 100644
--- a/chart/templates/triggerer/triggerer-serviceaccount.yaml
+++ b/chart/templates/triggerer/triggerer-serviceaccount.yaml
@@ -30,9 +30,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{ toYaml . | nindent 4 }}
-    {{- end }}
+{{- if or (.Values.labels) (.Values.triggerer.labels) }}
+{{- mustMerge .Values.triggerer.labels .Values.labels | toYaml | nindent 4 }}
+{{- end }}
   {{- with .Values.triggerer.serviceAccount.annotations}}
   annotations:
     {{ toYaml . | nindent 4 }}
diff --git a/chart/templates/webserver/webserver-deployment.yaml b/chart/templates/webserver/webserver-deployment.yaml
index 572f54f6c4..0a3033a029 100644
--- a/chart/templates/webserver/webserver-deployment.yaml
+++ b/chart/templates/webserver/webserver-deployment.yaml
@@ -73,8 +73,8 @@ spec:
         tier: airflow
         component: webserver
         release: {{ .Release.Name }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 8 }}
+{{- if or (.Values.labels) (.Values.webserver.labels) }}
+{{- mustMerge .Values.webserver.labels .Values.labels | toYaml | nindent 8 }}
 {{- end }}
       annotations:
         checksum/metadata-secret: {{ include (print $.Template.BasePath "/secrets/metadata-connection-secret.yaml") . | sha256sum }}
diff --git a/chart/templates/webserver/webserver-ingress.yaml b/chart/templates/webserver/webserver-ingress.yaml
index 8c0f169f70..e6ab4b0533 100644
--- a/chart/templates/webserver/webserver-ingress.yaml
+++ b/chart/templates/webserver/webserver-ingress.yaml
@@ -34,9 +34,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{- toYaml . | nindent 4 }}
-    {{- end }}
+{{- if or (.Values.labels) (.Values.webserver.labels) }}
+{{- mustMerge .Values.webserver.labels .Values.labels | toYaml | nindent 4 }}
+{{- end }}
   {{- with .Values.ingress.web.annotations }}
   annotations:
     {{- toYaml . | nindent 4 }}
diff --git a/chart/templates/webserver/webserver-networkpolicy.yaml b/chart/templates/webserver/webserver-networkpolicy.yaml
index 65d0cb18ee..8a2970c933 100644
--- a/chart/templates/webserver/webserver-networkpolicy.yaml
+++ b/chart/templates/webserver/webserver-networkpolicy.yaml
@@ -30,8 +30,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.webserver.labels) }}
+{{- mustMerge .Values.webserver.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   podSelector:
diff --git a/chart/templates/webserver/webserver-poddisruptionbudget.yaml b/chart/templates/webserver/webserver-poddisruptionbudget.yaml
index ea5af88de6..c96f5a24c5 100644
--- a/chart/templates/webserver/webserver-poddisruptionbudget.yaml
+++ b/chart/templates/webserver/webserver-poddisruptionbudget.yaml
@@ -33,8 +33,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: {{ .Chart.Name }}
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.webserver.labels) }}
+{{- mustMerge .Values.webserver.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   selector:
diff --git a/chart/templates/webserver/webserver-service.yaml b/chart/templates/webserver/webserver-service.yaml
index 9ccba11f7b..7c5f9958c5 100644
--- a/chart/templates/webserver/webserver-service.yaml
+++ b/chart/templates/webserver/webserver-service.yaml
@@ -28,8 +28,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.webserver.labels) }}
+{{- mustMerge .Values.webserver.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 {{- with .Values.webserver.service.annotations }}
   annotations:
diff --git a/chart/templates/webserver/webserver-serviceaccount.yaml b/chart/templates/webserver/webserver-serviceaccount.yaml
index 369a0476fa..f9d6f25c6a 100644
--- a/chart/templates/webserver/webserver-serviceaccount.yaml
+++ b/chart/templates/webserver/webserver-serviceaccount.yaml
@@ -29,9 +29,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{ toYaml . | nindent 4 }}
-    {{- end }}
+{{- if or (.Values.labels) (.Values.webserver.labels) }}
+{{- mustMerge .Values.webserver.labels .Values.labels | toYaml | nindent 4 }}
+{{- end }}
   {{- with .Values.webserver.serviceAccount.annotations }}
   annotations:
   {{ toYaml . | nindent 4 }}
diff --git a/chart/templates/workers/worker-deployment.yaml b/chart/templates/workers/worker-deployment.yaml
index 5901585ff0..5cde38a181 100644
--- a/chart/templates/workers/worker-deployment.yaml
+++ b/chart/templates/workers/worker-deployment.yaml
@@ -66,8 +66,8 @@ spec:
         tier: airflow
         component: worker
         release: {{ .Release.Name }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 8 }}
+{{- if or (.Values.labels) (.Values.workers.labels) }}
+{{- mustMerge .Values.workers.labels .Values.labels | toYaml | nindent 8 }}
 {{- end }}
       annotations:
         checksum/metadata-secret: {{ include (print $.Template.BasePath "/secrets/metadata-connection-secret.yaml") . | sha256sum }}
diff --git a/chart/templates/workers/worker-kedaautoscaler.yaml b/chart/templates/workers/worker-kedaautoscaler.yaml
index 9fe869facc..7fae352f93 100644
--- a/chart/templates/workers/worker-kedaautoscaler.yaml
+++ b/chart/templates/workers/worker-kedaautoscaler.yaml
@@ -30,8 +30,8 @@ metadata:
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
     deploymentName: {{ .Release.Name }}-worker
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.workers.labels) }}
+{{- mustMerge .Values.workers.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   scaleTargetRef:
diff --git a/chart/templates/workers/worker-networkpolicy.yaml b/chart/templates/workers/worker-networkpolicy.yaml
index 193b55ee28..a0bfc02c21 100644
--- a/chart/templates/workers/worker-networkpolicy.yaml
+++ b/chart/templates/workers/worker-networkpolicy.yaml
@@ -29,8 +29,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.workers.labels) }}
+{{- mustMerge .Values.workers.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   podSelector:
diff --git a/chart/templates/workers/worker-service.yaml b/chart/templates/workers/worker-service.yaml
index 8923f53879..170427f12d 100644
--- a/chart/templates/workers/worker-service.yaml
+++ b/chart/templates/workers/worker-service.yaml
@@ -29,8 +29,8 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-{{- with .Values.labels }}
-{{ toYaml . | indent 4 }}
+{{- if or (.Values.labels) (.Values.workers.labels) }}
+{{- mustMerge .Values.workers.labels .Values.labels | toYaml | nindent 4 }}
 {{- end }}
 spec:
   clusterIP: None
diff --git a/chart/templates/workers/worker-serviceaccount.yaml b/chart/templates/workers/worker-serviceaccount.yaml
index 563c521512..bebddb96be 100644
--- a/chart/templates/workers/worker-serviceaccount.yaml
+++ b/chart/templates/workers/worker-serviceaccount.yaml
@@ -29,9 +29,9 @@ metadata:
     release: {{ .Release.Name }}
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     heritage: {{ .Release.Service }}
-    {{- with .Values.labels }}
-    {{ toYaml . | nindent 4 }}
-    {{- end }}
+{{- if or (.Values.labels) (.Values.workers.labels) }}
+{{- mustMerge .Values.workers.labels .Values.labels | toYaml | nindent 4 }}
+{{- end }}
   {{- with .Values.workers.serviceAccount.annotations}}
   annotations:
     {{ toYaml . | nindent 4 }}
diff --git a/chart/values.schema.json b/chart/values.schema.json
index 75ca8a411a..3d9ef3f0cd 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -1506,6 +1506,14 @@
                         "type": "string"
                     }
                 },
+                "labels": {
+                    "description": "Labels to add to the worker objects and pods.",
+                    "type": "object",
+                    "default": {},
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
                 "logGroomerSidecar": {
                     "description": "Configuration for worker log groomer sidecar",
                     "type": "object",
@@ -1884,6 +1892,14 @@
                         "type": "string"
                     }
                 },
+                "labels": {
+                    "description": "Labels to add to the scheduler objects and pods.",
+                    "type": "object",
+                    "default": {},
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
                 "logGroomerSidecar": {
                     "description": "Configuration for the schedulers log groomer sidecar.",
                     "type": "object",
@@ -2252,6 +2268,14 @@
                         "type": "string"
                     }
                 },
+                "labels": {
+                    "description": "Labels to add to the triggerer objects and pods.",
+                    "type": "object",
+                    "default": {},
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
                 "securityContext": {
                     "description": "Security context for the triggerer pod. If not set, the values from `securityContext` will be used.",
                     "type": "object",
@@ -2691,6 +2715,14 @@
                         "type": "string"
                     }
                 },
+                "labels": {
+                    "description": "Labels to add to the create user job objects and pods.",
+                    "type": "object",
+                    "default": {},
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
                 "serviceAccount": {
                     "description": "Create ServiceAccount.",
                     "type": "object",
@@ -3485,6 +3517,14 @@
                         "type": "string"
                     }
                 },
+                "labels": {
+                    "description": "Labels to add to the webserver objects and pods.",
+                    "type": "object",
+                    "default": {},
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
                 "waitForMigrations": {
                     "description": "wait-for-airflow-migrations init container.",
                     "type": "object",
@@ -3856,6 +3896,14 @@
                         "type": "string"
                     }
                 },
+                "labels": {
+                    "description": "Labels to add to the flower objects and pods.",
+                    "type": "object",
+                    "default": {},
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
                 "securityContext": {
                     "description": "Security context for the flower pod. If not set, the values from `securityContext` will be used.",
                     "type": "object",
@@ -4854,6 +4902,14 @@
                         "type": "string"
                     }
                 },
+                "labels": {
+                    "description": "labels to add to cleanup pods.",
+                    "type": "object",
+                    "default": {},
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
                 "resources": {
                     "description": "Resources for or cleanup pods",
                     "type": "object",
diff --git a/chart/values.yaml b/chart/values.yaml
index 64156dea44..ded3f02d61 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -586,6 +586,9 @@ workers:
 
   podAnnotations: {}
 
+  # Labels specific to workers objects and pods
+  labels: {}
+
   logGroomerSidecar:
     # Command to use when running the Airflow worker log groomer sidecar (templated).
     command: ~
@@ -699,6 +702,9 @@ scheduler:
 
   podAnnotations: {}
 
+  # Labels specific to scheduler objects and pods
+  labels: {}
+
   logGroomerSidecar:
     # Whether to deploy the Airflow scheduler log groomer sidecar.
     enabled: true
@@ -754,6 +760,9 @@ createUserJob:
   # jobAnnotations are annotations on the create user job
   jobAnnotations: {}
 
+  # Labels specific to createUserJob objects and pods
+  labels: {}
+
   # When not set, the values defined in the global securityContext will be used
   securityContext: {}
   #  runAsUser: 50000
@@ -999,6 +1008,9 @@ webserver:
 
   podAnnotations: {}
 
+  # Labels specific webserver app
+  labels: {}
+
   waitForMigrations:
     # Whether to create init container to wait for db migrations
     enabled: true
@@ -1094,6 +1106,9 @@ triggerer:
 
   podAnnotations: {}
 
+  # Labels specific to triggerer objects and pods
+  labels: {}
+
   waitForMigrations:
     # Whether to create init container to wait for db migrations
     enabled: true
@@ -1291,6 +1306,8 @@ flower:
 
   podAnnotations: {}
 
+  # Labels specific to flower objects and pods
+  labels: {}
   env: []
 
 # StatsD settings
@@ -1585,6 +1602,9 @@ cleanup:
 
   podAnnotations: {}
 
+  # Labels specific to cleanup objects and pods
+  labels: {}
+
   resources: {}
   #  limits:
   #   cpu: 100m
diff --git a/tests/charts/test_cleanup_pods.py b/tests/charts/test_cleanup_pods.py
index 1fff271169..c1f1e2c80b 100644
--- a/tests/charts/test_cleanup_pods.py
+++ b/tests/charts/test_cleanup_pods.py
@@ -190,6 +190,23 @@ class CleanupPodsTest(unittest.TestCase):
             "project": "airflow",
         } == jmespath.search("spec.jobTemplate.spec.template.metadata.labels", docs[0])
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "cleanup": {
+                    "enabled": True,
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/cleanup/cleanup-cronjob.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("spec.jobTemplate.spec.template.metadata.labels", docs[0])
+        assert (
+            jmespath.search("spec.jobTemplate.spec.template.metadata.labels", docs[0])["test_label"]
+            == "test_label_value"
+        )
+
     def test_cleanup_resources_are_configurable(self):
         resources = {
             "requests": {
@@ -214,3 +231,19 @@ class CleanupPodsTest(unittest.TestCase):
         assert resources == jmespath.search(
             "spec.jobTemplate.spec.template.spec.containers[0].resources", docs[0]
         )
+
+
+class CleanupServiceAccountTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "cleanup": {
+                    "enabled": True,
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/cleanup/cleanup-serviceaccount.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_create_user_job.py b/tests/charts/test_create_user_job.py
index 940c31c0e3..d26dd5e6aa 100644
--- a/tests/charts/test_create_user_job.py
+++ b/tests/charts/test_create_user_job.py
@@ -42,6 +42,18 @@ class CreateUserJobTest(unittest.TestCase):
         assert "fiz" in job_annotations
         assert "fuz" == job_annotations["fiz"]
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "createUserJob": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/jobs/create-user-job.yaml"],
+        )
+        assert "test_label" in jmespath.search("spec.template.metadata.labels", docs[0])
+        assert jmespath.search("spec.template.metadata.labels", docs[0])["test_label"] == "test_label_value"
+
     def test_should_create_valid_affinity_tolerations_and_node_selector(self):
         docs = render_chart(
             values={
@@ -282,3 +294,18 @@ class CreateUserJobTest(unittest.TestCase):
             "-p",
             "whereisjane?",
         ] == jmespath.search("spec.template.spec.containers[0].args", docs[0])
+
+
+class CreateUserJobServiceAccountTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "createUserJob": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/jobs/create-user-job-serviceaccount.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_flower.py b/tests/charts/test_flower.py
index c5b602f6f9..dbe8db490f 100644
--- a/tests/charts/test_flower.py
+++ b/tests/charts/test_flower.py
@@ -280,6 +280,20 @@ class TestFlowerDeployment:
             "spec.template.spec.containers[0].env", docs[0]
         )
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "flower": {
+                    "enabled": True,
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/flower/flower-deployment.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("spec.template.metadata.labels", docs[0])
+        assert jmespath.search("spec.template.metadata.labels", docs[0])["test_label"] == "test_label_value"
+
 
 class TestFlowerService:
     @pytest.mark.parametrize(
@@ -371,6 +385,20 @@ class TestFlowerService:
 
         assert expected_ports == jmespath.search("spec.ports", docs[0])
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "flower": {
+                    "enabled": True,
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/flower/flower-service.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
 
 class TestFlowerNetworkPolicy:
     def test_off_by_default(self):
@@ -454,3 +482,34 @@ class TestFlowerNetworkPolicy:
         assert [{"namespaceSelector": {"matchLabels": {"release": "myrelease"}}}] == jmespath.search(
             "spec.ingress[0].from", docs[0]
         )
+
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "networkPolicies": {"enabled": True},
+                "flower": {
+                    "enabled": True,
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/flower/flower-networkpolicy.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
+
+class TestFlowerServiceAccount:
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "flower": {
+                    "enabled": True,
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/flower/flower-serviceaccount.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_ingress_flower.py b/tests/charts/test_ingress_flower.py
index 96d8bb91b6..191b06c0a0 100644
--- a/tests/charts/test_ingress_flower.py
+++ b/tests/charts/test_ingress_flower.py
@@ -168,3 +168,18 @@ class IngressFlowerTest(unittest.TestCase):
             show_only=["templates/flower/flower-ingress.yaml"],
         )
         assert 0 == len(docs)
+
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "ingress": {"enabled": True},
+                "flower": {
+                    "enabled": True,
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/flower/flower-ingress.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_ingress_web.py b/tests/charts/test_ingress_web.py
index 93b51e44dc..3255db39aa 100644
--- a/tests/charts/test_ingress_web.py
+++ b/tests/charts/test_ingress_web.py
@@ -152,3 +152,16 @@ class IngressWebTest(unittest.TestCase):
             del values["ingress"]
         docs = render_chart(values=values, show_only=["templates/webserver/webserver-ingress.yaml"])
         assert expected == (1 == len(docs))
+
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "ingress": {"enabled": True},
+                "webserver": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/webserver/webserver-ingress.yaml"],
+        )
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_pdb_scheduler.py b/tests/charts/test_pdb_scheduler.py
index 90933f40e1..ba16ba92ea 100644
--- a/tests/charts/test_pdb_scheduler.py
+++ b/tests/charts/test_pdb_scheduler.py
@@ -17,6 +17,8 @@
 
 import unittest
 
+import jmespath
+
 from tests.charts.helm_template_generator import render_chart
 
 
@@ -33,3 +35,17 @@ class SchedulerPdbTest(unittest.TestCase):
             show_only=["templates/scheduler/scheduler-poddisruptionbudget.yaml"],
             kubernetes_version='1.16.0',
         )  # checks that no validation exception is raised
+
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "scheduler": {
+                    "podDisruptionBudget": {"enabled": True},
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/scheduler/scheduler-poddisruptionbudget.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_pdb_webserver.py b/tests/charts/test_pdb_webserver.py
index aba212b6f7..7452bd0183 100644
--- a/tests/charts/test_pdb_webserver.py
+++ b/tests/charts/test_pdb_webserver.py
@@ -17,6 +17,8 @@
 
 import unittest
 
+import jmespath
+
 from tests.charts.helm_template_generator import render_chart
 
 
@@ -33,3 +35,16 @@ class WebserverPdbTest(unittest.TestCase):
             show_only=["templates/webserver/webserver-poddisruptionbudget.yaml"],
             kubernetes_version='1.16.0',
         )  # checks that no validation exception is raised
+
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "webserver": {
+                    "podDisruptionBudget": {"enabled": True},
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/webserver/webserver-poddisruptionbudget.yaml"],
+        )
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_pod_template_file.py b/tests/charts/test_pod_template_file.py
index b656d5bd53..91c0b17e0f 100644
--- a/tests/charts/test_pod_template_file.py
+++ b/tests/charts/test_pod_template_file.py
@@ -650,6 +650,21 @@ class PodTemplateFileTest(unittest.TestCase):
             "spec.containers[0].env", docs[0]
         )
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "executor": "KubernetesExecutor",
+                "workers": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/pod-template-file.yaml"],
+            chart_dir=self.temp_chart_dir,
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
     def test_should_add_resources(self):
         docs = render_chart(
             values={
diff --git a/tests/charts/test_scheduler.py b/tests/charts/test_scheduler.py
index 0131c6a617..89c05f96d0 100644
--- a/tests/charts/test_scheduler.py
+++ b/tests/charts/test_scheduler.py
@@ -145,6 +145,20 @@ class SchedulerTest(unittest.TestCase):
             "spec.template.spec.initContainers[0].env", docs[0]
         )
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "executor": "CeleryExecutor",
+                "scheduler": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/scheduler/scheduler-deployment.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("spec.template.metadata.labels", docs[0])
+        assert jmespath.search("spec.template.metadata.labels", docs[0])["test_label"] == "test_label_value"
+
     @parameterized.expand([(8, 10), (10, 8), (8, None), (None, 10), (None, None)])
     def test_revision_history_limit(self, revision_history_limit, global_revision_history_limit):
         values = {"scheduler": {}}
@@ -658,3 +672,51 @@ class SchedulerTest(unittest.TestCase):
             show_only=["templates/scheduler/scheduler-deployment.yaml"],
         )
         assert {"foo": "bar"} == jmespath.search("spec.volumeClaimTemplates[0].metadata.annotations", docs[0])
+
+
+class SchedulerNetworkPolicyTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "networkPolicies": {"enabled": True},
+                "scheduler": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/scheduler/scheduler-networkpolicy.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
+
+class SchedulerServiceTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "executor": "LocalExecutor",
+                "scheduler": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/scheduler/scheduler-service.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
+
+class SchedulerServiceAccountTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "scheduler": {
+                    "serviceAccount": {"create": True},
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/scheduler/scheduler-serviceaccount.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_triggerer.py b/tests/charts/test_triggerer.py
index 803b97a86c..5ecad1e4c0 100644
--- a/tests/charts/test_triggerer.py
+++ b/tests/charts/test_triggerer.py
@@ -161,6 +161,19 @@ class TriggererTest(unittest.TestCase):
             "spec.template.spec.initContainers[0].env", docs[0]
         )
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "triggerer": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/triggerer/triggerer-deployment.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("spec.template.metadata.labels", docs[0])
+        assert jmespath.search("spec.template.metadata.labels", docs[0])["test_label"] == "test_label_value"
+
     def test_should_create_valid_affinity_tolerations_and_node_selector(self):
         docs = render_chart(
             values={
@@ -457,3 +470,19 @@ class TriggererTest(unittest.TestCase):
         assert "git-sync-init" not in [
             c["name"] for c in jmespath.search("spec.template.spec.initContainers", docs[0])
         ]
+
+
+class TriggererServiceAccountTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "triggerer": {
+                    "serviceAccount": {"create": True},
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/triggerer/triggerer-serviceaccount.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_webserver.py b/tests/charts/test_webserver.py
index d40e04c2a5..53e51ffd28 100644
--- a/tests/charts/test_webserver.py
+++ b/tests/charts/test_webserver.py
@@ -246,6 +246,19 @@ class WebserverDeploymentTest(unittest.TestCase):
             "image": "test-registry/test-repo:test-tag",
         } == jmespath.search("spec.template.spec.initContainers[-1]", docs[0])
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "webserver": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/webserver/webserver-deployment.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("spec.template.metadata.labels", docs[0])
+        assert jmespath.search("spec.template.metadata.labels", docs[0])["test_label"] == "test_label_value"
+
     def test_should_create_valid_affinity_tolerations_and_node_selector(self):
         docs = render_chart(
             values={
@@ -695,6 +708,18 @@ class WebserverServiceTest(unittest.TestCase):
 
         assert expected_ports == jmespath.search("spec.ports", docs[0])
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "webserver": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/webserver/webserver-service.yaml"],
+        )
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
 
 class WebserverConfigmapTest(unittest.TestCase):
     def test_no_webserver_config_configmap_by_default(self):
@@ -791,3 +816,31 @@ class WebserverNetworkPolicyTest(unittest.TestCase):
         assert [{"namespaceSelector": {"matchLabels": {"release": "myrelease"}}}] == jmespath.search(
             "spec.ingress[0].from", docs[0]
         )
+
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "networkPolicies": {"enabled": True},
+                "webserver": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/webserver/webserver-networkpolicy.yaml"],
+        )
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
+
+class WebserverServiceAccountTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "webserver": {
+                    "serviceAccount": {"create": True},
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/webserver/webserver-serviceaccount.yaml"],
+        )
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
diff --git a/tests/charts/test_worker.py b/tests/charts/test_worker.py
index accb13bee2..9020742b46 100644
--- a/tests/charts/test_worker.py
+++ b/tests/charts/test_worker.py
@@ -140,6 +140,20 @@ class WorkerTest(unittest.TestCase):
             "spec.template.spec.initContainers[0].env", docs[0]
         )
 
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "executor": "CeleryExecutor",
+                "workers": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/workers/worker-deployment.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("spec.template.metadata.labels", docs[0])
+        assert jmespath.search("spec.template.metadata.labels", docs[0])["test_label"] == "test_label_value"
+
     def test_workers_host_aliases(self):
         docs = render_chart(
             values={
@@ -596,3 +610,70 @@ class WorkerTest(unittest.TestCase):
             show_only=["templates/workers/worker-deployment.yaml"],
         )
         assert {"foo": "bar"} == jmespath.search("spec.volumeClaimTemplates[0].metadata.annotations", docs[0])
+
+
+class WorkerKedaAutoScalerTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "executor": "CeleryExecutor",
+                "workers": {
+                    "keda": {"enabled": True},
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/workers/worker-kedaautoscaler.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
+
+class WorkerNetworkPolicyTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "networkPolicies": {"enabled": True},
+                "executor": "CeleryExecutor",
+                "workers": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/workers/worker-networkpolicy.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
+
+class WorkerServiceTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "executor": "CeleryExecutor",
+                "workers": {
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/workers/worker-service.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"
+
+
+class WorkerServiceAccountTest(unittest.TestCase):
+    def test_should_add_component_specific_labels(self):
+        docs = render_chart(
+            values={
+                "executor": "CeleryExecutor",
+                "workers": {
+                    "serviceAccount": {"create": True},
+                    "labels": {"test_label": "test_label_value"},
+                },
+            },
+            show_only=["templates/workers/worker-service.yaml"],
+        )
+
+        assert "test_label" in jmespath.search("metadata.labels", docs[0])
+        assert jmespath.search("metadata.labels", docs[0])["test_label"] == "test_label_value"