Introduction à CloudNativePG

Module K0

Dalibo SCOP

26.09

10 septembre 2026

Sur ce document

Formation Module K0
Titre Introduction à CloudNativePG
Révision 26.09
PDF https://dali.bo/k0_pdf
EPUB https://dali.bo/k0_epub
HTML https://dali.bo/k0_html
Slides https://dali.bo/k0_slides
TP https://dali.bo/k0_tp
TP (solutions) https://dali.bo/k0_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 (y compris IA)
  • 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 14 à 18.

Introduction à PostgreSQL et CloudNativePG

Au menu

  • Le projet PostgreSQL
    • Introduction et version
  • PostgreSQL dans Kubernetes
    • Introduction aux opérateurs et à CloudNativePG

Un peu d’histoire…

  • La licence
  • L’origine du nom
  • Les origines du projet
  • Les principes

Licence

  • Licence PostgreSQL
  • Droit, sans coûts de licence, de :
    • utiliser, copier, modifier, distribuer (et même revendre)
  • Reconnue par l’Open Source Initiative
  • Utilisée par un grand nombre de projets de l’écosystème

PostgreSQL ?!?!

  • 1985 : Michael Stonebraker recode Ingres
  • post « ingres » postingres postgres
  • postgres PostgreSQL

Principes fondateurs

  • Sécurité des données (ACID)
  • Respect des normes (ISO SQL)
  • Portabilité
  • Fonctionnalités intéressant le plus grand nombre
  • Performances
    • si pas de péril pour les données
  • Simplicité du code
  • Documentation
  • Tests fonctionnels

Origines

  • Années 1970 : Michael Stonebraker développe Ingres à Berkeley
  • 1985 : Postgres succède à Ingres
  • 1995 : Ajout du langage SQL
  • 1996 : Libération du code : Postgres devient PostgreSQL
  • 1996 : Création du PostgreSQL Global Development Group

Apparition de la communauté internationale

  • ~ 2000: Communauté japonaise (JPUG)
  • 2004 : PostgreSQLFr
  • 2006 : SPI
  • 2007 : Communauté italienne
  • 2008 : PostgreSQL Europe et US
  • 2009 : Boom des PGDay
  • 2011 : Postgres Community Association of Canada
  • 2017 : Community Guidelines
  • …et ça continue

Progression du code

  • 1,9 millions de lignes
    • ¼ de commentaires
    • le reste surtout en C
  • Nombres de commit par mois :
Évolution du nombre de commit dans le dépôt PostgreSQL

Les versions de PostgreSQL

Quelle version utiliser ?

  • Historique
  • Numérotation
  • Mises à jour mineures et majeures
  • Les versions courantes
  • Quelle version en production ?
  • Forks & dérivés

Historique

Versions & fonctionnalités

  • 1996 : v6.0 -> première version publiée
  • 2003 : v7.4 -> première version réellement stable
  • 2005 : v8.0 -> arrivée sur Windows
  • 2008 : v8.3 -> performances et fonctionnalités, organisation (commitfests)
  • 2010 : v9.0 -> réplication physique
  • 2016 : v9.6 -> parallélisation
  • 2017 : v10 -> réplication logique, partitionnement déclaratif
  • 2025 : v18 -> performances, fonctionnalités, administration…

Numérotation

  • Version récentes (10+)
    • X : version majeure (10, 11, … 18)
    • X.Y : version mineure (14.19, 17.6)
  • Avant la version 10 (toutes périmées !)
    • X.Y : version majeure (9.4, 9.6)
    • X.Y.Z : version mineure (9.6.24)

Mises à jour mineure

De M.m à M.m+n :

  • En général chaque trimestre
  • Et sans souci
    • Release notes
    • tests
    • mise à jour des binaires
    • redémarrage

Versions courantes

  • 1 version majeure par an
    • maintenue 5 ans
  • Dernières mises à jour mineures
  • Prochaine sortie de versions mineures prévue : 12 novembre 2026

Versions 9.4 à 11

  • jsonb
  • Row Level Security
  • Index BRIN, bloom
  • Fonctions OLAP
  • Parallélisation
  • SQL/MED : accès distants
  • Réplication logique
  • Partitionnement déclaratif
  • Réduction des inconvénients de MVCC
  • JIT
  • Index couvrants

