Découverte de CloudNativePG

Module K1

Dalibo SCOP

25.07

16 juillet 2025

Sur ce document

Formation Module K1
Titre Découverte de CloudNativePG
Révision 25.07
PDF https://dali.bo/k1_pdf
EPUB https://dali.bo/k1_epub
HTML https://dali.bo/k1_html
Slides https://dali.bo/k1_slides
TP https://dali.bo/k1_tp
TP (solutions) https://dali.bo/k1_solutions

Licence Creative Commons CC-BY-NC-SA

Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :

  • Paternité
  • Pas d’utilisation commerciale
  • Partage des conditions initiales à l’identique

Marques déposées

PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.

Versions de PostgreSQL couvertes

Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 13 à 17.

CloudNativePG

Au menu

  • L’opérateur CloudNativePG
  • Fonctionnalités
  • Fonctionnement

Objectifs

  • Découverte de l’opérateur CloudNativePG
  • Déploiement d’instances PostgreSQL via l’opérateur
  • Tests et découvertes de fonctionnalités

Opérateurs PostgreSQL

  • Extension des fonctionnalités et des ressources de Kubernetes
  • Plusieurs opérateurs (~8) pour PostgreSQL sur https://operatorhub.io
  • Maturité variable en fonction des projets

L’opérateur CloudNativePG

Ce que permet CloudNativePG

  • Gestion déclarative
    • d’instances
    • de bases de données
    • publication
  • Mise en place de réplication automatique
    • par streaming replication
  • Archivage des journaux de transactions
  • Sauvegardes PITR, sauvegardes planifiées
  • Bascule automatique ou manuelle
  • Haute disponibilité, hibernation, fencing, plugin kubectl

Les images utilisées

  • Deux types d’images
    • Pod CloudNativePG
    • ghcr.io/cloudnative-pg/cloudnative-pg:1.25.1
    • Pod PostgreSQL
    • ghcr.io/cloudnative-pg/postgresql:17.4
  • Images personnalisables

Versions supportées

  • Versions PostgreSQL
    • 5 versions majeures supportées par an
  • Versions de CloudNativePG
    • 2 versions majeures supportées par an
    • Uniquement des versions de PostgreSQL supportées
  • Gérer les versions Kubernetes

Installation de l’opérateur

  • Deux éléments :
    • L’opérateur (code)
    • Les Custom Resource Definitions (extensions API)
  • Installation :
    • Manifest
    • Helm Chart
    • OLM
  • Un opérateur par cluster Kubernetes

Installation de l’opérateur

Montée de version de l’opérateur

  • L’opérateur et les Custom Resource Definitions
  • L’instance-manager
  • Redémarrage des instances
  • Étalement des redémarrages dans le temps
    • CLUSTERS_ROLLOUT_DELAY
    • INSTANCES_ROLLOUT_DELAY

Gestion déclarative

Principe

  • Fichiers YAML
  • État désiré <-> État actuel
  • Boucle de réconciliation
  • Nouvelles ressources créables dans Kubernetes

Cluster

  • Définition minimale d’un Cluster PostgreSQL
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: postgresql
spec:
  instances: 1
  storage:
    size: 2Gi
  walStorage:
    size: 2Gi

Éléments initiaux

  • PostgreSQL
    • Base de données app
    • Rôles app, streaming_replica
    • Règles pg_hba
  • Kubernetes
    • Secrets : postgresql-app
    • Services : postgresql-r, postgresql-ro, postgresql-rw

Modification des éléments initiaux

  • Modification possible de certains éléments
  • spec.bootstrap.initdb
  • La commande initdb est utilisée
  bootstrap:
    initdb:
      database: mabase
      owner: monrole

Database

  • v1.25.0+
  • Définition minimale d’une Database
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
  name: mabase
spec:
  name: mabase
  owner: monrole
  cluster:
    name: postgresql

Role

  • Pas de Custom Resource Definition
  • Déclaré dans la ressource Cluster
  • spec.managed.roles
spec: # Cluster
[]
  managed:
    roles:
    - name: dalibo
      ensure: present
      comment: Support Account
      login: true
      superuser: true
      passwordSecret:
        name: dalibo-password

Tablespace

  • Pas de Custom Resource Definition
  • Déclaré dans la ressource Cluster
  • spec.tablespaces
spec: # Cluster
[]
  tablespaces:
    - name: data
      storage:
        size: 1Gi
      owner: dalibo
    - name: fast
      storage:
        size: 2Gi
        storageClass: fast
      owner: dalibo

