Inloggen
Inloggen

PostgreSQL implementeren op Kubernetes: stap-voor-stap handleiding

PostgreSQL implementeren op Kubernetes: stap-voor-stap handleiding
Hostman Team
Technical writer
Kubernetes PostgreSQL
27.10.2025
Reading time: 7 min

PostgreSQL is een populair relationeel databasebeheersysteem (RDBMS) met functies voor hoge beschikbaarheid, zoals streamingreplicatie, logische replicatie en failover. Door PostgreSQL op Kubernetes te implementeren, kunnen organisaties veerkrachtige systemen bouwen die minimale downtime en hoge gegevensbeschikbaarheid garanderen.

Met Kubernetes StatefulSets kun je PostgreSQL dynamisch schalen op basis van de vraag.

Choose hour server now!

Kubernetes-omgeving voorbereiden

Zorg dat je het volgende hebt:

Kubernetes-cluster (cloud of lokaal): je kunt binnen enkele minuten een cluster opzetten bij Hostman. Voor een lokale omgeving kun je tools gebruiken zoals k3s, minikube, microk8s of kind.

014f7ea5 76bb 44db A4a2 188bede7b216

  • kubectl: dit CLI-hulpmiddel communiceert met je cluster. Het vereist een YAML-configuratiebestand met de clusterdetails (meestal geleverd door je cloudprovider).

Download het bestand eenvoudig via het Hostman-controlepaneel en stel vervolgens de omgevingsvariabele in:

815af612 2c83 410b A188 E69bb410853f

Om verbinding te maken, moet u de KUBECONFIG-omgevingsvariabele dienovereenkomstig instellen.

export KUBECONFIG=/absolute/path/to/file/k8s-cluster-config.yaml
  • Helm: de Helm CLI is nodig om charts te installeren. Versie 3 is vereist.

PostgreSQL implementeren met een Helm-chart

Helm is de pakketbeheerder voor Kubernetes, vergelijkbaar met apt voor Ubuntu/Debian. In plaats van afzonderlijke YAML-bestanden te schrijven voor Pods, Services, Volumes, Secrets enz., gebruik je één Helm-opdracht om alles in te stellen.

Stap 1: Helm-repository toevoegen

helm repo add bitnami https://charts.bitnami.com/bitnami

Om uw lokale Helm-repository te synchroniseren met de externe repository:

helm repo update

Stap 2: Datapersistentie beheren

PostgreSQL vereist permanente opslag zodat gegevens behouden blijven bij een herstart of crash van een pod.

Maak het bestand postgres-local-pv.yaml aan:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgresql-local-pv
spec:
  capacity:
      storage: 5Gi
  accessModes:
      - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
      path: /mnt/data/postgresql

⚠️ Let op: hostPath verwijst naar een lokaal pad op één node — niet geschikt voor productieomgevingen. Gebruik in plaats daarvan cloud-native opslag (bijv. Ceph, OpenEBS, Portworx, GlusterFS) voor betrouwbaarheid en schaalbaarheid.

Maak vervolgens postgres-local-pvc.yaml aan:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgresql-local-pvc
spec:
  accessModes:
      - ReadWriteOnce
  resources:
      requests:
          storage: 5Gi
  storageClassName: manual

De modus ReadWriteOnce betekent dat slechts één node tegelijk mag schrijven/lezen. ReadWriteMany lijkt aantrekkelijk, maar veroorzaakt bij PostgreSQL risico’s op racecondities en gegevenscorruptie.

Pas de manifests toe:

kubectl apply -f postgres-local-pv.yaml
kubectl apply -f postgres-local-pvc.yaml

Stap 3: PostgreSQL installeren met Helm

helm install tutorial-db bitnami/postgresql --set auth.username=bhuwan \
  --set auth.password=”AeSeigh2gieshe” \
  --set auth.database=k8s-tutorial \
  --set auth.postgresPassword=”Ze4hahshez6dop9vaing” \
  --set primary.persistence.existingClaim=postgresql-local-pvc \
  --set volumePermissions.enabled=true 

Controleer na enkele minuten:

kubectl get all

Image1

Stap 4: Testen en verbinden

export POSTGRES_PASSWORD=$(kubectl get secret --namespace default tutorial-db-postgresql -o jsonpath="{.data.password}" | base64 -d)
kubectl run tutorial-db-postgresql-client --rm --tty -i --restart='Never' \
 --image docker.io/bitnami/postgresql:17.2.0-debian-12-r6 \
 --env="PGPASSWORD=$POSTGRES_PASSWORD" \
 --command -- psql --host tutorial-db-postgresql \
 -U bhuwan -d k8s-tutorial -p 5432

