Sobes.tech
Junior

¿Se mantiene algún estado cuando desplegamos un deployment?

sobes.tech AI

Respuesta de la IA

Al desplegar un Deployment en Kubernetes, el estado no se guarda dentro del propio controlador de Deployment. Deployment gestiona un ReplicaSet, que a su vez gestiona los Pods. Los Pods son por naturaleza efímeros y pueden ser reiniciados o eliminados.

El almacenamiento del estado para las aplicaciones desplegadas con Deployment generalmente se realiza mediante otros mecanismos:

  • Persistent Volumes (PV) y Persistent Volume Claims (PVC): Se utilizan para almacenar datos que deben permanecer accesibles incluso después de eliminar o reiniciar los Pods. PV proporciona almacenamiento, y PVC lo solicita.
  • ConfigMaps y Secrets: Se utilizan para almacenar datos de configuración e información sensible (contraseñas, claves), separados de la imagen del contenedor.
  • StatefulSets: Controlador diseñado específicamente para gestionar aplicaciones con estado. StatefulSets garantizan una identificación de red estable y almacenamiento persistente para cada Pod, así como un despliegue y escalado ordenados.

Ejemplo de solicitud PVC en un manifiesto de Pod:

# Definición de un Pod que usa PVC
apiVersion: v1
kind: Pod
metadata:
  name: mi-aplicacion-con-estado
spec:
  containers:
  - name: mi-contenedor
    image: mi-imagen
    volumeMounts:
    - name: volumen-datos
      mountPath: /datos
  volumes:
  - name: volumen-datos
    persistentVolumeClaim:
      claimName: mi-pvc

Ejemplo de definición de StatefulSet:

# Definición de StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mi-statefulset
spec:
  serviceName: "mi-servicio"
  replicas: 3
  selector:
    matchLabels:
      app: mi-aplicacion-con-estado
  template:
    metadata:
      labels:
        app: mi-aplicacion-con-estado
    spec:
      containers:
      - name: mi-contenedor
        image: mi-imagen
        volumeMounts:
        - name: mi-volumen
          mountPath: /datos
  volumeClaimTemplates:
  - metadata:
      name: mi-volumen
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Por lo tanto, el propio Deployment no almacena estado. Su tarea es garantizar la cantidad necesaria de réplicas de Pods sin guardar su identidad o estado entre reinicios. Para aplicaciones con estado, se utilizan StatefulSets, PV/PVC, ConfigMaps y Secrets.