Eine PriorityClass ist ein clusterweites Kubernetes-Objekt, das Pods eine Prioritätsstufe zuweist. Je höher der Zahlenwert, desto wichtiger ist der Pod für den kube-scheduler, wenn um freie Ressourcen auf einem Kubernetes-Node konkurriert wird.

Aufbau einer PriorityClass

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
preemptionPolicy: PreemptLowerPriority
description: "Wichtige Produktions-Workloads"

Ein Pod referenziert die Klasse über priorityClassName in seiner Spezifikation. Mehrere Pods können dieselbe Klasse verwenden.

Verdrängung und Standardwerte

  • Findet der Scheduler für einen hochprioren Pod keinen freien Platz, verdrängt er Pods mit niedrigerer Priorität – diese werden zuerst graceful beendet.
  • Mit preemptionPolicy: Never deaktiviert man die Verdrängung: Der Pod wartet dann, bis Ressourcen frei werden.
  • Ist keine Klasse als globalDefault: true markiert, erhalten Pods ohne priorityClassName den Wert 0 und werden bei Engpässen zuerst verdrängt.

Reservierte System-Klassen

Kubernetes bringt zwei Klassen für unverzichtbare Systemkomponenten mit: system-cluster-critical (Wert 2000000000) und system-node-critical (Wert 2000001000). Anwendungs-Pods sollten diese Werte nicht verwenden, sonst können sie Komponenten wie CoreDNS oder kube-proxy verdrängen und das Cluster destabilisieren.

Zusammen mit Taints und Tolerations steuert die Prioritätsklasse, welche Workloads bei Engpässen zuerst laufen dürfen.

Verwandte Grundlagen: kube-scheduler, Kubernetes Deployment, Kubernetes ResourceQuota, Kubernetes LimitRange.