Sobes.tech
Junior

When we deploy a deployment, does it retain any state?

sobes.tech AI

Answer from AI

When deploying a Deployment in Kubernetes, the state is not preserved within the Deployment controller itself. Deployment manages a ReplicaSet, which in turn manages Pods. Pods are inherently ephemeral and can be restarted or deleted.

State preservation for applications deployed via Deployment is typically achieved through other mechanisms:

  • Persistent Volumes (PV) and Persistent Volume Claims (PVC): Used for storing data that should remain accessible even after Pods are deleted or restarted. PV provides storage, and PVC requests it.
  • ConfigMaps and Secrets: Used for storing configuration data and sensitive information (passwords, keys), separated from the container image.
  • StatefulSets: A controller specifically designed for managing stateful applications. StatefulSets guarantee stable network identities and stable storage for each Pod, as well as ordered deployment and scaling.

Example of a PVC request in a Pod manifest:

# Pod definition using PVC
apiVersion: v1
kind: Pod
metadata:
  name: my-stateful-app
spec:
  containers:
  - name: my-container
    image: my-image
    volumeMounts:
    - name: data-volume
      mountPath: /data
  volumes:
  - name: data-volume
    persistentVolumeClaim:
      claimName: my-pvc-claim # PVC name used here

Example of a StatefulSet definition:

# StatefulSet definition
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset
spec:
  serviceName: "my-service"
  replicas: 3
  selector:
    matchLabels:
      app: my-statefulset-app
  template:
    metadata:
      labels:
        app: my-statefulset-app
    spec:
      containers:
      - name: my-container
        image: my-image
        volumeMounts:
        - name: my-volume
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: my-volume
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Thus, the Deployment itself does not store state. Its task is to ensure the desired number of Pod replicas without preserving their individual identities or state across restarts. For stateful applications, StatefulSets, PV/PVC, ConfigMaps, and Secrets are used.