Configuration de l’Horizontal Pod Autoscaling (HPA)
Cette page détaille la configuration du système d’autoscaling pour les pods. L’autoscaling permet d’ajuster dynamiquement le nombre de pods en fonction de la charge (CPU et RAM).
Prérequis techniques
Pour que l’HPA puisse fonctionner, les conditions suivantes doivent être réunies :
Metrics-server : Doit être installé sur le cluster (pour exposer les métriques
cpuetmemory).Resource Requests : Vos pods doivent avoir des
requestsetlimitsCPU/RAM définies. Le calcul du pourcentage se base sur ces valeurs. Des valeurs par défaut sont définies pour les pods de Cyberwatch, mais elles peuvent être ajustées dans le fichiervalues.yml.
Exemple d’implémentation
Copiez cette configuration dans votre fichier values.yml pour activer l’autoscaling :
autoscaling:
# Active ou désactive l'autoscaling des ressources pour le cluster
enabled: true
targets:
- name: sidekiq-node
minReplicas: 1 # Nombre de pods maintenus en vie même sans activité
maxReplicas: 5 # Limite du nombre de pods que l'autoscaling peut créer
targetCPUUsage: 70 # Déclenche un nouveau pod si la moyenne d'utilisation CPU dépasse 70%
targetRAMUsage: 80 # Déclenche un nouveau pod si la moyenne d'utilisation RAM dépasse 80%
- name: container-scanner
minReplicas: 1
maxReplicas: 10
targetCPUUsage: 70
targetRAMUsage: 80
Volume de travail du pod container-scanner
Le pod container-scanner télécharge les images à analyser dans un volume de travail, dont la taille est définie par le champ containerScanner.cacheStorageSize (40Gi par défaut).
Avec la version 0.6.10 du chart Helm, chaque pod container-scanner dispose de son propre volume, créé et supprimé avec le pod, lorsque les deux conditions suivantes sont réunies :
container-scannerfait partie des cibles de l’autoscaling, oucontainerScanner.replicaCountest supérieur à 1 ;- le champ
global.storageClassest défini.
L’espace de stockage nécessaire est multiplié par le nombre de pods. Si la reclaimPolicy du StorageClass vaut Retain, les volumes des pods supprimés sont conservés et doivent être supprimés manuellement.
Utiliser un volume partagé
Il est aussi possible de partager un même volume entre tous les pods container-scanner, en indiquant un PersistentVolumeClaim existant dans le fichier values.yml :
containerScanner:
existingClaim: nom-du-pvc
Pour que les pods puissent s’exécuter sur plusieurs nœuds, ce volume doit être en ReadWriteMany.
L’analyse des images repose sur Buildah en mode rootless, dont le support des systèmes de fichiers réseau (NFS, CephFS, SMB) est limité. La plupart des volumes ReadWriteMany reposent sur ces systèmes de fichiers. Selon le stockage utilisé, les pods peuvent démarrer alors que les analyses d’images échouent. Vérifier qu’une analyse d’image aboutit avant de généraliser cette configuration.