Déploiement de la base de données
Introduction
Avant de se plonger dans la construction du cluster avec K3s, on va d’abord déployer la source de données de notre cluster qui servira à son installation plus tard. Pour cela, on va avoir besoin d’un moteur de base de données. La documentation de K3s précise qu’il supporte MySQL, PostGreSQL et enfin ETCD mais dans sa version 3.5.9 uniquement (juin 2024). Comme Kubernetes s’appuie sur une base de donnée de type clé/valeur pour sa configuration, ETCD est le meilleur candidat pour ça. Il est léger, fiable et rapide.
Préparation
Fichier docker-compose
Au choix, vous passez la commande docker pour lancer le conteneur, ou bien vous décidez de passer par la commande docker-compose. Personnellement, ce sera mon choix, voici mon fichier docker-compose:
version: "3.9"
services:
k3s:
image: quay.io/coreos/etcd:v3.5.9
container_name: "k3s-etcd"
hostname: "etcd"
restart: "unless-stopped"
volumes:
- "/volume1/docker/etcd/data:/etcd-data"
- "/volume1/docker/etcd/certs:/etc/ssl/certs"
command: >
/usr/local/bin/etcd
--name homenas
--data-dir /etcd-data
--initial-advertise-peer-urls http://${NODE1}:2380
--listen-peer-urls http://0.0.0.0:2380
--advertise-client-urls http://${NODE1}:2379
--listen-client-urls http://0.0.0.0:2379
--initial-cluster homenas=http://${NODE1}:2380
ports:
- 19379:2379
- 19380:2380
Quelques explications:
- L’image de base est celle d’ETCD avec le tag
v3.5.9, on récupère l’image chez quay.io. - Le conteneur s’appelera
k3s-etcdune fois qu’il sera lancé - Le hostname à l’intérieur du conteneur sera
etcd - Si le conteneur est arrêté, Docker ne le démarre pas. Si le conteneur est démarré, Docker le relance systématiquement en cas d’échec.
- Le conteneur a besoin de deux répertoires indispensables pour stocker ses données:
- Les datas dans
/edcd-data(à l’intérieur du conteneur) qui seront déposées sur l’hôte docker dans/volume1/docker/etc/data - Les certificats dans
/etc/ssl/certsqui seront générés sur l’hôte docker dans/volume1/docker/etc/certs
- Les datas dans
- La commande
etcddémarre la BDD avec des arguments de configuration - Le conteneur expose les ports:
- TCP/19379 sur le port TCP/2379 d’ETCD dans le conteneur
- TCP/19380 sur le port TCP/2379 d’ETCD dans le conteneur
Remarque : La variable NODE1 vaut 127.0.0.1.
Déploiement
Démarrage de la stack
$ cd /volume1/docker/etcd/
$ sudo docker-compose up -d
Donne le statut du conteneur
$ sudo docker container ls
Arrête et supprime la stack
$ sudo docker-compose down
Test de bon fonctionnement
Lorsque le conteneur ETCD est démarré. Il est accessible avec l’adresse IP de l’hôte Docker (homenas) sur le port TCP/19379 (Le port 19380 sert à la réplication lorsque ETCD est en cluster).
On peut tester la connexion et la disponibilité d’ETCD à l’aide de l’outil etcdctl. Il suffit d’enchainer 3 tests simples :
- On ajoute une clé et sa valeur dans la base
- On requête la clé pour obtenir sa valeur
- On supprime la clé de la base
export ETCDCTL_API=3 >> $HOME/.bashrc
export ETCDCTL_API=3
etcdctl --endpoints=http://192.168.1.20:19379 put foo "hello world!"
etcdctl --endpoints=http://192.168.1.20:19379 get foo
hello world!
etcdctl --endpoints=http://192.168.1.20:19379 del foo
1