Aller au contenu principal
Version: 2.0.2

Référence API PostgreSQL

Cette référence détaille l’utilisation de PostgreSQL sur Hikube, en mettant en avant son fonctionnement en cluster répliqué avec un primary et des standby pour la haute disponibilité, ainsi que la possibilité d’activer des sauvegardes automatiques vers un stockage compatible S3.


Structure de Base

Ressource Postgres

Exemple de configuration YAML

apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: example
namespace: default
spec:

Paramètres

Paramètres Communs

ParamètreTypeDescriptionDéfautRequis
replicasintNumber of PostgreSQL replicas (instances dans le cluster)2Oui
resourcesobjectExplicit CPU and memory configuration for each PostgreSQL replica. Si vide, resourcesPreset est appliqué{}Non
resources.cpuquantityCPU available to each replicanullNon
resources.memoryquantityMemory (RAM) available to each replicanullNon
resourcesPresetstringDefault sizing preset (nano, micro, small, medium, large, xlarge, 2xlarge)"micro"Oui
sizequantityPersistent Volume Claim size, available for application data10GiOui
storageClassstringStorageClass used to store the data""Non
externalboolEnable external access from outside the clusterfalseNon

Exemple de configuration YAML

postgresql.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: postgres-example
namespace: default
spec:
# Nombre de réplicas PostgreSQL (instances dans le cluster)
replicas: 3
# Configuration explicite des ressources
resources:
cpu: 2000m # 2 vCPU par instance
memory: 2Gi # 2 GiB de RAM par instance
# Utilisation d’un preset si resources est vide
resourcesPreset: micro
# Volume persistant pour chaque instance PostgreSQL
size: 10Gi
# Classe de stockage (laisser vide pour utiliser celle par défaut du cluster)
storageClass: "replicated"
# Exposer la base à l’extérieur du cluster (LoadBalancer si true)
external: false

Paramètres d'application spécifique

ParamètreTypeDescriptionDéfautRequis
postgresqlobjectPostgreSQL server configuration{}Non
postgresql.parametersobjectPostgreSQL server parameters{}Non
postgresql.parameters.max_connectionsintMaximum number of concurrent connections to the database server (par défaut : 100)100Non
quorumobjectQuorum configuration for synchronous replication{}Non
quorum.minSyncReplicasintMinimum number of synchronous replicas that must acknowledge a transaction0Non
quorum.maxSyncReplicasintMaximum number of synchronous replicas that can acknowledge a transaction0Non
usersmap[string]objectUsers configuration{...}Non
users[name].passwordstringPassword for the usernullOui
users[name].replicationboolWhether the user has replication privilegesnullNon
databasesmap[string]objectDatabases configuration{...}Non
databases[name].rolesobjectRoles for the databasenullNon
databases[name].roles.admin[]stringList of users with admin privileges[]Non
databases[name].roles.readonly[]stringList of users with read-only privileges[]Non
databases[name].extensions[]stringExtensions enabled for the database[]Non

Exemple de configuration YAML

postgresql.yaml
spec:
replicas: 3
size: 10Gi
storageClass: replicated
resourcesPreset: medium

# Configuration serveur PostgreSQL
postgresql:
parameters:
max_connections: 200
shared_buffers: 512MB
work_mem: 64MB

# Configuration quorum pour la réplication synchrone
quorum:
minSyncReplicas: 1
maxSyncReplicas: 2

# Utilisateurs
users:
admin:
password: StrongAdminPwd123
replication: true
appuser:
password: AppUserPwd456
readonly:
password: ReadOnlyPwd789

# Bases de données
databases:
myapp:
roles:
admin:
- admin
readonly:
- readonly
extensions:
- hstore
- uuid-ossp

analytics:
roles:
admin:
- admin
readonly:
- appuser
extensions:
- pgcrypto

Paramètres de backup