Version 12

  • Octobre 2019 - Novembre 2024 (n’est plus supportée !)
  • Amélioration du partitionnement déclaratif
  • Amélioration des performances
    • sur la gestion des index
    • sur les CTE (option MATERIALIZED)
  • Colonnes générées
  • Nouvelles vues de visualisation de la progression des commandes
  • Refonte de la configuration de la réplication

Version 13

  • Septembre 2020 - Novembre 2025
  • Améliorations :
    • partitionnement déclaratif
    • réplication logique
  • Amélioration des performances :
    • index B-tree, objet statistique, tri et agrégat
  • Amélioration de l’autovacuum et du VACUUM :
    • gestion complète des tables en insertion seule
    • traitement parallélisé des index lors d’un VACUUM
  • Amélioration des sauvegardes :
    • génération d’un fichier manifeste, outil pg_verifybackup
  • Nouvelles vues de progression de commandes :
    • pg_stat_progress_basebackup, pg_stat_progress_analyze

Version 14

  • Septembre 2021 - Novembre 2026
  • Nouvelles vues système & améliorations
    • pg_stat_progress_copy, pg_stat_wal, pg_lock.waitstart, query_id
  • Lecture asynchrone des tables distantes
  • Paramétrage par défaut adapté aux machines plus récentes
  • Améliorations diverses :
    • réplications physique et logique
    • quelques facilités de syntaxe (triggers, tableaux en PL/pgSQL)
  • Performances :
    • connexions en lecture seule plus nombreuses
    • index…

Version 15

  • Octobre 2022 - Novembre 2027
  • Nombreuses améliorations incrémentales
    • dont en réplication logique
  • Commande MERGE
  • Performances :
    • DISTINCT parallélisable
    • pg_dump & sauvegardes, recovery, partitionnement
  • Changements notables :
    • public n’est plus accessible en écriture à tous
    • sauvegarde PITR exclusive disparaît

Version 16

  • Septembre 2023 - Novembre 2028
  • Plus de tris incrémentaux (DISTINCT…)
  • Réplication logique depuis un secondaire
  • Expressions régulières dans pg_hba.conf
  • Vues systèmes améliorées : pg_stat_io
  • Compression lz4 ou zstd pour pg_dump
  • Optimisation et améliorations diverses (parallélisation…)

Version 17

  • Septembre 2024 - Novembre 2029
  • Améliorations du VACUUM
  • Planificateur : IN et CTE
  • BRIN : création parallélisée
  • JSON_TABLE
  • Sauvegarde incrémentale (pg_basebackup + pg_combinebackup)
  • Améliorations en réplication logique (pg_createsubscriber)
  • pg_dump --filter
  • Imports (COPY peut rejeter des lignes, MERGE)
  • Améliorations diverses

Version 18

  • Septembre 2025 - Novembre 2030
  • checksums par défaut
  • I/O asynchrones
  • Maintien des statistiques lors d’une migration
  • Colonnes virtuelles calculées
  • Améliorations diverses

Petit résumé

  • Versions 7.x :
    • fondations
    • durabilité
  • Versions 8.x :
    • fonctionnalités
    • performances
  • Versions 9.x :
    • réplication physique
    • extensibilité
  • Versions 10 à 18 :
    • réplication logique
    • parallélisation
    • partitionnement
    • maintenabilité
    • performances

Quelle version utiliser en production ?

Au premier semestre 2025 :

  • 13 et inférieures
    • Danger !
    • planifier une migration urgemment !
  • 14, 15, 16
    • OK pour la production
    • ne pas oublier les mises à jour mineures
  • Nouvelles installations
    • 17 ou 18
  • Nouveaux développements
    • 18
  • https://www.postgresql.org/about/featurematrix

Version officielle de PostgreSQL

Une seule version officielle de PostgreSQL existe, celle publiée par le PGDG. Elle est communautaire.

Il existe de nombreuses versions dérivées.

Versions dérivées

Entre de nombreux autres :

  • Compatibilité Oracle :
    • EnterpriseDB
  • Data warehouse :
    • Greenplum, Netezza
  • Dans le cloud :
    • Amazon RedShift, Aurora, Neon…
    • attention : support, extensions…
  • Extensions :
    • Citus
    • timescaledb
  • Packages avec des outils & support
  • Bases compatibles

Introduction à CloudNativePG

  • Des données dans Kubernetes ?!
  • Nouvelles opportunités pour PostgreSQL
  • Juste un effet de mode ?

Des données dans Kubernetes ?!

  • Pas une évidence
  • Habituellement du stateless
  • Apparition des StatefulSet
  • Couche supplémentaire, complexité

