PostgreSQL și stocarea persistentă
Service-ul PostgreSQL
Aplicăm mai întâi Service-ul headless:
kubectl apply -f k8s/20-postgres-service.yaml
kubectl get service postgres -n cc-lab3
Manifestul conține:
spec:
clusterIP: None
selector:
app: postgres
Valoarea clusterIP: None indică un Service headless. Acesta nu oferă un IP
virtual pentru load balancing, ci permite descoperirea directă a Pod-urilor
gestionate de StatefulSet.
StatefulSet-ul PostgreSQL
Fișierul k8s/21-postgres-statefulset.yaml declară o singură replică:
spec:
serviceName: postgres
replicas: 1
Configurația bazei este preluată din ConfigMap și Secret:
env:
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: ticketing-config
key: DB_NAME
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: ticketing-db-secret
key: DB_PASSWORD
volumeClaimTemplates
StatefulSet-ul nu declară un volum temporar. El cere Kubernetes să creeze un PVC stabil pentru fiecare replică:
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Pentru replica cu ordinalul 0, PVC-ul va avea numele data-postgres-0.
Volumul este montat în directorul real folosit de PostgreSQL:
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
Lansarea bazei de date
Aplicați manifestul:
kubectl apply -f k8s/21-postgres-statefulset.yaml
kubectl rollout status statefulset/postgres -n cc-lab3
Inspectați resursele create:
kubectl get statefulset,pods,pvc,pv -n cc-lab3
kubectl describe statefulset postgres -n cc-lab3
kubectl describe pvc data-postgres-0 -n cc-lab3
Ar trebui să observați:
- Pod-ul
postgres-0 - PVC-ul
data-postgres-0în stareaBound - un PersistentVolume asociat PVC-ului
- Pod-ul PostgreSQL în starea
RunningșiReady.
Readiness pentru PostgreSQL
Containerul folosește pg_isready:
readinessProbe:
exec:
command:
- /bin/sh
- -c
- exec pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"
Pod-ul poate exista și procesul poate rula înainte ca baza să accepte conexiuni. Readiness separă aceste două stări.
PVC-ul are un ciclu de viață diferit de Pod. Recrearea Pod-ului nu recreează automat datele și nu schimbă PVC-ul care îi este asociat.