De pod wordt automatisch verwijderd door de --rm vlag. Pas de waarden aan als je een andere release-naam of database gebruikt.

PostgreSQL van nul af aan implementeren op Kubernetes

Een StatefulSet is de juiste Kubernetes-resource voor toepassingen met status zoals PostgreSQL. Elk exemplaar krijgt een stabiele netwerkidentiteit en een eigen volume.

Schoon eerst bestaande bronnen op:

helm delete tutorial-db
kubectl delete pvc postgresql-local-pvc
kubectl delete pv postgresql-local-pv
kubectl apply -f postgres-local-pv.yaml -f postgres-local-pvc.yaml

Maak het bestand postgres-statefulset.yaml:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres-statefulset
  labels:
    app: postgres
spec:
  serviceName: "postgresql-headless-svc"
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:17.2
          envFrom:
            - secretRef:
                name: postgresql-secret
          ports:
            - containerPort: 5432
              name: postgresdb
          volumeMounts:
            - name: pv-data
              mountPath: /var/lib/postgresql/db
      volumes:
        - name: pv-data
          persistentVolumeClaim:
            claimName: postgresql-local-pvc

Maak het Secret voor de databasewachtwoorden:

kubectl create secret generic postgresql-secret --from-literal=POSTGRES_PASSWORD=Ze4hahshez6dop9vaing
kubectl apply -f postgres-statefulset.yaml

Komt de pod niet verder dan Pending? Maak dan een StorageClass aan:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: manual
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

Controleer eventuele fouten:

kubectl describe pod postgres-statefulset-0

Maak vervolgens een Headless Service voor interne toegang — bestand postgres-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: postgresql-headless-svc
spec:
  type: ClusterIP
  selector:
	app: postgres
  ports:
  	- port: 5432
    	targetPort: 5432
  clusterIP: None

Test de verbinding:

kubectl run tutorial-db-postgresql-client --rm --tty -i --restart='Never'  \
--image docker.io/bitnami/postgresql:17.2.0-debian-12-r6 \
--env="PGPASSWORD=Ze4hahshez6dop9vaing"  \
--command -- psql --host postgres-statefulset-0.postgresql-headless-svc  \
-U postgres  -p 5432

Schalen, replicatie en back-up

Schalen van het StatefulSet:

kubectl scale statefulset postgres-statefulset --replicas=3 

Image4

  •  Je kunt individuele pods bereiken via de headless service, bijv. postgres-statefulset-1.postgresql-headless-svc.

  • Back-ups uitvoeren: maak een CronJob aan met het hulpprogramma pg_dump.
    VolumeSnapshots zijn ook een optie voor extra zekerheid.

Best Practices

  • Resource Requests & Limits instellen: voorkom over- of onderprovisionering.
  • Back-ups plannen met CronJobs of snapshots.
  • Monitoring & logging: gebruik Prometheus + Grafana voor PostgreSQL-statistieken (query-prestaties, schijfgebruik, replicatiestatus).
  • Pod Disruption Budgets (PDB’s) configureren om te voorkomen dat meerdere PostgreSQL-pods tegelijk offline gaan bij updates.
Choose your server now!

Conclusie

Een Helm-chart is de aanbevolen methode voor complexe of productie-implementaties. Helm automatiseert versiebeheer en verbergt de complexiteit van afzonderlijke Kubernetes-componenten. Met helm template kun je het chart lokaal renderen en de YAML-bestanden aanpassen.

Conclusie

Een Helm-chart is de aanbevolen methode voor complexe of productie-implementaties. Helm automatiseert versiebeheer en verbergt de complexiteit van afzonderlijke Kubernetes-componenten. Met helm template kun je het chart lokaal renderen en de YAML-bestanden aanpassen.

Kubernetes biedt schaalbaarheid, flexibiliteit en automatisering voor PostgreSQL-databases. Door gebruik te maken van StatefulSets, PVC’s, PDB’s en Secrets-beheer, kun je een PostgreSQL-omgeving opzetten die klaar is voor productie.

Kubernetes PostgreSQL
27.10.2025
Reading time: 7 min

Vergelijkbaar

Heb je vragen,
opmerkingen of zorgen?

Onze professionals staan altijd klaar om je te helpen,
of je nu hulp nodig hebt of gewoon niet weet waar te beginnen
E-mail ons
Hostman's Support