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:
Metrics-server: deve essere installato sul cluster (per esporre le metriche
cpuememory).Resource Requests: i pod devono avere
requestselimitsCPU/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 filevalues.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-scannerfa parte dei target dell’autoscaling, oppurecontainerScanner.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.