Cet article traite de la mise en place d’une base de données PostgreSQL pour votre environnement de développement sein d’un cluster Kubernetes. En prérequis, vous devez avoir préparé un espace de stockage NFS comme indiqué dans l’article précédent.
Nous allons explorer en détail deux piliers de Kubernetes : les déploiements et les pods. De plus nous verrons comment diagnostiquer les problèmes.
Étape 3 : Déploiements de Postgres dans le cluster Kubernetes
Qu’est-ce qu’un déploiement et un pod dans Kubernetes ?
Un « déploiement » Kubernetes est un objet qui gère une collection de « pods ». Le déploiement est responsable de la mise à l’échelle, et de la gestion des mises à jour des pods. Il sert à scaller facilement une application en ajoutant ou en supprimant des pods selon les besoins. Notez que dans notre cas nous n’utiliserons qu’un seul pod.
Un pod Kubernetes, quant à lui, est l’unité fondamentale de délivrance de service dans Kubernetes. Un pod représente une instance unique d’une application, avec son propre ensemble de processeurs, de mémoire et de stockage. Concept important sur K8 : les pods sont conçus pour être éphémères. En effet, ils peuvent être montés et démantelés automatiquement par Kubernetes suivant les besoins de l’application.
Création du déploiement Postgres
Passons dès maintenant à la pratique en créant un déploiement. Créez un nouveau fichier avec la commande nano postgres-dev-deploy.yml
avec le contenu suivant :
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-dev
spec:
replicas: 1
selector:
matchLabels:
app: postgres-dev
template:
metadata:
labels:
app: postgres-dev
spec:
containers:
- name: postgres-dev
image: postgres:16
env:
- name: POSTGRES_PASSWORD
value: "Votre mot de passe complexe et incassable"
ports:
- containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-dev-storage
volumes:
- name: postgres-dev-storage
persistentVolumeClaim:
claimName: postgres-dev-pvc
Dans ce fichier YAML, nous avons défini un déploiement appelé « postgres-dev » qui contient une seule réplique de pod. Le sélecteur de label « app: postgres-dev » permet de spécifier le nom des pods de ce déploiement. La section « template » définit les détails de l’image du container PostgreSQL et les chemins de montage des volumes. Enfin, la section « volumes » définit le volume PVC utilisé pour stocker les données de PostgreSQL.
Notez l’utilisation de l’image « postgres:16 » à la place de l’image « postgres:latest » qui aurait permis d’utiliser la dernière version de postgres automatiquement. Mais si nous utilisons « latest », le cluster mettra vos pods automatiquement à jour, et vous ne contrôlerez pas la version installée. Or, les fichiers de bases de données doivent être mis à jour manuellement. Si vos pods utilisent une version du serveur et de la DB différente ils ne pourront pas démarrer.
Maintenant que nous avons créé le fichier de définition du déploiement, nous allons l’injecter dans notre cluster Kubernetes :
kubectl apply -f postgres-dev-deploy.yaml -n dev-env
Vérification des éléments créés
Une fois le déploiement créé, nous pouvons voir les détails de celui-ci en exécutant la commande suivante :
kubectl describe deployment postgres-dev -n dev-env
Mais surtout, nous pouvons voir les pods associés à ce déploiement et leur statut en exécutant la commande suivante :
kubectl get pods -l app=postgres-dev -o wide -n dev-env
Cela nous donnera une liste de tous les pods créés pour ce déploiement. Comme tout s’est certainement bien passé, vous devriez voir un seul pod.
Étape 4 : Types d’erreurs et débogage
Types d’erreur possible
En réalité tout ne se passe pas toujours comme prévu, et plusieurs types d’erreurs peuvent apparaître. Voici quelques exemples courants :
- Erreurs de configuration : Lorsque la configuration du pod n’est pas correcte, il peut ne pas être possible de lancer le container.
- Erreurs de ressources : Si le node où le pod est schedulé n’a pas suffisamment de ressources (par exemple, de la mémoire vive ou du stockage), le pod ne pourra pas être lancé.
- Erreurs de réseau : Si le pod a des problèmes de réseau, il ne pourra pas communiquer avec les autres composantes de l’application.
- Erreurs de santé : Lorsque le pod est considéré comme non sain (par exemple, si le container est en train de crasher ou si le pod est en train de perdre ses connexions de réseau), Kubernetes peut décider de redéployer le pod ou de le mettre hors tension.
Pour déboguer ces erreurs, vous pouvez consulter les logs et les événements du pod. Les logs sont des enregistrements détaillés des activités du pod, tandis que les événements sont des notifications générées par Kubernetes lorsqu’il se produit quelque chose de significatif (par exemple, lorsque le pod est redéployé).
Accès aux logs et événements Kubernetes
Voici comment accéder aux logs et aux événements d’un pod :
- Utilisez la commande
kubectl logs
pour afficher les logs d’un pod spécifique :
kubectl logs -n dev-env postgres-dev-12345-abc
Note : Il est toujours possible d’utiliser la touche TAB du clavier pour autocompléter le nom des pods. Pensez à spécifier le namespace avant le nom du pod pour retrouver les pods de Postgres.
- Utilisez la commande
kubectl describe
pour afficher les détails d’un pod spécifique, y compris les logs et les événements. Par exemple, pour afficher les détails du pod « postgres-dev-12345-abc », utilisez la commande suivante :
kubectl describe pod -n dev-env postgres-dev-12345-abc
- Utilisez la commande
kubectl event
pour afficher les événements qui se produisent dans votre cluster Kubernetes. Vous pouvez filtrer les événements en fonction du type d’événement ou du nom du pod affecté. Par exemple, pour afficher les événements liés à un pod spécifique, utilisez la commande suivante :
kubectl event pod/postgres-dev-12345-abc
Le diagnostic des problèmes rencontré par vos pods se fait à partir de l’analyse des logs et évènements.
Redémarrage du pod
Si vous avez à redémarrer le pod Postgres il suffit de le supprimer, et le déploiement s’occupera de monter un nouveau pod immédiatement :
kubectl delete pod -n dev-env postgres-dev-12345-abc
Prochaine Étape: Mise à Disposition du Service sur le Réseau Local
Vous trouverez l’étape finale de ce guide dans le chapitre suivant. Nous y aborderons comment exposer votre base de données PostgreSQL au sein de votre réseau local.
Navigation
Sommaire du dossier : Mise en place de PostgreSQL sur un cluster Kubernetes: Guide étape par étape
Chapitres:
- Précédent : Configuration d’un Espace de Stockage Persistant pour PostgreSQL sur Kubernetes
- Déploiement et Débogage de PostgreSQL dans un Cluster Kubernetes
- Suivant : Exposer le service PostgreSQL sur votre réseau
- Création d’un service MySQL sur Kuberneter pour votre environnement de développement