Core · Helm Chart
Despliegue de RavHub Core con Helm
Cuándo elegir esta opción
Usa esta guía si ya operas sobre Kubernetes y quieres gestionar RavHub con Helm.
Prerrequisitos
- cluster Kubernetes disponible
- Helm operativo
- una
StorageClasso PVC compatible - credenciales de pull para
registry.ravhub.appsi tu registro las requiere
Imagen y selección de edición
- registro:
registry.ravhub.app - edición Core:
ravhub-core - tag recomendado en esta guía:
0.1.0 - edición Core por chart:
license.enabled=false
Pasos exactos
1. Crear el namespace
bash
kubectl create namespace ravhub2. Añadir el repositorio Helm e inspeccionar los valores por defecto
bash
helm repo add ravhub https://repo.ravhub.app/repository/ravhub-charts
helm repo update
helm show values ravhub/ravhub > values.yaml3. Editar el fichero de values
Partiendo del values.yaml que descargaste, edita los campos necesarios para tu despliegue.
Valores que puedes dejar por defecto
yaml
license:
enabled: false
storage:
type: filesystem
postgresql:
enabled: true
redis:
enabled: false
service:
type: ClusterIPValores que deberías revisar siempre
| Campo | Descripción |
|---|---|
image.tag | Versión a desplegar (ej: 0.1.0) |
auth.jwt.secret | Cambiarlo por un valor secreto |
ingress.hosts[].host | Tu dominio público |
persistence.size | Espacio para artefactos |
api.host | Tu dominio público para URLs en la UI |
4. Instalar el release
bash
helm install ravhub ravhub/ravhub \
--namespace ravhub \
-f values-core.yaml5. Verificar el despliegue
bash
helm ls -n ravhub
kubectl get pods -n ravhub
kubectl get ingress -n ravhubTabla de values
Global
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
global.imageRegistry | string | "" | registro OCI | Sobrescribe el registry de TODAS las imágenes (RavHub + subcharts). |
replicaCount | integer | 1 | 1+ | Número de pods. Si subes de 1, usa Redis y storage compartido. |
Edición e imagen
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
image.registry | string | registry.ravhub.app | registry OCI | Registry de las imágenes RavHub. |
image.repository | string | ravhub-core | nombre de repo | Imagen usada cuando license.enabled=false. |
image.enterpriseRepository | string | ravhub-enterprise | nombre de repo | Reservado para Enterprise. En Core no se usa. |
image.pullPolicy | string | IfNotPresent | IfNotPresent, Always, Never | Política de pull de Kubernetes. |
image.tag | string | 0.1.0 | tag OCI | Versión exacta a desplegar. |
imagePullSecrets | array | [] | lista de secrets | Secrets de pull si el registro requiere autenticación. |
license.enabled | boolean | false | true, false | Debe quedarse en false para Core. |
license.key | string | "" | clave de licencia | No se usa en Core. |
Service e ingress
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
service.type | string | ClusterIP | ClusterIP, NodePort, LoadBalancer | Tipo de Service principal. |
service.port | integer | 80 | puerto TCP | Puerto HTTP del Service. |
service.targetPort | integer | 80 | puerto TCP | Puerto HTTP del contenedor al que apunta el Service. |
service.apiPort | integer | 3000 | puerto TCP | Puerto de la API interna expuesto por el Service. |
service.annotations | map | {} | annotations de Service | Útil para LB cloud o integración con red. |
ingress.enabled | boolean | true | true, false | Activa o desactiva el Ingress. |
ingress.className | string | nginx | clase de ingress | Clase de Ingress Controller. |
ingress.annotations | map | varias de NGINX | annotations | Incluye por defecto proxy-body-size: 0 y ajustes para uploads. |
ingress.hosts | array | ravhub.local | lista de hosts/path rules | Host y paths públicos de la UI y API. |
ingress.hosts[].paths[].path | string | `/api(/ | $)(.)y/()(.)` | path regex |
ingress.hosts[].paths[].pathType | string | ImplementationSpecific | ImplementationSpecific, Prefix, Exact | Tipo de path en Kubernetes. |
ingress.tls | array | [] | lista de secretName y hosts | Entradas TLS del Ingress. Si está vacío, no se publica TLS desde el chart. |
JWT y autenticación
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
auth.jwt.secret | string | "" | texto | Si lo dejas vacío, el chart genera uno y lo conserva en el secret del release. |
auth.jwt.expiresIn | string | 1h | duración JWT | Caducidad del access token. |
auth.jwt.refreshExpiresIn | string | 7d | duración JWT | Caducidad del refresh token. |
Docker registry embebido
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
docker.ports.enabled | boolean | true | true, false | Expone el rango dinámico para repos Docker. |
docker.ports.startPort | integer | 5001 | puerto TCP | Inicio del rango Docker. |
docker.ports.endPort | integer | 5100 | puerto TCP | Fin del rango Docker. |
Persistencia y storage
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
persistence.enabled | boolean | true | true, false | Activa el PVC de artefactos. |
persistence.storageClass | string | "" | nombre de class | Si se deja vacío, Kubernetes usa la default. |
persistence.accessMode | string | ReadWriteOnce | ReadWriteOnce, ReadWriteMany, etc. | Modo de acceso del PVC. |
persistence.size | string | 50Gi | tamaño Kubernetes | Tamaño del volumen de artefactos. |
persistence.mountPath | string | /data/storage | ruta absoluta | Mount path que RavHub usa como STORAGE_PATH. |
storage.type | string | filesystem | filesystem, s3, gcs, azure | En Core debe quedarse en filesystem. |
storage.filesystem.path | string | /data/storage | ruta absoluta | Ruta lógica del backend filesystem. |
storage.s3.* | object | vacíos | valores S3 | No válido en Core; requiere Enterprise. |
storage.gcs.* | object | vacíos | valores GCS | No válido en Core; requiere Enterprise. |
storage.azure.* | object | vacíos | valores Azure | No válido en Core; requiere Enterprise. |
PostgreSQL
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
postgresql.enabled | boolean | true | true, false | Despliega PostgreSQL integrado con subchart Bitnami. |
postgresql.primary.persistence.enabled | boolean | true | true, false | Persistencia del PostgreSQL embebido. |
postgresql.primary.persistence.size | string | 8Gi | tamaño Kubernetes | Tamaño del volumen del PostgreSQL embebido. |
postgresql.auth.username | string | postgres | texto | Usuario del PostgreSQL embebido. |
postgresql.auth.database | string | ravhub | texto | Base de datos del PostgreSQL embebido. |
postgresql.auth.password | string | "" | texto | Si lo dejas vacío, el subchart o secret resuelve el valor. |
externalDatabase.host | string | "" | hostname | Obligatorio cuando postgresql.enabled=false. |
externalDatabase.port | integer | 5432 | puerto TCP | Puerto del PostgreSQL externo. |
externalDatabase.user | string | postgres | texto | Usuario del PostgreSQL externo. |
externalDatabase.database | string | ravhub | texto | Base de datos del PostgreSQL externo. |
externalDatabase.password | string | "" | texto | Obligatorio si no usas existingSecret. |
externalDatabase.existingSecret | string | "" | nombre de secret | Si lo defines, el chart lee la clave password. |
Redis
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
redis.enabled | boolean | false | true, false | Despliega Redis embebido. |
redis.architecture | string | standalone | standalone, replication | Modo del subchart Redis. |
redis.auth.enabled | boolean | true | true, false | Protege Redis con password. |
redis.auth.password | string | "" | texto | Si se deja vacío, se genera. |
redis.master.persistence.enabled | boolean | false | true, false | Persistencia para Redis embebido. |
redis.master.persistence.size | string | 1Gi | tamaño Kubernetes | Tamaño del PVC de Redis. |
externalRedis.host | string | "" | hostname | Redis externo si no usas el embebido. |
externalRedis.port | integer | 6379 | puerto TCP | Puerto del Redis externo. |
externalRedis.password | string | "" | texto | Password del Redis externo. |
externalRedis.db | integer | 0 | entero | Base lógica de Redis. |
externalRedis.existingSecret | string | "" | nombre de secret | Si lo defines, el chart lee la clave password. |
API pública (URLs en la UI)
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
api.host | string | "" | hostname | Dominio público para los comandos de instalación en la UI. |
api.protocol | string | https | http, https | Protocolo para los comandos de instalación. |
Recursos y scheduling
| Campo | Tipo | Default | Opciones | Uso |
|---|---|---|---|---|
env.LOG_FORMAT | string | json | json, otros | Formato de logs de la aplicación. |
resources.limits.cpu | string | 2000m | CPU Kubernetes | Límite de CPU. |
resources.limits.memory | string | 2Gi | memoria Kubernetes | Límite de memoria. |
resources.requests.cpu | string | 500m | CPU Kubernetes | Request de CPU. |
resources.requests.memory | string | 1Gi | memoria Kubernetes | Request de memoria. |
serviceAccount.create | boolean | true | true, false | Crea o no un ServiceAccount dedicado. |
serviceAccount.annotations | map | {} | annotations | Metadata adicional del ServiceAccount. |
serviceAccount.name | string | "" | nombre | Si se deja vacío, Helm autogenera uno. |
podAnnotations | map | metrics annotations | annotations | Añade annotations al pod, por defecto métricas Prometheus. |
autoscaling.enabled | boolean | false | true, false | Activa HPA. |
autoscaling.minReplicas | integer | 1 | entero | Réplicas mínimas del HPA. |
autoscaling.maxReplicas | integer | 100 | entero | Réplicas máximas del HPA. |
autoscaling.targetCPUUtilizationPercentage | integer | 80 | porcentaje | Umbral de CPU para HPA. |
nodeSelector | map | {} | selector labels | Fija nodos destino. |
tolerations | array | [] | tolerations | Permite scheduling en nodos tainted. |
affinity | map | {} | reglas affinity | Afinidad o anti-afinidad de pods. |
Reglas y dependencias
license.enabled=falsemantiene la edición Core.- Si
postgresql.enabled=false, debes definirexternalDatabase.host. - Si
postgresql.enabled=false, debes definirexternalDatabase.passwordoexternalDatabase.existingSecret. - Si
storage.typeno esfilesystem, el chart falla porque ese backend requiere Enterprise. - Si dejas
auth.jwt.secretvacío, el chart genera uno y lo guarda en el secret del release. - Si subes
replicaCountpor encima de1, el propio chart recomienda Redis y storage compartido o cloud.
Cómo validar que funciona
- todos los pods están en
RunningoCompleted - el
Ingresspublica el dominio esperado - la UI abre en el host configurado
- la instalación arranca como Core, no como Enterprise
Errores frecuentes
El chart instala pero la UI no abre
Revisa ingress.enabled, ingress.className y el host definido en ingress.hosts.
Los pods reinician por autenticación o sesiones inválidas
Revisa auth.jwt.secret.
El PVC no se enlaza
Revisa persistence.enabled, persistence.size y la StorageClass del cluster.
El release sale como Enterprise
Revisa que license.enabled siga en false.
Siguiente paso
Continúa con Uso desde clientes.