Sobes.tech
Junior

Wordt er een staat behouden bij het uitrollen van een deployment?

sobes.tech AI

Antwoord van AI

Bij het uitrollen van een Deployment in Kubernetes wordt de staat niet opgeslagen binnen de Deployment-controller zelf. Deployment beheert een ReplicaSet, dat op zijn beurt de Pods beheert. Pods zijn van nature vergankelijk en kunnen worden herstart of verwijderd.

Het bewaren van de staat voor applicaties die met Deployment worden uitgerold, wordt meestal gedaan via andere mechanismen:

  • Persistent Volumes (PV) en Persistent Volume Claims (PVC): Gebruikt om gegevens op te slaan die zelfs na het verwijderen of herstarten van Pods toegankelijk blijven. PV biedt opslag, en PVC vraagt ernaar.
  • ConfigMaps en Secrets: Gebruikt om configuratiegegevens en gevoelige informatie (wachtwoorden, sleutels) op te slaan, gescheiden van de containerafbeelding.
  • StatefulSets: Een controller die speciaal is ontworpen voor het beheren van stateful applicaties. StatefulSets garanderen stabiele netwerkidentificatie en persistente opslag voor elke Pod, evenals geordend uitrollen en schalen.

Voorbeeld van een PVC-aanvraag in een Pod-manifest:

# Definitie van een Pod die PVC gebruikt
apiVersion: v1
kind: Pod
metadata:
  name: mijn-staat-gevoelige-app
spec:
  containers:
  - name: mijn-container
    image: mijn-image
    volumeMounts:
    - name: data-volume
      mountPath: /data
  volumes:
  - name: data-volume
    persistentVolumeClaim:
      claimName: mijn-pvc

Voorbeeld van een StatefulSet-definitie:

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

Dus, de Deployment zelf bewaart geen staat. Zijn taak is om het benodigde aantal Pod-replicas te garanderen zonder hun identiteit of staat tussen herstarts te bewaren. Voor stateful applicaties worden StatefulSets, PV/PVC, ConfigMaps en Secrets gebruikt.