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: Neverdeaktiviert man die Verdrängung: Der Pod wartet dann, bis Ressourcen frei werden. - Ist keine Klasse als
globalDefault: truemarkiert, erhalten Pods ohnepriorityClassNameden 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.