Aller au contenu

Internal

Priority classes

Une priority class fixe l'ordre de passage des pods quand un nœud manque de place :

  • Préemption : un pod en attente évince des pods de priorité plus basse pour se placer, avant même que l'autoscaler ajoute un nœud.
  • Éviction : quand un nœud manque de mémoire, le kubelet évince d'abord les pods de priorité basse.

Classes disponibles

Créées dans les trois clusters (service, horsprod, prod).

Classe Valeur Usage
system-node-critical 2000001000 Native Kubernetes : composants sans lesquels un nœud ne fonctionne pas (Cilium, CSI)
system-cluster-critical 2000000000 Native Kubernetes : composants essentiels au cluster (CoreDNS)
platform-critical 1000000 Composants de plateforme critiques (Traefik)
platform-high 900000 Composants de plateforme importants (Vault, FA)
app-critical 500000 Applications critiques (ArgoCD, cert-manager, DPE, Instana)
app-high 400000 Applications prioritaires (Opale, Alfresco…)
app-medium 300000 Applications standard (Adere, librairie…)
app-low 200000 Applications secondaires (Kubecost…)
(aucune) 0 Pods sans priorityClassName : préemptés en premier

Pas de classe par défaut

Aucune classe n'est globalDefault. Un pod non classé a la priorité 0, en dessous de app-low.

Les deux classes system-* sont réservées aux composants du cluster : ne pas les utiliser pour une application.

Utiliser une classe

Dans le pod (ou les values Helm, selon le chart) :

priorityClassName: app-high

La valeur ne s'applique qu'aux pods créés après la modification : un rollout est nécessaire.

Ajouter ou modifier une classe

  1. Modifier k8s_definition.priority_classes dans main-infra/scw-init-config/001.config_infrastructure/terraform.tfvars, puis appliquer.
  2. Appliquer 010.kapsule dans chaque environnement (priority_classes.tf).

Vérifier

kubectl get priorityclass
kubectl get pods -A -o custom-columns=NS:.metadata.namespace,POD:.metadata.name,PRIO:.spec.priorityClassName