Découverte de l’opérateur Kubernetes CloudNativePG

PGSession 2025

Pierrick Chovelon, David Bidoc

Janvier 2025

Introduction

Objectif de l’atelier

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

Déroulé de l’atelier

Durée : ~ 3 heures

Pause : 11h00

  1. Quelques mots sur PostgreSQL dans Kubernetes
  2. L’opérateur CloudNativePG
  3. Travaux pratiques : accompagné, avoir le même rythme.

Prérequis de l’atelier

  • Un terminal Linux

  • Une VM Debian Bookworm ou équivalente (mise à disposition par Dalibo)

  • Un peu de compétences Linux, PostgreSQL, image Docker et Kubernetes :)

  • Outils utilisés :

    • ssh, minikube, kubectl, vi (nano, emacs ou autre), …

Kubernetes

Présentation

  • Plateforme de déploiement de conteneurs libre et Open Source
  • Cloud Native Computing Foundation (CNCF)
  • Plusieurs distributions existent (K3s, AKS, GKE, Rancher, Openshift, Minikube…)
  • Déploiements applicatifs, auto-scaling, redéploiement automatique, load balancing, …

Des données dans Kubernetes ?!

  • Pas une évidence
  • Habituellement du stateless
  • Apparition des StatefulSet
  • Couche supplémentaire (complexité ?)
  • Effet de mode ? Pas que !

Choisissez surtout une solution qui correspond à vos besoins !

Déployer PostgreSQL dans Kubernetes

  • Nécessite de choisir une image Docker contenant PostgreSQL
  • Dockerhub ? image maison ?

Vient ensuite le déploiement :

  • Manuel
  • StatefulSet
  • Helm Chart
  • Opérateur (leurs propres images)

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

https://sdk.operatorframework.io/docs/overview/operator-capabilities/

L’opérateur CloudNativePG

CloudNativePG is the Kubernetes operator that covers the full lifecycle of a highly available PostgreSQL database cluster with a primary/standby architecture, using native streaming replication.

Le projet

  • https://cloudnative-pg.io/
  • Débuté par 2ndQuadrant puis EDB. Enfin libéré en 2022
  • Projet open source, licence Apache 2.0
  • Mode de gouvernance similaire à PostgreSQL

L’adoption (1)

  • De plus en plus cité, des présentations (KubeCon, PGConfEU)
  • Tentatives d’incubation CNCF (en cours)
  • Grand attrait sur Github

L’adoption (2)

Les étoiles ne sont pas un argument “d’autorité”

Ce que permet CloudNativePG

  • Déploiement d’instance PostgreSQL facilité
  • Mise en place de réplication automatique
  • Sauvegardes PITR, planifiées
  • Bascule (automatique ou manuelle)
  • Haute disponibilité
  • Hibernation, Fencing
  • Plugin kubectl

Attention, tout n’est pas simple (1)

  • Connaissances Kubernetes
    • Même en tant que DBA
  • Connaissances PostgreSQL
    • Même en tant qu’admin K8S
  • Changements d’habitudes et d’outils
    • Plus de SSH sur la machine où se trouve l’instance
    • Configuration dans les ressources Kubernetes

Attention, tout n’est pas simple (2)

  • Couche(s) d’abstraction(s) supplémentaire(s)
    • Debug plus long / compliqué
    • Avoir les bons outils
  • Jongler avec les versions
    • Kubernetes : 3 supportées
    • CloudNativePG : 2 supportées
    • PostgreSQL : 5 supportées

Travaux pratiques

Pris en main du cluster Kubernetes (minikube)

Installation de l’opérateur CloudNativePG

Déploiement d’instances PostgreSQL

Qu’est-ce qui est créé ?

Opérations basiques

Déploiement d’une instance secondaire

Tests de bascules

Mise en place d’une sauvegarde PITR

Procéder à une restauration PITR

Montée de version mineure de PostgreSQL

Montée de version de l’opérateur

Exercices optionnels

Conclusion

  • Échanges sur PostgreSQL dans Kubernetes
  • Prise en main de l’opérateur CloudNativePG
  • Attentions changements qu’implique un déploiement sur Kubernetes (et pas que DBA !)
  • Choisissez une solution qui répond à vos besoins !

Références

Remerciements

  • Alain Lesage
  • David Bidoc
  • Robin Portigliatti
  • Jehan-Guillaume de Rorthais
  • Pierrick Chovelon