Sobes.tech
Junior

Czy podczas wdrażania zachowuje się jakiś stan?

sobes.tech AI

Odpowiedź od AI

Podczas wdrażania Deployment w Kubernetes, stan nie jest przechowywany wewnątrz samego kontrolera Deployment. Deployment zarządza ReplicaSetem, który z kolei zarządza Podami. Pody są z natury efemeryczne i mogą być ponownie uruchomione lub usunięte.

Przechowywanie stanu dla aplikacji wdrażanych za pomocą Deployment zwykle realizuje się za pomocą innych mechanizmów:

  • Persistent Volumes (PV) i Persistent Volume Claims (PVC): Służą do przechowywania danych, które muszą pozostać dostępne nawet po usunięciu lub ponownym uruchomieniu Podów. PV zapewnia storage, a PVC go żąda.
  • ConfigMaps i Secrets: Służą do przechowywania danych konfiguracyjnych i poufnych informacji (hasła, klucze), oddzielonych od obrazu kontenera.
  • StatefulSets: Kontroler specjalnie zaprojektowany do zarządzania aplikacjami z stanem. StatefulSets gwarantują stabilną identyfikację sieciową i trwałe przechowywanie dla każdego Podu, a także uporządkowane wdrażanie i skalowanie.

Przykład żądania PVC w manifeście Podu:

# Definicja Podu korzystającego z PVC
apiVersion: v1
kind: Pod
metadata:
  name: moja-aplikacja-stanowa
spec:
  containers:
  - name: mój-kontener
    image: moja-obraz
    volumeMounts:
    - name: dane-volumen
      mountPath: /dane
  volumes:
  - name: dane-volumen
    persistentVolumeClaim:
      claimName: moja-pvc

Przykład definicji StatefulSet:

# Definicja StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mój-statefulset
spec:
  serviceName: "mój-serwis"
  replicas: 3
  selector:
    matchLabels:
      app: moja-aplikacja-stanowa
  template:
    metadata:
      labels:
        app: moja-aplikacja-stanowa
    spec:
      containers:
      - name: mój-kontener
        image: moja-obraz
        volumeMounts:
        - name: mój-volumen
          mountPath: /dane
  volumeClaimTemplates:
  - metadata:
      name: mój-volumen
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Zatem, sam Deployment nie przechowuje stanu. Jego zadaniem jest zapewnienie odpowiedniej liczby replik Podów bez zachowania ich tożsamości lub stanu między restartami. Dla aplikacji z stanem używa się StatefulSets, PV/PVC, ConfigMaps i Secrets.