StackGres 1.6: Plataforma de bases de datos en Kubernetes con características avanzadas y guía inicial

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.

Etiquetas: Kubernetes PostgreSQL StackGres Patroni PgBouncer

Publicado el 6-18 08:13