Formation > Blog > Kubernetes > Comment déployer Postgresql sur Kubernetes

kubernetes postgresql

En tant qu’ingénieur de bases de données, éviter de configurer vos bases de données localement peut être amusant. Des infrastructures telles que Kubernetes vous permettent de déployer et de gérer des bases de données à l’aide de technologies de conteneurs. Ce guide vous aidera à apprendre comment exécuter une base de données PostgreSQL sur Kubernetes.

L’équipe Ambient IT

Kubegres

L’opérateur Kubernetes Kubegres simplifie considérablement le déploiement d’un cluster PostgreSQL avec Primary et Standby en utilisant des pods Kubernetes. Contrairement aux approches traditionnelles nécessitant la création manuelle de StatefulSets et d’autres artefacts, Kubegres introduit un nouvel objet, Kubegres, qui encapsule tous les éléments nécessaires. Voici comment déployer Kubegres sur un cluster Minikube :

$ minikube addons enable metrics-server
$ kubectl apply -f https://raw.githubusercontent.com/reactive-tech/kubegres/v1.16/kubegres.yaml

Ce simple déploiement crée plusieurs objets, tels que Namespace, CustomResourceDefinition, et Deployment, fournissant une abstraction puissante.

Avant de commencer

Avant de plonger tête la première dans le monde magique de Kubernetes, assurez-vous d’avoir ces outils dans votre boîte à outils :

  • Le moteur Docker installé et en cours d’exécution sur votre ordinateur.
  • Kubectl pour exécuter des commandes Kubernetes, installé sur votre ordinateur.
  • Un outil de gestion de cluster Kubernetes installé, comme Minikube. Dans ce cas, assurez-vous que Minikube fonctionne en utilisant la commande minikube start.

Pourquoi exécuter la base de données PostgreSQL sur Kubernetes ?

Cette approche vous permet d’exécuter la base de données PostgreSQL en tant que service (DaaS). Elle vous permet d’accéder et d’utiliser une base de données sans avoir à configurer ou à entretenir l’infrastructure nécessaire pour la faire fonctionner. Cela améliore les caractéristiques de la base de données telles que la mise à l’échelle, la haute disponibilité, les sauvegardes et les options de récupération. L’exécution de la base de données PostgreSQL sur Kubernetes vous permet de profiter des avantages suivants :

  • Exécuter la base de données PostgreSQL sur Kubernetes vous permet de rapidement mettre à l’échelle sur Kubernetes en ajoutant davantage de répliques (copies de la base de données) au besoin. Cela permet de mettre à l’échelle le trafic en fonction de l’utilisation de la base de données pour garantir une haute disponibilité.
  • Utiliser Kubernetes pour déployer PostgreSQL facilite la gestion du cycle de vie de votre base de données. Vous pouvez utiliser Kubernetes pour déployer, mettre à jour et gérer la disponibilité de votre base de données.
  • L’exécution de la base de données PostgreSQL sur Kubernetes garantit la disponibilité de votre base de données en redémarrant automatiquement les pods et les conteneurs en cas d’échec de l’instance PostgreSQL.
  • Le déploiement de PostgreSQL sur un cluster Kubernetes vous permet d’exécuter votre base de données dans n’importe quel environnement, qu’il s’agisse d’un cloud ou d’un site local. Cela rend votre base de données portable et facile à migrer au besoin.

Création des volumes

Parlons sérieusement un instant. Une base de données a besoin de données, n’est-ce pas ? Vous devez les lire et les écrire, ce qui signifie qu’elles doivent être persistantes. Lorsque vous déployez un service de base de données sur Kubernetes, un pod est associé à un volume pour stocker vos données. Alors, sortez vos chaussures de danse et créez un fichier db-persistent-volume.yaml. Dans ce fichier, créez une ressource pour configurer un Volume Persistant (PV) :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgresdb-persistent-volume
  labels:
    type: local
    app: postgresdb
spec:
  storageClassName: manual
  capacity:
    storage: 8Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/data/db"

C’est comme réserver un espace de stockage secret pour vos données.

Maintenant, pour permettre au cluster d’accéder à cet espace secret, vous devez créer une Demande de Volume Persistant (PVC) associée au Volume Persistant. Le PVC est l’invitation VIP pour la soirée de stockage de données. Créez un fichier db-volume-claim.yaml et construisez le PVC :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: db-persistent-volume-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 8Gi

Gestion des sauvegardes avec Kubegres

La gestion des sauvegardes avec Kubegres est facilement configurable. En créant un PersistentVolumeClaim (PVC) dédié et en ajoutant une planification dans le fichier de déploiement, Kubegres génère automatiquement des sauvegardes périodiques. Un exemple de configuration est illustré ci-dessous :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-backup-pvc
  namespace: kubegres-system
