Sobes.tech
Junior

Διατηρείται κάποια κατάσταση όταν αναπτύσσουμε;

sobes.tech AI

Απάντηση από AI

Κατά την ανάπτυξη ενός Deployment στο Kubernetes, η κατάσταση δεν αποθηκεύεται μέσα στον ίδιο τον ελεγκτή Deployment. Το Deployment διαχειρίζεται ένα ReplicaSet, το οποίο με τη σειρά του διαχειρίζεται τα Pods. Τα Pods είναι από τη φύση τους εφήμερα και μπορούν να επανεκκινηθούν ή να διαγραφούν.

Η διατήρηση της κατάστασης για τις εφαρμογές που αναπτύσσονται με Deployment πραγματοποιείται συνήθως μέσω άλλων μηχανισμών:

  • Persistent Volumes (PV) και Persistent Volume Claims (PVC): Χρησιμοποιούνται για την αποθήκευση δεδομένων που πρέπει να παραμένουν προσβάσιμα ακόμα και μετά τη διαγραφή ή την επανεκκίνηση Pods. Το PV παρέχει αποθήκευση, και το PVC το ζητάει.
  • ConfigMaps και Secrets: Χρησιμοποιούνται για την αποθήκευση διαμορφωτικών δεδομένων και ευαίσθητων πληροφοριών (κωδικών πρόσβασης, κλειδιών), ξεχωριστά από την εικόνα κοντέινερ.
  • StatefulSets: Ένας ελεγκτής ειδικά σχεδιασμένος για τη διαχείριση καταστάσεων. Τα StatefulSets εγγυώνται σταθερή δικτυακή αναγνώριση και διατηρήσιμη αποθήκευση για κάθε Pod, καθώς και διατεταγμένη ανάπτυξη και κλιμάκωση.

Παράδειγμα αίτησης PVC σε ένα manifest Pod:

# Ορισμός ενός Pod που χρησιμοποιεί PVC
apiVersion: v1
kind: Pod
metadata:
  name: καταστατική-εφαρμογή
spec:
  containers:
  - name: το-δοχείο-μου
    image: η-εικόνα-μου
    volumeMounts:
    - name: όγκος-δεδομένων
      mountPath: /δεδομένα
  volumes:
  - name: όγκος-δεδομένων
    persistentVolumeClaim:
      claimName: το- pvc-μου

Παράδειγμα ορισμού StatefulSet:

# Ορισμός StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: το-statefulset-μου
spec:
  serviceName: "η-υπηρεσία-μου"
  replicas: 3
  selector:
    matchLabels:
      app: η-καταστατική-εφαρμογή-μου
  template:
    metadata:
      labels:
        app: η-καταστατική-εφαρμογή-μου
    spec:
      containers:
      - name: το-δοχείο-μου
        image: η-εικόνα-μου
        volumeMounts:
        - name: ο-όγκος-μου
          mountPath: /δεδομένα
  volumeClaimTemplates:
  - metadata:
      name: ο-όγκος-μου
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Επομένως, το ίδιο το Deployment δεν αποθηκεύει κατάσταση. Ο στόχος του είναι να διασφαλίσει τον απαιτούμενο αριθμό αντιγράφων Pods χωρίς να διατηρεί την ταυτότητά τους ή την κατάσταση μεταξύ των επανεκκινήσεων. Για καταστατικές εφαρμογές, χρησιμοποιούνται StatefulSets, PV/PVC, ConfigMaps και Secrets.