Aller au contenu

Présentation

Logo CloudNativePG

CloudNativePG est un opérateur open-source qui permet de gérer des instances PostgreSQL dans Kubernetes.

Cet opérateur définit une nouvelle ressource dans Kubernetes appelée Cluster.

C’est en quelque sorte une extension de Kubernetes.

Cette ressource représente en fait un cluster PostgreSQL avec au minimum un primaire et autant de secondaires que ce qui est configuré.

Sauvegardes

CloudNativePG intègre une fonctionnalité de sauvegarde avancée permettant la restauration à un point dans le temps (PITR). Cette solution s’appuie sur l’outil Barman Cloud pour la gestion des sauvegardes. Le système utilise le package barman-cli-cloud, qui est embarqué dans l’image ghcr.io/cloudnative-pg/postgresql:X.X fournie par CloudNativePG. Cette image sert de base pour la création des instances PostgreSQL gérées par l’opérateur.

Warning

À partir de la version 1.26 de CloudNativePG, la prise en charge native de Barman Cloud sera dépréciée. Pour les versions suivantes, il sera utilisable en tant que plugin via le système d’interface CNPG.”

Monitoring

CloudNativePG fournit un ensemble de métriques prédéfinies pour le monitoring de PostgreSQL, accessibles via un exporter Prometheus sur le port 9187. Les métriques liées à PostgreSQL fournissent entre autres les informations suivantes :

  • Informations sur les fichiers WAL
  • Statut des réplicas synchrones
  • Informations sur les sauvegardes
  • État du cluster (mode réplica, fencing, etc.)

Les métriques sont collectées de manière atomique (une transaction par requête), avec le rôle pg_monitor, et exécutées en tant qu’utilisateur postgres.

Replication

CloudNativePG utilise la réplication physique native de PostgreSQL pour la haute disponibilité. Celle-ci est gérée de manière déclarative dans Kubernetes, basée sur le nombre d’instances spécifié dans la ressource Cluster.

Bascule automatique

Le processus de bascule automatique est déclenché en cas d’erreurs inattendues sur le primaire pendant une durée de dépassant celle défini par le paramètre .spec.failoverDelay (par défaut 0 secondes). Le processus de failover se déroule en deux grandes étapes :

Le contrôleur marque le TargetPrimary comme “pending”. Ce changement d’état force l’arrêt du Pod primaire, et s’assure que les walreceiver sur les réplicas cessent leur activité. Le cluster sera alors signalé comme étant en phase de failover (“Failing over”).

Une fois tous les walreceiver arrêtés, une élection de leader aura lieu et un nouveau primaire sera désigné parmi les instances disponibles. L’instance choisie entamera sa promotion au statut de primaire et le cluster reprendra son fonctionnement normal. Pendant ce temps, l’ancien Pod primaire redémarrera, détectera qu’il n’est plus le primaire, et se raccrochera au cluster en tant que nœud réplica.

Logs

Toutes les ressources créées et contrôlées par CloudNativePG enregistrent leurs logs en sortie standard au format JSON. Pour récupérer les logs, il faut utiliser la commande kubectl logs. Pour améliorer la lisibilité des logs JSON, il est conseillé d’utiliser d’ajouter | jq -C à la commande kubectl logs.