Despliega tu BBDD PostgreSQL en Kubernetes con persistencia de datos

KUBERNETES

A nadie le sorprenderá que Kubernetes se haya convertido en una gran plataforma para desarrollar las mejores aplicaciones. En nuestro blog ya hemos hablado de su éxito y de las distintas plataformas que existen según las necesidades.

Además, hace unas semanas nos centramos en el paso a paso para realizar el almacenamiento y persistencia de datos configurando Pods. Hoy nos vamos a centrar en el despliegue de una base de datos PostgreSql en un pod de Kubernetes con persistencia de datos. Veremos cómo al eliminar el pod y al volverlo a crear, los datos de la base de datos se mantienen. Te lo contamos paso a paso:

PersistentVolume

En primer lugar, creamos un volumen persistente. A continuación, el contenido del fichero yml para crear un PersistentVolume.

apiVersion: v1

kind: PersistentVolume

metadata:

name: mipv

spec:

storageClassName: local-storage

capacity:

storage: 1Gi

accessModes:

- ReadWriteOnce

hostPath:

path: "/mnt/data"

Luego, desplegamos el PersistentVolume a partir del fichero .yml que hemos creado anteriormente con el siguiente comando.

kubectl apply -f persistentVolume.yml

Para ver el resultado del PersistentVolume ejecutamos el siguiente comando.

kubectl get pv

PersistentVolumeClaim

En segundo lugar, vemos el contenido del fichero yml para crear un PersistentVolumeClaim, necesario para poder enlazar el pod con el volumen persistente creado anteriormente.

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mipvc

namespace: arquitecturadedatos

spec:

storageClassName: local-storage

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 512Mi

Desplegamos el PersistentVolumeClaim a partir del fichero .yml generado anteriormente con el siguiente comando.

kubectl apply -f persistentVolumeClaim.yml

A continuación vemos el resultado del PersistentVolumeClaim:

kubectl get pvc -n arquitecturadedatos

El PVC ha quedado vinculado al PV desarrollado anteriormente.

PostgreSql

Por último, vemos el contenido del fichero yml para desplegar un Pod con el volumen persistente creado anteriormente.

apiVersion: v1

kind: Pod

metadata:

name: mipostgresvolumenpersistente

namespace: arquitecturadedatos

spec:

containers:

- name: postgres

image: postgres

env:

- name: POSTGRES_PASSWORD

value: "arquitecturadedatos"

volumeMounts:

- mountPath: /var/lib/postgresql/data

name: postgredb

volumes:

- name: postgredb

persistentVolumeClaim:

claimName: mipvc

Desplegamos el Pod a partir del fichero .yml de antes con el siguiente comando:

kubectl apply -f postgresVolumenPersistente.yml

A continuación, comprobamos que el pod tiene asignado el volumen persistente.

kubectl decribe pod mipostgresvolumenpersistente -n arquitecturadedatos

En el apartado de volúmenes vemos que el pod ha quedado enlazado al PVC.

Lo siguiente que haremos será acceder al pod para crear una base de datos, una tabla e insertar registros.

kubectl exec -it mipostgresvolumenpersistente -n arquitecturadedatos -- /bin/bash

createdb -U postgres mibbdd

psql -U postgres mibbdd

CREATE TABLE productos (id int, nombre varchar(100));

INSERT INTO productos (id, nombre) VALUES (1, 'Coche');

SELECT * from productos;

Con los comandos anteriores hemos accedido al pod, creado una base de datos en PostgreSQL, accedido a ella, creado una tabla, insertado un registro y, por último, hemos hecho una consulta sobre la tabla.

A continuación salimos del pod y lo eliminamos.

kubectl delete pod mipostgresvolumenpersistente -n arquitecturadedatos

kubectl get pods -n arquitecturadedatos

Aunque lo hemos eliminado, podemos ver que tanto el PV como el PVC siguen existiendo.

kubectl get pv

kubectl get pvc -n arquitecturadedatos

Si volvemos a crearlo y accedemos a él, veremos que sigue existiendo la base de datos y el registro que insertamos en la tabla.

kubectl apply -f postgresVolumenPersistente.yml

kubectl exec -it mipostgresvolumenpersistente -n arquitecturadedatos -- /bin/bash

psql -U postgres mibbdd SELECT * from productos;

Esto ha sido posible al utilizar volúmenes persistentes que son independientes al pod y que cuando el pod se elimina, el volumen no se elimina y se puede volver a utilizar.

En este post te he contado cómo desplegar una base de datos PostgreSql en un pod de Kubernetes con persistencia de datos y cómo al eliminar el pod y volverlo a crear, mientras los datos de la base de datos se mantienen.