zkt26/sk1/statefulset.yaml
2026-05-12 19:27:18 +02:00

112 lines
3.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ─────────────────────────────────────────────────────────────────────────────
# PersistentVolumeClaim provisioning DYNAMIQUE via Azure Disk (managed-csi)
# Le PV est créé automatiquement par AKS, pas besoin de le déclarer.
# (L'ancienne version utilisait hostPath + storageClassName: manual,
# ce qui ne fonctionne pas sur AKS car le chemin /home/cytech n'existe pas
# sur les nœuds Azure.)
# ─────────────────────────────────────────────────────────────────────────────
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: vigimeteo-db-pvc
namespace: vigimeteo
labels:
app: vigimeteo-db
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-csi # StorageClass native AKS → Azure Disk
resources:
requests:
storage: 1Gi
---
# StatefulSet single PostgreSQL replica
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: vigimeteo-db
namespace: vigimeteo
labels:
app: vigimeteo-db
spec:
serviceName: vigimeteo-db
replicas: 1
selector:
matchLabels:
app: vigimeteo-db
template:
metadata:
labels:
app: vigimeteo-db
spec:
# Azure Disk est monté en root par défaut.
# fsGroup: 999 = GID du user postgres dans l'image postgres:17-alpine.
# Kubernetes va chowner récursivement le volume sur ce GID avant de
# démarrer le conteneur, ce qui permet à postgres de créer le sous-dossier pgdata.
securityContext:
fsGroup: 999
containers:
- name: postgres
image: postgres:17-alpine
ports:
- containerPort: 5432
name: postgres
env:
- name: POSTGRES_USER
value: "postgres"
- name: POSTGRES_PASSWORD
value: "admin"
- name: POSTGRES_DB
value: "postgres"
# CORRECTION : Azure Disk (ext4) crée un dossier lost+found à la racine.
# PostgreSQL refuse d'initialiser un dossier non-vide (initdb error).
# subPath force l'écriture dans un sous-dossier 'pgdata' qui, lui, est vide.
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- name: vigimeteo-db-storage
mountPath: /var/lib/postgresql/data
# Pas de subPath : avec fsGroup le volume est accessible
- name: vigimeteo-db-init
mountPath: /docker-entrypoint-initdb.d
readinessProbe:
exec:
command: ["pg_isready", "-U", "postgres"]
initialDelaySeconds: 10
periodSeconds: 5
livenessProbe:
exec:
command: ["pg_isready", "-U", "postgres"]
initialDelaySeconds: 30
periodSeconds: 10
volumes:
- name: vigimeteo-db-storage
persistentVolumeClaim:
claimName: vigimeteo-db-pvc
- name: vigimeteo-db-init
configMap:
name: vigimeteo-db-init
---
# Headless Service required by the StatefulSet
apiVersion: v1
kind: Service
metadata:
name: vigimeteo-db
namespace: vigimeteo
labels:
app: vigimeteo-db
spec:
clusterIP: None # headless stable DNS name for StatefulSet pods
selector:
app: vigimeteo-db
ports:
- name: postgres
port: 5432
targetPort: 5432