Nouvelles opportunités pour PostgreSQL

  • Serveurs physiques, machines virtuelles, offres managées, …
  • Et maintenant conteneurisées
  • PostgreSQL s’adapte à tous les environnements

Juste un effet de mode ?

Allons plus loin

  • Déployer PostgreSQL dans Kubernetes
  • Principe d’un opérateur
  • L’opérateur CloudNativePG

Déployer PostgreSQL dans Kubernetes

  • Images contenant les binaires PostgreSQL

Déployer PostgreSQL dans Kubernetes

  • Création des ressources Kubernetes
    • Pod, Service, Persistent Volume, …

Quid du passage à l’échelle ?

  • Réutiliser les définitions de ressources
  • Automatisation des déploiements
  • Templating, permet de multiplier les déploiements
    • Par exemple Helm Chart

A chart is a collection of files that describe a related set of Kubernetes resources.

Spécificités propres à PostgreSQL

  • Configuration
  • Instances secondaires et réplication
  • Sauvegardes
  • Montées de versions
  • Extensions
  • Haute disponibilité et bascule automatique

La solution …

  • … doit :
    • Créer les ressources pour nous
    • Connaître et gérer les spécificités de PostgreSQL
    • Gérer tout le cycle de vie d’une instance
    • Fournir des images

Les opérateurs Kubernetes

  • Pour tous les domaines
    • Bases de données (PostgreSQL, Elasticsearch, …)
    • Réseau (Kong, MetalLB, …)
    • Monitoring (Prometheus, Datadog, …)
    • Stockage (Ceph, Minio, …)
  • https://operatorhub.io/

Principe d’un opérateur

  • Deux composants principaux :
    1. Des nouvelles ressources : extension de l’API Kubernetes (CRD)
    2. Un controller : le cerveau de l’histoire
  • Il va nous aider :
    • À déployer les ressources
    • À assurer le bon fonctionnement de PostgreSQL

Gestion déclarative

  • Fichiers YAML
  • Descriptif, l’opérateur le faire pour nous
    • Même idée qu’Ansible, OpenTofu, …
  • État désiré <-> État actuel
  • Boucle de réconciliation

Opérateurs PostgreSQL

  • Maturité variable en fonction des projets
  • Des spécificités à étudier
    • Extensions PostgreSQL
    • Licence
    • Patroni / Kubernetes
    • Outils de sauvegarde

L’opérateur CloudNativePG

  • https://cloudnative-pg.io
  • Débuté par 2ndQuadrant puis EDB Libéré en 2022
  • Open Source
  • Gouvernance similaire au projet PostgreSQL
  • Intégré à la Cloud Native Computing Foundation (CNCF) depuis 2025

Adoption

  • L’engouement est particulièrement fort pour CloudNativePG

Ce que permet CloudNativePG

  • Mise à disposition des images
  • Déploiements facilités
  • Gestion déclarative
    • d’instances, de bases de données, …
  • Mise en place de réplication automatique
    • par streaming replication
  • Archivage des journaux de transactions
    • via un outil tiers
  • Sauvegardes PITR, sauvegardes planifiées
  • Bascule automatique ou manuelle
  • Haute disponibilité, hibernation, fencing, plugin kubectl, …

Tout ceci sera détaillé au fur et à mesure des modules, n’ayez crainte !

Versions supportées

  • PostgreSQL
    • 14, 15, 16, 17 et 18 (juin 2026)
    • Versions majeures supportées par le PGDG
  • CloudNativePG
    • 1.29 et 1.30 (juin 2026)
    • 2 versions supportées en même temps
    • Uniquement des versions de PostgreSQL supportées
  • Sans oubliez les versions Kubernetes

Exemple de chronologie

Les images fournies

  • Pod CloudNativePG
    • ghcr.io/cloudnative-pg/cloudnative-pg:1.30.0
  • Pod PostgreSQL
    • ghcr.io/cloudnative-pg/postgresql
    • Tag minimal ou standard avec OS
      • 18.1-minimal-trixie
  • Images personnalisées

Conclusion

  • PostgreSQL
    • 30 ans d’existence
    • Robuste et performant
    • Déployable à peut-prêt n’importe où
  • CloudNativePG
    • Nouveau dans le paysage de PostgreSQL
    • Vrai opérateur Open Source
    • Fort engouement

Questions

N’hésitez pas, c’est le moment !

Quiz


  1. La trace se retrouve encore dans le nom de la librairie C pour les clients, la libpq.↩︎