Configuration de l’instance

  • Déclaratif, tout se fait en YAML
  • Accès direct à ces fichiers interdit !
    • postgresql.conf
    • pg_hba.conf
    • pg_ident.conf

postgresql.conf

  • Tous les paramètres ne sont pas modifiables
  • ALTER SYSTEM désactivé
    • allow_alter_system à false
  • Des vérifications sont mises en place
  • Redémarrage ou rechargement automatique

pg_hba.conf et pg_ident.conf

  • Pré-configurés
    • FIXED RULES, DEFAULT-RULES
  • Dans la définition du Cluster
    • USER-DEFINED RULES

Administration de l’instance

Administration de l’instance

  • Plugin kubectl
  • Connexion
  • Traces
  • Réplication
  • Archivage
  • Sauvegarde
  • Restauration
  • Montée de version mineure de PostgreSQL
  • Haute disponibilité et bascule
  • Hibernation et fencing

Plugin kubectl

  • kubectl cnpg
  • Écrit en Go
  • Interaction avec l’opérateur ou l’instance
  • Commandes :
    • status
    • psql
    • promote
    • backup
    • logs
    • reload
    • restart

Connexion

  • Plus d’accès au serveur
  • Comme avec le PGaaS
  • Accessibilité interne ou externe
  • Outils
    • kubectl ou
    • psql
  • DNS

Traces

  • Format JSON
  • Un seul flux pour différents logger, pas que PostgreSQL
  • Sortie standard du Pod
  • Certains paramètres log_* non modifiables
  • Outil de centralisation de traces obligatoire

Réplication

  • Mise en place très simple
    • instances: N
    • 1 primaire et N-1 secondaires
  • Streaming Replication
  • Répartition sur les nœuds
    • Configuration de l’affinité/anti-affinité
  • Slot de réplication
  • Asynchrone ou synchrone

Archivage

  • Activé par défaut (archive_mode à on)
    • Non modifiable
  • archive_command : /controller/manager wal-archive …
    • Non modifiable
  • Utilisé pour les sauvegardes PITR
  • Barman Cloud, pour le moment

Sauvegarde

  • Sauvegarde physique uniquement
  • 2 méthodes
    • Stockage objets
    • Volume Snapshot
  • Objets
    • Backup
    • ScheduledBackup
  • Configuration spec.backup au niveau du Cluster

Sauvegarde sur stockage objets

  • Méthode par défaut
  • spec.backup.barmanObjectStore
  • Barman Cloud
  • Sauvegarde à chaud, PITR

Sauvegarde par Volume Snapshot

  • Fonctionnalité Kubernetes (API)
  • spec.backup.volumeSnapshot
  • Dépend de la StorageClass et du Container Storage Interface
  • Sauvegarde à chaud ou à froid

Backup

  • Custom Resource Definition
  • Définit l’exécution d’une sauvegarde
apiVersion: postgresql.cnpg.io/v1
kind: Backup
metadata:
  name: masauvegarde
spec:
  cluster:
    name: postgresql

ScheduledBackup

  • Custom Resource Definition
  • Définit la planification de sauvegardes
  • Une ressource Backup créée à chaque exécution
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
  name: masauvegardequotidienne
spec:
  schedule: "0 0 20 * * *"
  backupOwnerReference: self
  cluster:
    name: postgresql

Restauration

  • Création d’une nouvelle instance
  • À partir d’une sauvegarde physique
  • spec.bootstrap.recovery
  • Plusieurs sources de restauration
  • PITR supporté

Montée de version mineure de PostgreSQL

  • Version PostgreSQL indiquée dans l’image
    • Modifier l’image pour monter de version
  • Version mineure uniquement
  • Mode Rolling Update
  • primaryUpdateStrategy et primaryUpdateMethod
    • Définis dans le YAML du Cluster

Haute disponibilité et bascule

  • Répartition sur les nœuds
  • Bascule
    • Automatique
    • Manuelle

Hibernation et fencing

  • Hibernation
    • Arrêter le Pod en conservant les volumes
    • Déclarative ou via le plugin cnpg
  • Fencing
    • Arrêter uniquement le service postmaster

Conclusion

  • Un opérateur complet, open-source, communautaire
  • Déploiement et configuration facilités
  • Approche déclarative
  • Nouveaux mécanismes et configuration à connaitre
  • Connaissance de PostgreSQL nécessaire

Questions

Quiz

Travaux pratiques

La version en ligne des solutions de ces TP est disponible sur https://dali.bo/k1_solutions.

Travaux pratiques (solutions)