Kubernetes - Priority Class

La priority class indique l’importance d’un pod par rapport à un autre.
Si un pod ne peut pas être schedulé, le scheduler peut “éjecter” un pod avec une priorité basse.
Attention un utilisateur malicieu pourrait créer des pods avec un priorité haute, pour limiter cela il est possible de restreindre avec le Resource Quota, Limit Range, ClusterRole, Kyverno …..
La priority class va permettre de prioriser des pods critiques par rapport à d’autres (Node > Cluster > applications).
Si le déploiement impose une éviction de pod, Kubernetes choisira le pod avec la priorityClass la plus basse, et au sein de la même priorityClass, c’est la QoS du pod qui permettra de choisir le pod à évincer.

Configuration

high-priority-priorityclass-definition.yaml

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for XYZ service pods only."

Note : preemptionPolicy: (Optional) Specifies whether Pods with lower priority can be preempted by Pods with this PriorityClass. Valid values are PreemptLowerPriority (default) and Never.
Kubernetes permet de définir une seule PriorityClass avec globalDefault: true, qui sera appliquée si la définition du pod ne l’indique pas.
S’il n’y a pas de globalDefault → priorité 0, priorityClassName reste vide.

Utilisation avec un pod pod-definition.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  priorityClassName: high-priority
  containers:
  - image: nginx
    name: nginx

Si aucune priorityClassName n’est spécifiée, le pod reçoit la priorité 0 — ce qui correspond à la PriorityClass default si elle existe, sinon simplement valeur 0.

Commandes

Lister les PriorityClass

kubectl get priorityclass

Lister les tous les pods avec leur PriorityClass

kubectl get pods -A -ocustom-columns=NAME:.metadata.name,PRIORITY:.spec.priority,CLASS:.spec.priorityClassName
NAME                               PRIORITY     CLASS
coredns-7db6d8ff4d-d26t7           2000000000   system-cluster-critical
etcd-minikube                      2000001000   system-node-critical
kube-apiserver-minikube            2000001000   system-node-critical
kube-controller-manager-minikube   2000001000   system-node-critical
kube-proxy-hf9nc                   2000001000   system-node-critical
kube-scheduler-minikube            2000001000   system-node-critical
storage-provisioner                0            <none>
inspector                          0            <none>

Annexe

Article sur les PriorityClasses Pod Priority and Preemption: A Complete Guide