Instalación y configuración de EDB Postgres for Kubernetes en OpenShift 4.16

Instalación y configuración de EDB Postgres for Kubernetes en OpenShift 4.16

En esta entrada comparto mi experiencia instalando y configurando EDB Postgres for Kubernetes sobre un clúster de OpenShift 4.16. El objetivo es desplegar un clúster de PostgreSQL altamente disponible, validar la replicación y simular un failover automático.


1. Preparación del entorno

Antes de iniciar, debemos contar con un proyecto (namespace) en OpenShift donde desplegaremos el clúster. En mi caso, utilicé el namespace proj-dev.

Namespace creado


2. Definición del clúster de PostgreSQL

Creamos el manifiesto Cluster con tres réplicas, almacenamiento para datos y WAL, y una estrategia de actualización automática:

apiVersion: postgresql.k8s.enterprisedb.io/v1
kind: Cluster
metadata:
  name: cluster-sample
  namespace: proj-dev
spec:
  instances: 3
  logLevel: info
  primaryUpdateStrategy: unsupervised
  storage:
    size: 1Gi
  walStorage:
    size: 1Gi

Creación del clúster


3. Habilitar accesos de superusuario

Por defecto, el acceso de superusuario está deshabilitado. Para habilitarlo, editamos el objeto Cluster y añadimos:

superuserSecret:
  name: ha-cluster-superuser
enableSuperuserAccess: true

Esto generará un secret llamado cluster-sample-superuser con credenciales aleatorias para conectarnos como postgres.

Edición del objeto Cluster


4. Exponer PostgreSQL al exterior

Si necesitamos acceso externo, podemos crear un Service de tipo NodePort:

apiVersion: v1
kind: Service
metadata:
  name: cluster-sample-rw-nodeport
  namespace: proj-dev
spec:
  type: NodePort
  selector:
    k8s.enterprisedb.io/cluster: cluster-sample
  ports:
    - name: postgres
      port: 5432
      targetPort: 5432
      protocol: TCP
      nodePort: 30032

Service NodePort


5. Conexión desde un cliente externo

En un servidor Rocky Linux 9 utilicé Podman para ejecutar un contenedor con psql:

podman run -it --rm quay.io/sclorg/postgresql-15-c9s:latest bash

Conectamos a la base de datos usando el NodePort:

psql -h 192.168.100.31 -p 30032 -U postgres

Conexión cliente


6. Creación de base de datos y prueba de replicación

Creamos una base de datos de prueba y algunos registros:

CREATE DATABASE testdb;
\c testdb

CREATE TABLE empleados (
  id SERIAL PRIMARY KEY,
  nombre TEXT,
  departamento TEXT
);

INSERT INTO empleados (nombre, departamento)
VALUES
  ('Ana', 'TI'),
  ('Luis', 'Finanzas'),
  ('Carla', 'Recursos Humanos');

Al consultar desde los pods secundarios, validamos que la replicación está funcionando correctamente:

SELECT * FROM empleados;

Validación replicación


7. Prueba de failover automático

Identificamos cuál es el pod primario:

oc get pods -n proj-dev -l k8s.enterprisedb.io/cluster=cluster-sample,role=primary

Eliminamos el pod primario:

oc delete pod cluster-sample-1 -n proj-dev

Posteriormente verificamos que otro pod asume el rol de primario y que la base de datos sigue disponible.

Failover en acción


Conclusión

La instalación de EDB Postgres for Kubernetes en OpenShift 4.16 permite desplegar un clúster de PostgreSQL altamente disponible de manera sencilla.
Con este enfoque logramos:

  • Alta disponibilidad mediante múltiples réplicas.
  • Replicación funcional para proteger los datos.
  • Failover automático, asegurando continuidad del servicio.

Este laboratorio sirve como base para entornos productivos que requieran resiliencia y escalabilidad en la gestión de bases de datos PostgreSQL.