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: paradigma
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 paradigma

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: paradigma
spec:
  containers:
  - name: postgres
    image: postgres
    env:
    - name: POSTGRES_PASSWORD
      value: "paradigma"
    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 paradigma

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 paradigma -- /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 paradigma

kubectl get pods -n paradigma

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

kubectl get pv

kubectl get pvc -n paradigma

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 paradigma -- /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 hemos 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. ¿Te has quedado con alguna duda? ¡Pregúntanos en los comentarios!

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.