Revue rapide des operators et alternatives pour déployer du Postgresql sur Kubernetes


30/01/2020 postgresql helm kubernetes chart operator

Dans le cadre du déploiement d’applications stateful sur un cluster kubernetes, je me suis posé la question des solutions me permettant de déployer une instance PostgreSQL. Ce comparatif est succint et comporte surement un certain nombre d’approximations. C’est le résultat de quelques heures de veille et de tests sur le sujet (jusqu’à plusieurs semaines pour KubeDB).

Chart helm PostgreSQL

URL https://github.com/helm/charts/tree/master/stable/postgresql
Mainteneur Bitnami
Version actuelle 8.2.1
Version testée 7.6 & 8.2.1
Version PG disponible 9.6, 10.11, 11.6, 12.1
Version PG testée 11.6
Replication O
Failover N
Backup N
Gestion Upgrade PG O
Metrics Prometheus

Le chart est basé sur des images custom Bitnami plutôt que sur les images officielles Postgresql. Il reste toutefois possible d’utiliser les images officielles. Ce choix d’image custom se justifie par la fonctionnalité de réplication et d’avoir des images non root. Il faudra partir sur une version Debian (10.0 pour la version 8+ du chart), CentOS 7.0 ou Oracle Linux 7.

Le chart offre d’autres fonctionnalités (authentification ldap, personnalisation de pg_hba.conf, etc) et s’avère assez riche. Il peut donc a priori gérer des cas basiques à plus avancés.

Il existe un chart pour avoir une version Postgresql High Availability (non testé).

Stolon

URL https://github.com/sorintlab/stolon
Mainteneur Sorint OSS
Version actuelle 0.15.0
Version testée -
Version PG disponible 9.4+, 10, 11, 12
Version PG testée -
Replication O
Failover O
Backup N
Gestion Upgrade PG ?
Metrics ?

La solution s’appuie par défaut sur les images officielles Postgresql mais il est possible d’utiliser ses propres images. Si la solution semble intéressante, je l’ai trouvé complexe, même si cela se justifie. Le fait d’avoir de multiples composants (keeper pour les instances Postgresql, des proxy pour la gestion de la connexion à la base de données et enfin des sentinels qui surveillent le tout) m’a un peu rebuté, tout comme le fait d’avoir un binaire de plus à utiliser. La documentation est assez rudimentaire également pour bien apprécier le produit.

KubeDB

URL https://kubedb.com/
Mainteneur AppsCode
Version actuelle 0.13.0-rc0
Version testée 0.13.0-rc0
Version PG disponible 9.5/9.6, 10.2/10.6, 11.1
Version PG testée 11.1
Replication O
Failover ?
Backup O
Gestion Upgrade PG ?
Metrics Prometheus

Le produit est prometteur mais manque encore de stabilité : il se base sur un operateur, il est édité par une société assez implémentée dans l’écosystème kubernetes et il permet de gérer plusieurs bases de données, dont Postgresql.

L’initialisation est assez simple et le produit semble bien pensé et offre l’ensemble des fonctionnalités que l’on peut attendre d’un operator pour gérer une base Postgresql (initialisation, réplication, sauvegarde, monitoring, etc)

Pour les backups, le produit s’appuie sur stash pour faire des backups dans des espace de stockages distants (S3, Swift, etc). Pour Restic et Swift, il faut un conteneur de type object storage ‘normal’. En voulant utiliser le stockage Cloud Archive d’OVH, l’intégration ne fonctionnait pas bien.

Je ne l’ai pas retenu notant des restart des pods à répétition en lisaison avec le mécanisme d’élection de leaders qui n’aboutissait pas. J’espère que les prochaines versions vont me permettre de tester à nouveau le produit.

Crunchy

URL https://access.crunchydata.com/documentation/postgres-operator/4.1.0/
Mainteneur CruncyData
Version actuelle 4.1
Version testée -
Version PG disponible 9.5/9.6, 10.10, 11.5
Version PG testée -
Replication O
Failover O
Backup O
Gestion Upgrade PG ?
Metrics Prometheus

Déjà, voir que l’installation se fait via Ansible ou via des commandes bash et qu’il faut un binaire spécifique pour interagir avec la plateforme, je coince un peu. La solution semble aussi très riche mais complexe à prendre en main. Venant de KubeDB, j’avoue avoir passé rapidement mon chemin.

Zalando Postgres Operator

URL https://github.com/zalando/postgres-operator
Mainteneur Zalando
Version actuelle 1.3.1
Version testée -
Version PG disponible 9.6, 10, 11
Version PG testée -
Replication O
Failover ?
Backup O
Gestion Upgrade PG ?
Metrics Prometheus

Zalando a rendu public son operator kubernetes. Il s’appuie sur leur solution patroni pour créer un cluster haute disponibilité. Sortant de mon test KubeDB, j’ai trouvé leur modèle trop complexe et avec des fonctionnalités dont on a a priori pas besoin (les Teams ?). J’ai du coup moins l’impression de manipuler une base de données Postgres classique.

