Montées de versions

Module K5

Dalibo SCOP

26.09

10 septembre 2026

Sur ce document

Formation Module K5
Titre Montées de versions
Révision 26.09
PDF https://dali.bo/k5_pdf
EPUB https://dali.bo/k5_epub
HTML https://dali.bo/k5_html
Slides https://dali.bo/k5_slides
TP https://dali.bo/k5_tp
TP (solutions) https://dali.bo/k5_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.

Les montées de versions avec CloudNativePG

Introduction

  • Environnement Kubernetes
    • Jongler avec les versions
      • PostgreSQL : 5 supportées
      • CloudNativePG : 2 supportées
      • Kubernetes : 3 supportées
  • Releases très fréquentes
  • Interruptions de services à prévoir

Exemple de chronologie (Rappel)

Au menu

  • Montées de versions PostgreSQL
    • Mineures
    • Majeures
  • Montées de versions de l’opérateur
  • Quelques mots sur les montées de versions Kubernetes

Releases PostgreSQL

Rappel PostgreSQL

  • Versions PostgreSQL
    • X : version majeure (10, 11, … 18)
      • 1 par an, 5 supportées
    • X.Y : version mineure (14.19, 17.6)
      • Chaque trimestre

Rappel CloudNativePG

  • 2 versions supportées en même temps
    • Uniquement des versions de PostgreSQL supportées

Montées de version avec CloudNativePG

  • « Déclarativement »
  • Version PostgreSQL indiquée dans :
    • imageName du Cluster
    • images du ImageCatalog ou ClusterImageCatalog
  • Version mineure
  • Version majeure (In-Place)
  • Rolling Update

Montée de version mineure

  • Version mineure
  spec:
-    imageName: ghcr.io/cloudnative-pg/postgresql:18.0-standard-trixie
+    imageName: ghcr.io/cloudnative-pg/postgresql:18.1-standard-trixie
  • Ou ImageCatalog / ClusterImageCatalog
  • Mode Rolling Update
    • Les instances secondaires d’abord

Montée de version majeure

  • Plusieurs méthodes
    • pg_dump/pg_restore
    • In-Place Major Upgrade (v1.26+)
      • Offline avec pg_upgrade
    • Réplication logique
      • En live
      • Plus complexe
  • Avec ou sans CloudNativePG

Montée de version majeure - In-Place Major Upgrade

  • CloudNativePG v1.26+
  • Instances arrêtées
  • Même OS (dans l’image)
  • Pas de Rolling Update
    • Primaire puis recréation des secondaires
  • Une sauvegarde avant l’opération !

Montée de version majeure - bootstrap.initdb.import

  • pg_dump/pg_restore
  • Le plus simple
    • Plus ou moins long
  • via bootstrap.initdb.import
  • Plusieurs types :
    • microservice ou monolith
  • Nouvelle ressource Cluster
    • externalClusters dans sa définition YAML

Montée de version majeure - bootstrap.initdb.import

  • Deux méthodes :
    • monolith
      • Une ou plusieurs bases
      • Un ou plusieurs rôles
    • microservice
      • Uniquement 1 base
  • pg_dump -Fd
    • Stocké temporairement dans le volume PGDATA

Montée de version majeure - bootstrap.initdb.import

  • spec.externalClusters
    • Indique l’instance PostgreSQL où se trouve la ou les bases
spec:
[]
  externalClusters:
    - name: cluster-ancienne-version
      connectionParameters:
        host: 10.20.30.40
        user: postgres
        dbname: postgres
      password:
        name: cluster-ancienne-version-superuser # un Secret doit exister
        key: password      

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

Stratégie de mise à jour

  • primaryUpdateStrategy et primaryUpdateMethod
    • Montées de version mineure
    • Changement de configuration

Mises à jour Kubernetes

  • Mise à jour des nœuds
    • Évictions des Pods
  • Pod Disruption Budget
    • Créé par défaut
kubectl describe pdb cluster-18-primary

Name:           cluster-18-primary
Namespace:      default
Min available:  1
Selector:       cnpg.io/cluster=cluster-18,cnpg.io/instanceRole=primary
Status:
    Allowed disruptions:  0
    Current:              1
    Desired:              1
    Total:                1
Events:                   <none>

Questions

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

Quiz

Travaux pratiques

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

Travaux pratiques (solutions)