Un chart de Helm listo para producción para desplegar Radarr con PostgreSQL en Kubernetes. Esta solución proporciona un despliegue robusto, escalable y persistente adecuado para entornos en la nube.
- 📦 Chart de Helm Completo: Encapsula todos los recursos necesarios de Kubernetes
- 💾 Persistencia de Datos: PostgreSQL y la configuración de Radarr utilizan PersistentVolumeClaims (PVCs)
- 🔒 Configuración Segura: Credenciales sensibles gestionadas con Secrets de Kubernetes
- 🚀 Alta Disponibilidad: Despliegue multi-réplica para garantizar disponibilidad
- 📈 Auto-escalado: HorizontalPodAutoscaler ajusta las réplicas según el uso de CPU
- 🌐 Acceso Externo: Controlador Ingress con soporte para dominio personalizado
- 🏥 Verificaciones de Salud: Sondas de liveness y readiness aseguran que el tráfico solo vaya a pods saludables
- 📚 Documentación Completa: Guía de instalación, configuración y gestión
Antes de comenzar, asegúrate de tener las siguientes herramientas instaladas:
- Minikube: Clúster de Kubernetes de dos nodos para desarrollo local
- kubectl: Herramienta de línea de comandos de Kubernetes
- Helm: Gestor de paquetes de Kubernetes
- Docker
- Git
# Iniciar Minikube
minikube start --nodes 2
# Instalar kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# Instalar Helm
curl -fsSL https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz | tar -xz
sudo mv linux-amd64/helm /usr/local/bin/helm
# Habilitar addons necesarios
minikube addons enable metrics-server
minikube addons enable ingressgit clone https://github.com/jpalenz77/Practica_Kubernetes
cd Practica_Kubernetess# Instalar con contraseña personalizada de base de datos
helm install k8s-practica . --set database.password=TuContraseñaSegura
# Para desplegar en un namespace a elección
helm install k8s-practica ./ -n nombrenamespace --create-namespace --set database.password=TuContraseñaSegurahelm install k8s-practica . \
--set replicaCount=3 \
--set database.storage=10Gi \
--set persistence.downloads.storage=100Gi \
--set database.password=MiContraseñaSegura123kubectl port-forward svc/k8s-practica-radarr-chart 7878:7878Luego abre tu navegador en: http://localhost:7878
Nota: Este es el método más confiable para acceder a la aplicación en entornos de desarrollo local.
Si aún deseas intentar con Ingress, actualiza values.yaml:
ingress:
enabled: true
host: "radarr.practica.local"Luego:
# Actualizar el chart
helm upgrade k8s-practica . --set database.password=TuContraseñaSegura
# Iniciar túnel de Minikube (en una terminal separada)
minikube tunnel
# Añadir al archivo hosts en la ruta (si usas Windows) C:\Windows\System32\drivers\etc\hosts
127.0.0.1 radarr.practica.local
# Intentar acceder en el navegador (puede fallar o dar error de conexión con la API de Radarr)
http://radarr.practica.localProblemas conocidos con Ingress en Minikube:
- La red virtualizada de Minikube puede causar problemas de enrutamiento
- Conflictos con la gestión de cookies y sesiones
- Latencia adicional que puede afectar la funcionalidad de la aplicación
- En entornos de producción (clusters reales), Ingress funciona correctamente
| Parámetro | Descripción | Valor por Defecto |
|---|---|---|
replicaCount |
Número de réplicas de Radarr | 2 |
database.storage |
Tamaño del volumen de PostgreSQL | 5Gi |
persistence.config.storage |
Tamaño del volumen de configuración de Radarr | 10Gi |
persistence.downloads.storage |
Tamaño del volumen de descargas de Radarr | 50Gi |
autoscaling.enabled |
Habilitar auto-escalado | true |
autoscaling.targetCPUUtilizationPercentage |
Umbral de CPU para escalar | 70 |
ingress.enabled |
Habilitar Ingress | false |
ingress.host |
Dominio de la aplicación | radarr.practica.local |
Personaliza tu despliegue editando values.yaml o usando etiquetas con --set:
helm install k8s-practica . \
--set replicaCount=3 \
--set database.storage=10Gi \
--set persistence.downloads.storage=100Gi \
--set database.password=MiContraseñaSegura123radarr-chart/
├── Chart.yaml # Metadatos del chart
├── values.yaml # Configuración por defecto
├── templates/
│ ├── _helpers.tpl # Funciones auxiliares de plantillas
│ ├── hpa.yaml # HorizontalPodAutoscaler
│ ├── postgres-statefulset.yaml # StatefulSet de PostgreSQL
│ ├── postgres-service.yaml # Service de PostgreSQL
│ ├── postgres-initdb-configmap.yaml # ConfigMap para inicialización de bases de datos
│ ├── radarr-deployment.yaml # Deployment de Radarr
│ ├── radarr-service.yaml # Service de Radarr
│ ├── radarr-pvc.yaml # PersistentVolumeClaims de Radarr
│ ├── radarr-ingress.yaml # Configuración de Ingress
│ ├── radarr-config-configmap.yaml # ConfigMap con config.xml de Radarr
│ └── secrets.yaml # Secrets de Kubernetes
└── README.md # Esta documentación
Radarr requiere dos bases de datos separadas en PostgreSQL:
radarr-main: Almacena toda la configuración e historialradarr-log: Almacena eventos que producen entradas de log
La configuración de PostgreSQL se gestiona automáticamente mediante:
- ConfigMap de inicialización (
postgres-initdb-configmap.yaml): Crea las bases de datos automáticamente - ConfigMap de configuración Radarr (
radarr-config-configmap.yaml): Configura Radarr para usar PostgreSQL - InitContainers: Aseguran el orden correcto de inicialización
# Verificar todos los recursos
kubectl get all -l app.kubernetes.io/instance=k8s-practica
# Ver logs de componentes específicos
kubectl logs deployment/k8s-practica-radarr-chart -c radarr
kubectl logs postgres-statefulset-0
# Verificar estado del auto-escalado
kubectl get hpahelm upgrade k8s-practica . --set database.password=NuevaContraseñakubectl scale deployment k8s-practica-radarr-chart --replicas=4helm uninstall k8s-practicaPod atascado en estado Pending:
kubectl describe pod <nombre-pod>
# Verificar problemas de clase de almacenamiento o restricciones de recursosNo se puede acceder vía Ingress:
# Verificar que el controlador ingress esté funcionando
kubectl get pods -n ingress-nginx
# Verificar configuración de ingress
kubectl describe ingress k8s-practica-radarr-chartProblemas de conexión a base de datos:
# Verificar logs de PostgreSQL
kubectl logs postgres-statefulset-0
# Verificar que las bases de datos se crearon correctamente
kubectl exec -it postgres-statefulset-0 -- psql -U radarr -d postgres -c "\l"
# Verificar configuración de Radarr
kubectl exec -it <radarr-pod-name> -- cat /config/config.xmlError "failed to load tags from api":
- Este error indica problemas de conectividad con la base de datos
- Verificar que PostgreSQL esté funcionando y que las bases de datos existan
- Comprobar que el archivo
config.xmlcontiene la configuración PostgreSQL correcta
Incompatibilidad de versiones:
# Si aparece error de versiones incompatibles, limpiar datos:
helm uninstall k8s-practica
kubectl delete pvc postgres-data-postgres-statefulset-0 --force
# Reinstalar desde ceroVerificar configuración de bases de datos:
# Conectar a PostgreSQL y verificar bases de datos
kubectl exec -it postgres-statefulset-0 -- psql -U radarr -d radarr-main -c "SELECT 1;"
kubectl exec -it postgres-statefulset-0 -- psql -U radarr -d radarr-log -c "SELECT 1;"# Observar estado de pods
kubectl get pods -w
# Monitorear uso de recursos
kubectl top pods
# Verificar eventos del cluster
kubectl get events --sort-by=.metadata.creationTimestamp | tail -20
# Verificar configuración específica de Radarr
kubectl logs deployment/k8s-practica-radarr-chart -c setup-config# Logs del InitContainer de configuración
kubectl logs <radarr-pod-name> -c setup-config
# Logs del InitContainer de espera de PostgreSQL
kubectl logs <radarr-pod-name> -c wait-for-postgres
# Logs principales de Radarr
kubectl logs <radarr-pod-name> -c radarr --tail=50
# Logs de PostgreSQL
kubectl logs postgres-statefulset-0 -fhttps://wiki.servarr.com/radarr/postgres-setup
Radarr se configura mediante un archivo config.xml que se genera automáticamente con la configuración PostgreSQL correcta. La configuración incluye:
<PostgresUser>radarr</PostgresUser>
<PostgresPassword>TuContraseñaSegura</PostgresPassword>
<PostgresPort>5432</PostgresPort>
<PostgresHost>postgres-service</PostgresHost>
<PostgresMainDb>radarr-main</PostgresMainDb>
<PostgresLogDb>radarr-log</PostgresLogDb>El deployment utiliza dos InitContainers:
- setup-config: Configura el archivo
config.xmlcon la configuración PostgreSQL - wait-for-postgres: Espera a que PostgreSQL esté disponible antes de iniciar Radarr
- PostgreSQL: Usa StatefulSet con volumeClaimTemplates para persistencia automática
- Radarr: Usa PersistentVolumeClaims para configuración y descargas
⭐ ¡Si este proyecto te gusta, por favor dale una estrella!