spec:
  storageClassName: "standard"
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Mi

Création des secrets de la base de données

Les bases de données ont leurs petits secrets, n’est-ce pas ? Utilisez Kubernetes pour créer ces secrets. Utilisez ConfigMap pour créer des variables d’environnement qui stockent les configurations de la base de données. Vous allez adorer créer un fichier db-configmap.yaml :

apiVersion: v1
kind: ConfigMap
metadata:
  name: db-secret-credentials
  labels:
    app: postgresdb
data:
  POSTGRES_DB: testDB
  POSTGRES_USER: testUser
  POSTGRES_PASSWORD: testPassword

Maintenant, PostgreSQL a son masque et son chapeau pour la soirée.

Personnalisation avec ConfigMap et PVC

Kubegres offre une personnalisation facile grâce à l’utilisation de ConfigMap et PVC. Les utilisateurs peuvent ajuster la configuration en créant leur propre ConfigMap, ainsi que gérer différents PVC pour les besoins en archivage, par exemple.

Création de la ressource de déploiement

La ressource de déploiement est comme le chef d’orchestre de cette danse. Elle gère un groupe de répliques de pods qui exécutent votre application sur Kubernetes. Elle s’occupe de tout, de l’image de votre application aux ports à exposer. Et bien sûr, elle veille à ce que les volumes nécessaires soient prêts à recevoir vos données. Pour cela, vous devez spécifier le PersistentVolumeClaim lors du déploiement. Créez un fichier db-deployment.yaml et configurez votre manifestation de déploiement PostgreSQL :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresdb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: postgresdb
  template:
    metadata:
      labels:
        app: postgresdb
    spec:
      containers:
        - name: postgresdb
          image: postgres
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: db-secret-credentials
          volumeMounts:
            - mountPath: /var/lib/postgres/data
              name: db-data
      volumes:
        - name: db-data
          persistentVolumeClaim:
            claimName: db-persistent-volume-claim

Création de « Service rESOURCE »

Le service, c’est un peu comme le DJ de cette soirée. Il expose le déploiement et offre un point d’accès réseau stable pour votre cluster. Créez un fichier db-service.yaml et ajoutez ce qui suit :

apiVersion: v1
kind: Service
metadata:
  name: postgresdb
  labels:
    app: postgresdb
spec:
  type: NodePort
  ports:
    - port: 5432
  selector:
    app: postgresdb

déploiement de PostgreSQL

Vous avez maintenant toutes les ressources dont vous avez besoin. Il est temps de faire bouger les choses sur Kubernetes. Commencez par déployer les volumes avant de créer les pods. Voici les commandes pour chaque étape :

Déployez le PV :

kubectl apply -f db-persistent-volume.yaml

Déployez le PVC :

kubectl apply -f db-volume-claim.yaml

Et bien sûr, vos conteneurs ont besoin de connaître les pas de danse. Déployez les variables d’environnement comme ceci :

kubectl apply -f db-configmap.yaml

Ensuite, créez le déploiement et ajoutez des répliques de pods :

kubectl apply -f db-deployment.yaml

Enfin, faites tourner la musique et exposez le cluster :

kubectl apply -f db-service.yaml

Pour finir

Pour vérifier si le pod est en pleine forme et danse comme il se doit, exécutez cette commande :

kubectl get all

Et si vous voulez une vue d’ensemble de tous les participants à cette danse, tapez :

minikube dashboard

Pour admirer le déploiement de la base de données, lancez cette commande :

kubectl exec -it postgresdb-5b9bf77c46-6xhx2 -- psql -h localhost -U testUser --password -p 5432 testDB

Points à retenir

N’oubliez pas de noter :

  • postgresdb-5b9bf77c46-6xhx2 est le nom du pod qui fait la fête avec votre base de données. Copiez le nom tel quel.
  • testUser est le nom d’utilisateur de la base de données créé avec ConfigMap.
  • testDB est le nom de la base de données créé avec ConfigMap.

Cette commande vous permet d’accéder à la base de données testDB que vous avez créée avec ConfigMap.

Alors, mettez vos chaussures de danse, car PostgreSQL danse maintenant sur la scène de Kubernetes. Une véritable performance en coulisses, n’est-ce pas ?

UNE QUESTION ? UN PROJET ? UN AUDIT DE CODE / D'INFRASTRUCTURE ?

Pour vos besoins d’expertise que vous ne trouvez nulle part ailleurs, n’hésitez pas à nous contacter.

ILS SE SONT FORMÉS CHEZ NOUS

partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp
partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp