Configuración del Horizontal Pod Autoscaling (HPA)

Esta pagina detalla la configuración del sistema de autoscaling para los pods. El autoscaling permite ajustar dinamicamente el numero de pods según la carga (CPU y RAM).

Requisitos técnicos

Para que el HPA funcione, deben cumplirse las condiciones siguientes:

  1. Metrics-server: debe estar instalado en el cluster (para exponer las metricas cpu y memory).

  2. Resource Requests: sus pods deben tener requests y limits de CPU/RAM definidos. El calculo del porcentaje se basa en estos valores. Se definen valores por defecto para los pods de Cyberwatch, pero pueden ajustarse en el archivo values.yml.

Ejemplo de implementación

Copie esta configuración en su archivo values.yml para activar el autoscaling:

autoscaling:
  # Activa o desactiva el autoscaling de recursos para el cluster
  enabled: true
  
  targets:
    - name: sidekiq-node
      minReplicas: 1      # Numero de pods mantenidos en vida incluso sin actividad
      maxReplicas: 5      # Limite del numero de pods que el autoscaling puede crear
      targetCPUUsage: 70  # Desencadena un nuevo pod si la media de uso de CPU supera el 70%
      targetRAMUsage: 80  # Desencadena un nuevo pod si la media de uso de RAM supera el 80%

    - name: container-scanner
      minReplicas: 1
      maxReplicas: 10
      targetCPUUsage: 70
      targetRAMUsage: 80

Volumen de trabajo del pod container-scanner

El pod container-scanner descarga las imágenes a analizar en un volumen de trabajo, cuyo tamaño se define en el campo containerScanner.cacheStorageSize (40Gi por defecto).

Con la versión 0.6.10 del chart Helm, cada pod container-scanner dispone de su propio volumen, creado y eliminado con el pod, cuando se cumplen las dos condiciones siguientes:

  • container-scanner forma parte de los objetivos del autoscaling, o containerScanner.replicaCount es mayor que 1;
  • el campo global.storageClass está definido.

El espacio de almacenamiento necesario se multiplica por el número de pods. Si la reclaimPolicy del StorageClass vale Retain, los volúmenes de los pods eliminados se conservan y deben eliminarse manualmente.

Utilizar un volumen compartido

También es posible compartir un mismo volumen entre todos los pods container-scanner, indicando un PersistentVolumeClaim existente en el archivo values.yml:

containerScanner:
  existingClaim: nom-du-pvc

Para que los pods puedan ejecutarse en varios nodos, este volumen debe estar en ReadWriteMany.

El análisis de las imágenes se basa en Buildah en modo rootless, cuyo soporte de los sistemas de archivos de red (NFS, CephFS, SMB) es limitado. La mayoría de los volúmenes ReadWriteMany se basan en estos sistemas de archivos. Según el almacenamiento utilizado, los pods pueden arrancar aunque los análisis de imágenes fallen. Verifique que un análisis de imagen se completa antes de generalizar esta configuración.