Configurazione dell’Horizontal Pod Autoscaling (HPA)

Questa pagina descrive in dettaglio la configurazione del sistema di autoscaling per i pod. L’autoscaling consente di regolare dinamicamente il numero di pod in base al carico (CPU e RAM).

Prerequisiti tecnici

Affinché l’HPA possa funzionare, devono essere soddisfatte le condizioni seguenti:

  1. Metrics-server: deve essere installato sul cluster (per esporre le metriche cpu e memory).

  2. Resource Requests: i pod devono avere requests e limits CPU/RAM definiti. Il calcolo della percentuale si basa su questi valori. Per i pod di Cyberwatch sono definiti valori predefiniti, che possono tuttavia essere modificati nel file values.yml.

Esempio di implementazione

Copiare questa configurazione nel file values.yml per attivare 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 di lavoro del pod container-scanner

Il pod container-scanner scarica le immagini da analizzare in un volume di lavoro, la cui dimensione è definita dal campo containerScanner.cacheStorageSize (40Gi per impostazione predefinita).

Con la versione 0.6.10 del chart Helm, ogni pod container-scanner dispone di un proprio volume, creato ed eliminato insieme al pod, quando sono soddisfatte entrambe le condizioni seguenti:

  • container-scanner fa parte dei target dell’autoscaling, oppure containerScanner.replicaCount è superiore a 1;
  • il campo global.storageClass è definito.

Lo spazio di archiviazione necessario viene moltiplicato per il numero di pod. Se la reclaimPolicy della StorageClass è impostata su Retain, i volumi dei pod eliminati vengono conservati e devono essere eliminati manualmente.

Utilizzare un volume condiviso

È anche possibile condividere uno stesso volume tra tutti i pod container-scanner, indicando un PersistentVolumeClaim esistente nel file values.yml:

containerScanner:
  existingClaim: nom-du-pvc

Affinché i pod possano essere eseguiti su più nodi, questo volume deve essere in ReadWriteMany.

L’analisi delle immagini si basa su Buildah in modalità rootless, il cui supporto dei file system di rete (NFS, CephFS, SMB) è limitato. La maggior parte dei volumi ReadWriteMany si basa su questi file system. A seconda dello storage utilizzato, i pod possono avviarsi mentre le analisi delle immagini non riescono. Verificare che un’analisi di immagine vada a buon fine prima di generalizzare questa configurazione.