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-etcd une 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/certs qui seront générés sur l’hôte docker dans /volume1/docker/etc/certs
  • La commande etcd dé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 :

  1. On ajoute une clé et sa valeur dans la base
  2. On requête la clé pour obtenir sa valeur
  3. 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