Se păstrează vreo stare atunci când facem deployment?
sobes.tech AI
Răspuns de la AI
Atunci când implementați un Deployment în Kubernetes, starea nu este păstrată în interiorul controller-ului Deployment însuși. Deployment gestionează un ReplicaSet, care, la rândul său, gestionează Pod-urile. Pod-urile sunt, prin natura lor, efemere și pot fi repornite sau eliminate.
Păstrarea stării pentru aplicațiile implementate cu Deployment se realizează de obicei prin alte mecanisme:
- Persistent Volumes (PV) și Persistent Volume Claims (PVC): Folosite pentru a stoca date care trebuie să rămână accesibile chiar și după ștergerea sau repornirea Pod-urilor. PV oferă stocare, iar PVC o solicită.
- ConfigMaps și Secrets: Folosite pentru a stoca date de configurare și informații sensibile (parole, chei), separate de imaginea containerului.
- StatefulSets: Un controller special conceput pentru gestionarea aplicațiilor cu stare. StatefulSets garantează o identificare de rețea stabilă și stocare persistentă pentru fiecare Pod, precum și implementare și scalare ordonată.
Exemplu de solicitare PVC într-un manifest de Pod:
# Definirea unui Pod care utilizează PVC
apiVersion: v1
kind: Pod
metadata:
name: aplicație-cu-stare
spec:
containers:
- name: containerul-meu
image: imaginea-mea
volumeMounts:
- name: volumul-de-date
mountPath: /date
volumes:
- name: volumul-de-date
persistentVolumeClaim:
claimName: pvc-ul-meu
Exemplu de definire a StatefulSet:
# Definirea unui StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-statefulset
spec:
serviceName: "serviciul-meu"
replicas: 3
selector:
matchLabels:
app: aplicație-cu-stare
template:
metadata:
labels:
app: aplicație-cu-stare
spec:
containers:
- name: containerul-meu
image: imaginea-mea
volumeMounts:
- name: volumul-meu
mountPath: /date
volumeClaimTemplates:
- metadata:
name: volumul-meu
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Prin urmare, Deployment-ul în sine nu păstrează starea. Sarcina sa este de a asigura numărul necesar de replici de Pod-uri fără a păstra identitatea sau starea lor între reporniri. Pentru aplicațiile cu stare, se utilizează StatefulSets, PV/PVC, ConfigMaps și Secrets.