Wie können wir helfen?

Kubernetes PriorityClasses

← All Topics

Was sind PriorityClasses?

PriorityClasses werden von Kubernetes genutzt um die Priorität von Pods zu definieren. Jede Klasse hat einen eigenen Wert. Je höher dieser ist, desto wichtiger sind die Pods.

Je nach Definition der Klassen werden diese entweder priorisiert durch den Kubernetes Scheduler behandelt oder dürfen sogar niedriger priorisierte Pods beenden um zu starten. Sie werden relevant wenn im Cluster, z.B. durch einen Node Ausfall, zu wenig Ressourcen für alle Pods vorhanden sind.

Kubernetes bringt bereits zwei Klassen mit:

  • system-cluster-critical
  • system-node-critical

Diese Klassen haben die höchsten Prioritäten und werden für Cluster kritische Pods, wie CoreDNS und Storage (LocalPath oder Ceph), verwendet. Zusätzlich können weitere Klassen definiert werden.
Weitere Informationen zu PriorityClasses finden Sie in der Kubernetes-Dokumentation.

PriorityClasses bei Tralios

In von uns verwalteten Clustern stellen wir Ihnen die folgenden PriorityClasses zur Verfügung (von kritisch bis unkritisch aufgelistet):

  • tralios-critical: Von Tralios verwaltete, kritische Cluster Dienste, wie z.B. MetalLB und Traefik
  • customer-critical: Ihre Produktiv Services, die Sie Ihren Kunden bereitstellen
  • tralios-software: Von Tralios verwaltete Software die wir Ihnen bereitstellen, bspw. das Kubernetes Dashboard, Monitoring Lösungen oder andere Software, die wir für Sie betreiben
  • customer-high: Services die von Ihnen mit hoher Priorität betrieben werden
  • customer-medium: Services die von Ihnen mit mittlerer Priorität betrieben werden
  • customer-low: Services die von Ihnen mit niedriger Priorität betrieben werden
  • Wenn Sie keine PriorityClass setzen entspricht dies einer Priorität von 0

Wichtig: Die folgenden PriorityClasses dürfen niedriger priorisierte Dienste beenden um selbst zu starten: tralios-critical, customer-critical, tralios-software.

Wie verwenden Sie eine PriorityClass in Ihrem Deployment?

Sie können eine PriorityClass für Ihre Deployment folgendermaßen definieren:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-deployment
  namespace: default
spec:
  template:
    spec:
      containers:
      - name: test
        image: bash:latest
        imagePullPolicy: IfNotPresent
      priorityClassName: "customer-critical"