Funcionalidades de StackGres 1.6 para la gestión de bases de datos
StackGres 1.6 ofrece una plataforma integral para bases de datos PostgreSQL en entornos Kubernetes, enfocada en la automatización y la facilidad de operación mediante recursos personalizados (CRDs). A continuación, se describen sus principales características técnicas.
Gestión declarativa con CRDs de Kubernetes
El operador de StackGres se administra exclusivamente a través de Custom Resource Definitions (CRDs) en Kubernetes. No se requieren herramientas adicionales más allá de kubectl o la API de Kubernetes. Las solicitudes se definen en la sección spec de los CRDs, y los resultados se reflejan en el campo status del recurso en el clúster.
Los CRDs de StackGres están diseñados para abstraer la complejidad de PostgreSQL, permitiendo que los usuarios que conocen cómo usar kubectl y definir CRDs puedan operar bases de datos como expertos. Esta aproximación permite definir clústeres como código infraestructural (IaC), versionado en Git, facilitando la gestión mediante GitOps. Consulte la referencia de CRDs para más detalles.
Configuración predeterminada optimizada
StackGres incluye una configuración inicial de PostgreSQL cuidadosamente ajustada por el equipo de DBAs de OnGres, lo que permite un rendimiento adecuado sin requerir conocimientos avanzados. Para personalizaciones adicionales, los usuarios pueden crear configuraciones mediante el CRD SGPostgresConfig y referenciarlas en sus clústeres.
Personalización completa del entorno
StackGres se basa en PostgreSQL estándar sin restricciones. Los usuarios tienen acceso completo al usuario postgres (equivalente a root en PostgreSQL) y pueden personalizar componentes mediante CRDs validados, evitando errores comunes con ConfigMaps. Esto incluye ajustes de configuración de PostgreSQL, servicios de Kubernetes, etiqeutas de pods y tolerancias de nodos.
Alta disponibilidad integrada
StackGres integra Patroni, una solución probada en producción para alta disponibilidad en PostgreSQL. Si un pod o nodo falla, el clúster ejecuta una conmutación por error automática en segundos sin intervención manual. Las aplicaciones acceden a través de servicios de Kubernetes que exponen una conexión de lectura/escritura (principle) y otra de solo lectura (réplica), actualizándose automáticamente tras interrupciones.
Respaldo automatizado con recuperación temporal
El sistema incluye backups basados en archivado continuo, permitiendo recuperación sin pérdida de datos y restauración a un punto en el tiempo (PITR). Los backups se almacenan automáticamente en almacenamiento de objetos como Amazon S3, Google Cloud Storage, Azure Blob o MinIO. Los usuarios proporcionan credenciales y políticas de retención, y StackGres automatiza el resto. También es posible crear backups manuales mediante archivos YAML.
Pool de conexiones del lado del servidor
Para mitigar el impacto del modelo de procesos de PostgreSQL, StackGres despliega PgBouncer como un contenedor sidecar. Esto controla el flujo de conexiones hacia PostgreSQL, evitando sobrecargas que afecten el rendimiento. Las métricas del pool se exportan a Prometheus y se visualizan en dashboards de Grafana integrados en la consola web.
Logs distribuidos centralizados
StackGres centraliza los logs de PostgreSQL y Patroni mediante FluentBit y Fluentd, enviándolos a una base de datos dedicada mejorada con TimescaleDB para alto volumen y retención de logs. Los usuarios pueden consultar logs mediante SQL o a través de la consola web con funciones de búsqueda y filtrado.
Observabilidad avanzada con métricas
La plataforma utiliza un sidecar de Envoy para interceptar el tráfico de PostgreSQL, generando métricas adicionales mediante un filtro especializado para Envoy. Estas métricas se integran con Prometheus, y StackGres proporciona dashboards y alertas predefinidos en Grafana.
Consola web de administración
StackGres ofrece una interfaz web para gestionar clústeres, con funcionalidades equivalentes a las CRDs y kubectl. Se puede exponer mediante LoadBalancer u otros mecanismos de Kubernetes, con autenticación por RBAC o SSO. Incluye una API REST para mayor flexibilidad.
Operaciones de día 2
El operador gestiona actualizaciones de versiones de PostgreSQL, actualizaciones de contenedores, reinicios controlados, operaciones de vacuum y repack de manera declarativa y segura. Los cambios se aplican considerando la preparación para producción, por ejemplo, ejecutando reinicios de forma controlada para mantener la disponibilidad.
Modos avanzados de replicación
StackGres soporta replicación asíncrona, síncrona y de grupo, además de replicación en cascada y clústeres de reserva en clústeres de Kubernetes separados para recuperación ante desastres.
Soporte para extensiones de PostgreSQL
La plataforma soporta más de 150 extensiones de PostgreSQL, que se pueden cargar dinámicamente en los pods del clúster, convirtiendo a StackGres en una de las plataformas con mayor soporte de extensiones.
Guía de inicio rápido
Para instalar StackGres 1.6 en un clúster de Kubernetes y crear una instancia de PostgreSQL, siga estos pasos. Asegúrese de tener configurado kubectl en su entorno de K8s.
Instalación del operador
Ejecute el siguiente comando para desplegar el operador en el espacio de nombres stackgres-ns:
kubectl apply -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml -n stackgres-ns
Este comando instala los recursos necesarios y expone la UI mediante un servicio LoadBalancer, lo cual puede generar costos adicionales en proveedores como EKS, GKE o AKS.
Verificación del estado del operador
Espere a que los pods del operador estén en estado Running:
kubectl get pods -n stackgres-ns
La salida debería mostrar pods como stackgres-operator-xxxxx y stackgres-restapi-xxxxx con estado Running.
Creación de un clúster de PostgreSQL
Defina un recurso personalizado para crear un clúster con una instancia y volumen persistente de 2Gi:
cat << 'EOF' | kubectl apply -f -
apiVersion: stackgres.io/v1
kind: SGCluster
metadata:
name: demo-cluster
namespace: default
spec:
instances: 1
postgres:
version: 'latest'
pods:
persistentVolume:
size: '2Gi'
EOF
Este clúster usa configuraciones predeterminadas para PostgreSQL, pool de conexiones y recursos.
Monitoreo de la creación del clúster
Observe el progreso con:
kubectl get pods -w
Cuando el pod demo-cluster-0 muestre READY 6/6 y estado Running, el clúster estará listo.
Conexión mediante psql
Para acceder a PostgreSQL a través del sidecar postgres-util, ejecute:
kubectl exec -ti $(kubectl get pod -l app=StackGresCluster,role=master -o jsonpath='{.items[0].metadata.name}') -c postgres-util -- psql
Esto le dará acceso como usuario postgres.
Conexión mediante servicios de Kubernetes
Obtenga la contraseña del superusuario del secreto:
kubectl get secret demo-cluster --template '{{ printf "%s" (index .data "superuser-password" | base64decode) }}'
Use la contraseña para conectarse desde otro pod:
kubectl run psql-client --rm -it --image ongres/postgres-util --restart=Never -- psql -h demo-cluster postgres postgres
Ingrese la contraseña cuando se solicite.
Acceso a la consola web
Obtenga las credenciales de administrador:
kubectl get secret -n stackgres-ns stackgres-restapi-admin --template '{{ printf "Usuario: %s\nContraseña: %s\n" (.data.k8sUsername | base64decode) (.data.clearPassword | base64decode) }}'
Realice un port-forward al pod de la API REST:
kubectl port-forward svc/stackgres-restapi -n stackgres-ns 8443:443
Acceda a la consola en https://localhost:8443/admin/.
Limpieza del entorno
Para eliminar los recursos instalados:
kubectl delete -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml -n stackgres-ns
Consulte la documentación de desinstlaación para más detalles.
StackGres proporciona una solución robusta para bases de datos en Kubernetes, combinando gestión declarativa con operaciones automatizadas y características avanzadas como alta disponibilidad, backups y observabilidad.