EDB Postgres on Kubernetes

EntrepriseDB, un acteur majeur de l’écosystème Postgres, a publié en septembre dernier son operator : EDB Postgres on Kubernetes. Il ne semble pas open source et l’accès aux conteneurs demande une authentification. Je ne suis donc pas allé plus loin.

Conclusion

Alors que mes besoins sont très simples (hébergement d’instances NextCloud pour quelques utilisateurs à chaque fois) et que j’utilisais pour le moment des instances Postgresql sur un seul serveur dans des conteneurs Docker (avec la gestion des backups via un container dédié), j’avoue être resté un peu sur ma fin. J’avais fondé beaucoup d’espoirs sur KubeDB mais qui tardent à se réaliser. En attendant, je suis repassé sur le chart helm qui fonctionne bien. Il faut juste prévoir un job annexe pour les backups.

Certains pourront me dire qu’il est encore trop tôt pour faire du statefull sur kubernetes ou bien qu’il faut utiliser des base de données “cloud native”. Pour le premier point, c’est aussi avec ces petits instances non critiques que l’on peut se faire la main sur le sujet et après tout, je fais ça depuis des années avec des containers Docker sans soucis. Pour le second point, faut-il encore que ces bases existent et que les outils associés les utilisent…

Le Blog

Nous partageons ici notre veille et nos réflexions

Nuage de tags

docker kubernetes traefik ansible elasticsearch kafka postgres influxdb grafana timeseries python aws redis sécurité tick cloud mysql cassandra helm ovh swarm test warp10 chronograf docker-compose telegraf terraform timescaledb confluent ksql log machine-learning microservice résilience serverless spark angularjs api architecture cncf container git graphql hashicorp java javascript opensource ptsm rancher service-mesh stream windows arm bilan csp cérénit devops dns documentation elastic flux gcp gitlab hpkp iac ingress jenkins kafka-streams kapacitor kibana lambda lean licence maintenance microsoft mobile monitoring nginx npm optimisation orientdb perspective prometheus redhat rest rethinkdb reverse-proxy s3 sauvegarde scaleway sql ssh agile apm automatisation azure bash big-data cert-manager certificat ci/cd cli cluster containerd continous-delivery continous-integration cookie dashboard diff fluxlang framework gdpr grav hsts http/3 https hypriot hébergement influxace influxdata istio json k3s kubedb lets-encrypt linux load-balancer meetup molecule mongodb operator php pip pipeline postgresql raspberrypi reaper replication rook rpi rsyslog scale secrets société solr sre systemd tls vault virtualenv vscode vue.js wagtail yarn accessibilité akka alerte alibaba amazon-emr anonymisation anthos apache-pulsar ara audit bastion beam beat bigdatahebdo bounded-context branche brigade browser buildkit cahier-des-charges cassandra-reaper cd cdc ceph certificats chart checklist chrome ci cloud-init cloud-native cloud-storage clusterip cnab cockroachdb code codeurs-en-seine confluence conftest consul continous-deployment coreos cors covid19 cqrs crash cron crontab csrf css curl d3.js daemonset data-pipelining data.gouv.fr datacenter dataviz date ddd debezium debian delta deployment deprek8 desktop devoxx distributed-systems dive docker-app docker-hub docker-registry docker-swarm documentdb dokcer draft drop-in déploiement développement-du-site e-commerce ebs ec2 edge elassandra electron elk engineering entreprise ergonomie etcd event-sourcing faas facebook faisabilité falcor feature-policy feed filebeat firebase firefox fish flash flask fleet flink fluentd formation foundation frontend fsync fullstack github gke glacier glowroot google google-cloud-next gpu grid géospatial hacker hadoop haproxy hdfs header html html5 http hue ia iaac ibm immutable incident index influxcloud influxdays infrastructure-as-code ingénierie inspec jq jquery jwt k3d k8s k9s kotlin kubeadm kubecon kubectl laravel linky liste-de-diffusion loadbalancer logstash logstatsh loi maesh mailing-list management mariadb message metallb micro-service mot-de-passe multi-cloud médecine métrique newsletter nodeport nomad nosql null object-storage observabilité opa opendata openebs openmetrics openshit openssh openweb over-engineering packaging pandas partiql password percona performance persistent-volume-claim pipenv pod portainer prediction prescience publicité pubsub push pyenv quasardb quay queue quic ram rambleed raml react recaptcha recherche redistimeseries registry reindex reinvent reliability responsive revocation revue-de-code rkt rolespec root rpo rto runc rwd scanner schema sdk search select serverless-architecture service-worker sha1 sharding shell shipyard sidecar souveraineté-numérique spinnaker spécifications sri ssh-agent ssl statistique superset sympa syslog-ng test-unitaire tidb tiers timer timezone training travail tsl ubuntu unikernel unit ux vendredi vie-privée virtualbox virtualisation vitess vm vnc volume voxxeddays vpc web yubikey

Syndication

Restez informé(s) de notre actualité en vous abonnant au flux du blog (Atom)