ParamètreTypeDescriptionDéfautRequis
backupobjectBackup configuration{}Non
backup.enabledboolEnable regular backupsfalseNon
backup.schedulestringCron schedule for automated backups"0 2 * * * *"Non
backup.retentionPolicystringRetention policy"30d"Non
backup.destinationPathstringPath to store the backup (i.e. s3://bucket/path/)"s3://bucket/path/to/folder/"Oui
backup.endpointURLstringS3 Endpoint used to upload data to the cloud"http://minio-gateway-service:9000"Oui
backup.s3AccessKeystringAccess key for S3, used for authentication<your-access-key>Oui
backup.s3SecretKeystringSecret key for S3, used for authentication<your-secret-key>Oui

Pour sauvegarder une base de données PostgreSQL, un stockage externe compatible S3 est requis.

Pour activer les sauvegardes régulières :

  1. Mettez à jour la configuration de votre application PostgreSQL.
  2. Passez le paramètre backup.enabled à true.
  3. Renseignez le chemin de destination ainsi que les identifiants dans les champs backup.*.

Exemple de configuration YAML

postgresql.yaml
## @param backup.enabled Enable regular backups
## @param backup.schedule Cron schedule for automated backups
## @param backup.retentionPolicy Retention policy
## @param backup.destinationPath Path to store the backup (i.e. s3://bucket/path/to/folder)
## @param backup.endpointURL S3 Endpoint used to upload data to the cloud
## @param backup.s3AccessKey Access key for S3, used for authentication
## @param backup.s3SecretKey Secret key for S3, used for authentication
backup:
enabled: false
retentionPolicy: 30d
destinationPath: s3://bucket/path/to/folder/
endpointURL: http://minio-gateway-service:9000
schedule: "0 2 * * * *"
s3AccessKey: oobaiRus9pah8PhohL1ThaeTa4UVa7gu
s3SecretKey: ju3eum4dekeich9ahM1te8waeGai0oog

Paramètres de restauration de backup

ParamètreTypeDescriptionDéfautRequis
bootstrapobjectBootstrap configuration{}Non
bootstrap.enabledboolRestore database cluster from a backupfalseNon
bootstrap.recoveryTimestringTimestamp (PITR) jusqu’auquel la restauration doit s’effectuer (format RFC 3339). Vide = dernière sauvegarde""Non
bootstrap.oldNamestringNom du cluster PostgreSQL avant suppression""Oui

Hikube en charge la restauration à un instant donné (Point-In-Time Recovery - PITR).
La récupération s’effectue en créant une nouvelle instance PostgreSQL avec un nom différent, mais une configuration identique à celle de l’instance d’origine.

Étapes

  1. Créez une nouvelle application PostgreSQL.
  2. Donnez-lui un nom différent de l’instance d’origine.
  3. Activez le paramètre bootstrap.enabled.
  4. Renseignez :
    • bootstrap.oldName : le nom de l’ancienne instance PostgreSQL.
    • bootstrap.recoveryTime : l’instant jusqu’auquel restaurer, au format RFC 3339. Si laissé vide, la restauration se fera jusqu’au dernier état disponible.

Exemple de configuration YAML

postgresql.yaml
bootstrap:
enabled: true
oldName: "postgres-example" # nom de l’ancienne instance
recoveryTime: "2025-01-15T10:30:00Z" # restauration à un instant précis (RFC 3339)

resources et resourcesPreset

Le champ resources permet de définir explicitement la configuration CPU et mémoire de chaque réplique PostgreSQL.
Si ce champ est laissé vide, la valeur du paramètre resourcesPreset est utilisée.

Exemple de configuration YAML

postgresql.yaml
resources:
cpu: 4000m
memory: 4Gi

⚠️ Attention : si resources est défini, la valeur de resourcesPreset est ignorée.

Preset nameCPUMémoire
nano250m128Mi
micro500m256Mi
small1512Mi
medium11Gi
large22Gi
xlarge44Gi
2xlarge88Gi