diff --git a/infra/priority-classes/Chart.yaml b/infra/priority-classes/Chart.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a1448aa351eed2d5bf375d72509ad9be81b0eff0
--- /dev/null
+++ b/infra/priority-classes/Chart.yaml
@@ -0,0 +1,10 @@
+apiVersion: v1
+name: priority-classes
+version: 1.0.0
+appVersion: 1.0.0
+description: Kubernetes additional priority classes
+keywords:
+  - k8s
+  - priorityClass
+
+# https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/
diff --git a/infra/priority-classes/templates/00-priorityclass.yaml b/infra/priority-classes/templates/00-priorityclass.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a4b3b8b402032d60c01cbb0530fe8fb70548a98b
--- /dev/null
+++ b/infra/priority-classes/templates/00-priorityclass.yaml
@@ -0,0 +1,14 @@
+{{ $Dot := . }}
+{{- range .Values.priorityClasses }}
+apiVersion: scheduling.k8s.io/v1
+kind: PriorityClass
+metadata:
+  name: {{ .name }}
+  labels: 
+    {{- include "priority-classes.labels" $Dot | nindent 4 }}
+value: {{ .value }}
+globalDefault: {{ .globalDefault | default false }}
+description: {{ .description | quote }}
+
+---
+{{- end }}
diff --git a/infra/priority-classes/templates/_helpers.tpl b/infra/priority-classes/templates/_helpers.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..8394834be1ded4820b62a1ef5db1d6a5f9de3907
--- /dev/null
+++ b/infra/priority-classes/templates/_helpers.tpl
@@ -0,0 +1,62 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "priority-classes.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "priority-classes.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "priority-classes.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "priority-classes.labels" -}}
+helm.sh/chart: {{ include "priority-classes.chart" . }}
+{{ include "priority-classes.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "priority-classes.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "priority-classes.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "priority-classes.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "priority-classes.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/infra/priority-classes/upgrade.sh b/infra/priority-classes/upgrade.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ee03a6b41570eb39f46f9d3ece17b8d3790ce060
--- /dev/null
+++ b/infra/priority-classes/upgrade.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+../helm-upgrade.sh priority-classes kube-system
diff --git a/infra/priority-classes/values.yaml b/infra/priority-classes/values.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8403a970b13b2517b7d815d077e378dd505846ff
--- /dev/null
+++ b/infra/priority-classes/values.yaml
@@ -0,0 +1,13 @@
+priorityClasses:
+  - name: infra-critical
+    value: "1000000"
+    globalDefault: false
+    description: "This priority class should be used for critical infra components."
+  - name: infra-monitoring
+    value: "950000"
+    globalDefault: false
+    description: "This priority class should be used for infra monitoring components."
+  - name: infra-addon
+    value: "900000"
+    globalDefault: false
+    description: "This priority class should be used for infra addon components."
diff --git a/infra/priority-classes/values.yaml.secret b/infra/priority-classes/values.yaml.secret
new file mode 100644
index 0000000000000000000000000000000000000000..b5826d5462871e76bc1bb2238991fd6eec4ea9ac
Binary files /dev/null and b/infra/priority-classes/values.yaml.secret differ