140 lines
3.5 KiB
YAML
140 lines
3.5 KiB
YAML
###############################################################
|
||
# PersistentVolume – host-path storage (works on minikube)
|
||
###############################################################
|
||
apiVersion: v1
|
||
kind: PersistentVolume
|
||
metadata:
|
||
name: postgres-pv
|
||
labels:
|
||
type: local
|
||
app: postgres
|
||
spec:
|
||
capacity:
|
||
storage: 2Gi
|
||
accessModes:
|
||
- ReadWriteOnce
|
||
persistentVolumeReclaimPolicy: Retain
|
||
storageClassName: standard
|
||
hostPath:
|
||
path: /mnt/data/postgres
|
||
type: DirectoryOrCreate
|
||
|
||
---
|
||
###############################################################
|
||
# PersistentVolumeClaim
|
||
###############################################################
|
||
apiVersion: v1
|
||
kind: PersistentVolumeClaim
|
||
metadata:
|
||
name: postgres-pvc
|
||
namespace: todo-app
|
||
labels:
|
||
app: postgres
|
||
spec:
|
||
accessModes:
|
||
- ReadWriteOnce
|
||
storageClassName: standard
|
||
resources:
|
||
requests:
|
||
storage: 2Gi
|
||
|
||
---
|
||
###############################################################
|
||
# Secret – credentials for PostgreSQL
|
||
###############################################################
|
||
apiVersion: v1
|
||
kind: Secret
|
||
metadata:
|
||
name: postgres-secret
|
||
namespace: todo-app
|
||
type: Opaque
|
||
stringData:
|
||
POSTGRES_USER: "postgres"
|
||
POSTGRES_PASSWORD: "postgres123"
|
||
POSTGRES_DB: "tododb"
|
||
|
||
---
|
||
###############################################################
|
||
# StatefulSet – PostgreSQL database
|
||
###############################################################
|
||
apiVersion: apps/v1
|
||
kind: StatefulSet
|
||
metadata:
|
||
name: postgres
|
||
namespace: todo-app
|
||
labels:
|
||
app: postgres
|
||
tier: database
|
||
spec:
|
||
serviceName: "postgres-headless"
|
||
replicas: 1
|
||
selector:
|
||
matchLabels:
|
||
app: postgres
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: postgres
|
||
tier: database
|
||
spec:
|
||
containers:
|
||
- name: postgres
|
||
image: postgres:16-alpine
|
||
imagePullPolicy: IfNotPresent
|
||
ports:
|
||
- containerPort: 5432
|
||
name: postgres
|
||
env:
|
||
- name: POSTGRES_USER
|
||
valueFrom:
|
||
secretKeyRef:
|
||
name: postgres-secret
|
||
key: POSTGRES_USER
|
||
- name: POSTGRES_PASSWORD
|
||
valueFrom:
|
||
secretKeyRef:
|
||
name: postgres-secret
|
||
key: POSTGRES_PASSWORD
|
||
- name: POSTGRES_DB
|
||
valueFrom:
|
||
secretKeyRef:
|
||
name: postgres-secret
|
||
key: POSTGRES_DB
|
||
- name: PGDATA
|
||
value: /var/lib/postgresql/data/pgdata
|
||
resources:
|
||
requests:
|
||
cpu: "100m"
|
||
memory: "256Mi"
|
||
limits:
|
||
cpu: "500m"
|
||
memory: "512Mi"
|
||
volumeMounts:
|
||
- name: postgres-storage
|
||
mountPath: /var/lib/postgresql/data
|
||
- name: init-sql
|
||
mountPath: /docker-entrypoint-initdb.d
|
||
livenessProbe:
|
||
exec:
|
||
command:
|
||
- pg_isready
|
||
- -U
|
||
- postgres
|
||
initialDelaySeconds: 30
|
||
periodSeconds: 10
|
||
readinessProbe:
|
||
exec:
|
||
command:
|
||
- pg_isready
|
||
- -U
|
||
- postgres
|
||
initialDelaySeconds: 5
|
||
periodSeconds: 5
|
||
volumes:
|
||
- name: postgres-storage
|
||
persistentVolumeClaim:
|
||
claimName: postgres-pvc
|
||
- name: init-sql
|
||
configMap:
|
||
name: postgres-init-sql
|