Je vous présente le ClusterHat pour Raspberry. Celui-ci utilise des PI Zero et un PI 2, 3 ou 4 pour avoir un mini-cluster. Ce montage m'intéresse pour me familiariser avec Docker et les outils de haute-disponibilité comme Swarm. Etant donné que je débute avec Docker, je resterai assez basique sur ce système. Je vais d'abord réaliser ce tutoriel sur l'installation du ClusterHat en vous donnant quelques astuces que j'ai glanées sur la toile.
1 - Installation physique
Le kit Cluster Hat acheté chez Kubii contient la platine se fixant sur un Raspberry, quatre PI Zero, quatre carte SD Noobs, la visserie et le câble USB.
Il faudra rajouter un Raspberry PI 2 ou 3, une alimentation 5v 2,5 A, un clavier (dans mon cas un mini-clavier USB), un écran (ou une liaison USB to TTL) et bien sûr une connexion ethernet (avec une box fournissant du DHCP).
L'installation physique du ClusterHat ne pose pas de problème. Les explications sur le site du constructeur sont claires. Si vous installez un cordon USB to TTL pour le port console, repérez les connexions avant d'installer les deux premiers PI Zero. Le fil rouge ne servira pas à moins d'avoir un port USB suffisant pour alimenter tout ce petit monde. Privilégiez une alimentation dédiée.
2 - Installation du système
Avant de démarrer ce matériel, il faut installer le système sur le Raspberry PI 3 et les PI Zero. Toutes les instructions sont présentes sur le site du constructeur. J'ai choisi l'onglet Simple pour commencer. Depuis ma première installation, il y a eu pas mal de changement sur le site. Il est possible de choisir deux modes réseaux : le NAT et le BRIDGE. Debian Buster est fourni dans ces image et il y a trois type images pour le raspberry supportant la carte : Full, Standard et Lite. Il faudra copier les images pour le Controller (Rapberry PI 3) et les quatre PI Zero (attention les images sont différentes).
Les PI Zero, grâce à l'utilisation de Composite USB Gadgets, obtiennent un adresse IP en passant par le port USB. Cette configuration permet l'utilisation de l'USB comme une interface série ou ethernet par exemple. Si vous êtes curieux, vous pouvez voir la configuration du fichier config.txt les lignes suivantes :
Les PI Zero, grâce à l'utilisation de Composite USB Gadgets, obtiennent un adresse IP en passant par le port USB. Cette configuration permet l'utilisation de l'USB comme une interface série ou ethernet par exemple. Si vous êtes curieux, vous pouvez voir la configuration du fichier config.txt les lignes suivantes :
# Load overlay to allow USB Gadget devices dtoverlay=dwc2,dr_mode=peripheral
Et le fichier cmdline.txt, vous trouverez la ligne suivante indiquant à l'usb le mode serial.
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=4d3ee428-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
2.1 - Installation en mode NAT
Pour le Controller, on peut choisir l'image CNAT Lite Controller sans interface graphique. Ce mode permet de natter les interfaces réseaux des PI Zero passant pas les gadgets USB. Les PI Zero ne seront accessibles qu'à partir du Controller.
L'utilisation de l'image en mode NAT, impose la récupération d'une adresse IP privé grâce à l'utilisation de Composite USB Gadgets. Cette configuration spécifique permet l'utilisation de l'USB comme une interface série ou ethernet par exemple.
L'utilisation de l'image en mode NAT, impose la récupération d'une adresse IP privé grâce à l'utilisation de Composite USB Gadgets. Cette configuration spécifique permet l'utilisation de l'USB comme une interface série ou ethernet par exemple.
2.2 - Installation en mode BRIDGE
Pour le Controller, on peut choisir l'image CBRIDGE Lite Controller sans interface graphique. Ce mode permet de connecter les interfaces PI Zéro sur un commutateur virtuel faisant office de pont. On pourra alors attribuer des adresses IP sur le même réseau que le controller.
Ce mode est très pratique pour réaliser une déploiement par Ansible.
Ce mode est très pratique pour réaliser une déploiement par Ansible.
2.3 - Préparation du matériel
Avant de démarrer ce matériel, il faut installer le système sur le Raspberry PI 3 et les PI Zero. Toutes les instructions sont présentes sur le site du constructeur. J'ai choisi l'onglet Simple pour commencer. Depuis ma première installation, il y a eu pas mal de changement sur le site. Il est possible de choisir deux modes réseaux : le NAT et le BRIDGE. Debian Buster est fourni dans ces image et il y a trois type images pour le raspberry supportant la carte : Full, Standard et Lite. Il faudra copier les images pour le Controller (Rapberry PI 3) et les quatre PI Zero (attention les images sont différentes). Pour le Controller, j'ai choisi l'image Lite (pour un PI 3+, il faudra choisir l'image NAT Lite Controller) sans interface graphique.
Si vous voulez utilisez les images stretch, il faudra récupérer les ISO dans les archives de ClusterHat à cette adresse : https://dist1.8086.net/clusterctrl/stretch/2019-04-08/
Pour les quatre cartes SDRam, il suffira d'ajouter le fichier ssh dans la partition boot.
Si vous voulez utilisez les images stretch, il faudra récupérer les ISO dans les archives de ClusterHat à cette adresse : https://dist1.8086.net/clusterctrl/stretch/2019-04-08/
Pour les quatre cartes SDRam, il suffira d'ajouter le fichier ssh dans la partition boot.
2.3a - NAT
Normalement, si vous connectez votre raspberry PI 3 au réseau, le système va récupérer un adresse dynamique. Lors du démarrage des Pi Zéro, ceux-ci vont récupérer les adresses internes du réseau 172.19.181.0.
2.3b - BRIDGE
Au premier démarrage, il faudra affecter une adresse IP à l'interface br0.
interface br0 static ip_address=192.168.1.70/24 #ClusterCTRL static routers=192.168.1.1 static domain_name_servers=192.168.1.1 8.8.8.8 fallback clusterctrl_fallback_br0
Pour les Pi Zéro, préparer les images comme pour les Pi 4. Créez un fichier ssh dans la partition boot. Pour l’adresse IP, modifiez le fichier /etc/dhcpcd.conf comme ceci.
interface usb0 static ip_address=192.168.1.71/24 #ClusterCTRL static routers=192.168.1.1 static domain_name_servers=192.168.1.1 8.8.8.8 fallback clusterctrl_fallback_usb0
On affectera les adresses 71 à 74. On peut réaliser cette opération avant de lancer les systèmes en montant les partitions de la carte sur un système Linux.
-
Activer le ssh pour les PI Zero
- Avant d'installer les carte SD dans les raspberry, il faut activer la configuration ssh pour pouvoir se connecter sur les PI Zero. C'est obligatoire, sinon on pourra pas ajouter nos machines dans le cluster Docker. Pour demander l'activation du ssh, il suffit de créer un fichier vide avec comme nom ssh sans extension. Lors du premier démarrage, le ssh sera automatiquement configuré.
3 - Configuration du système
Toutes les cartes sont installées, alors c'est parti. Pour les nouvelles ISO, le démarrage fait une extension automatique du disque et redémarre le système. On utilise une alimentation assez puissante pour éviter les alertes de tension basse. On se connecte d'abord sur le Controller. Attention le système est configuré pour un clavier QWERTY. Avec les dernière versions de l'ISO, Il faut saisir le mot de passe de l'utilisateur pi comme ci-dessous.
clusterctrl
Avec les anciennes versions, le mot de passe est clusterhat. Il faudra penser à saisir le q pour le a en clavier AZERTY.
Pour la première configuration, pensez à modifier avec la commande sudo raspi-config :
- L'espace de stockage de votre carte (use entire disk) pour les anciennes versions
- La localisation du système et le changement du clavier en Français
- Change l'option vidéo à 16 Go (pour l'ISO Lite)
- Modifier le mot de passe
- Activer le ssh si cela n'a pas été fait avec le fichier ssh
dhcpcd -k dhcpcd
Maintenant que notre Controller est opérationnel, lancer les PI Zero avec la commande suivante :
clusterctrl onou
clusterhat on
Les PI Zéro s'activent. En mode NAT, on récupère les informations du fichier /etc/dhcpcd.conf, section profile clusterctrl_fallback_usb0. Exemple pour le p1
profile clusterctrl_fallback_usb0 static ip_address=172.19.181.1/24 #ClusterCTRL static routers=172.19.181.254 static domain_name_servers=8.8.8.8 208.67.222.222
En mode NAT, on peut vérifier en lançant les commandes suivantes :
ping p1.local … ping p2.local … ping p3.local … ping p4.local …
Normalement, on affectera pour chaque pi, les adresses respectives 172.19.181.1, 172.19.181.2, 172.19.181.3 et 172.19.181.4. Pour chaque PI Zero, il faudra configurer le système. Comme vous avez activé le SSH (voir plus haut), connectez-vous sur chaque PI Zero à partir du Controller avec la commande suivante pour le p1 par exemple :
ssh pi@p1.local
Si vous êtes en mode BRIDGE et que vous avez configuré vos cartes avec des adresses statique, connectez-vous avec l'adresse IP sélectionnée.
-
Vérifier la connectivité
- Avant l'activation des PI Zéro, vous obtenez ceci pour la configuration des cartes réseaux. Notre exemple est réalisé avec le bridge, l'adresse IP de br0 étant initialisée.
sudo ip a
1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether b8:27:eb:f5:6e:29 brd ff:ff:ff:ff:ff:ff
6: wlan0:mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether b8:27:eb:a0:3b:7c brd ff:ff:ff:ff:ff:ff
7: brint:mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether f2:35:10:86:ce:de brd ff:ff:ff:ff:ff:ff
inet 172.19.180.254/24 brd 172.19.180.255 scope global brint
valid_lft forever preferred_lft forever
inet6 fe80::f035:10ff:fe86:cede/64 scope link
valid_lft forever preferred_lft forever
11: br0:mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether b8:27:eb:f5:6e:29 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.70/24 brd 192.168.1.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 fe80::b0bd:a839:69b7:deaa/64 scope link
valid_lft forever preferred_lft forever
Après activation, vous avez cecisudo ip a
1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether b8:27:eb:f5:6e:29 brd ff:ff:ff:ff:ff:ff
6: wlan0:mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether b8:27:eb:a0:3b:7c brd ff:ff:ff:ff:ff:ff
7: brint:mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether f2:35:10:86:ce:de brd ff:ff:ff:ff:ff:ff
inet 172.19.180.254/24 brd 172.19.180.255 scope global brint
valid_lft forever preferred_lft forever
inet6 fe80::f035:10ff:fe86:cede/64 scope link
valid_lft forever preferred_lft forever
11: br0:mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether b8:27:eb:f5:6e:29 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.70/24 brd 192.168.1.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 fe80::b0bd:a839:69b7:deaa/64 scope link
valid_lft forever preferred_lft forever
13: ethpi1:mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether 00:22:82:ff:fe:01 brd ff:ff:ff:ff:ff:ff
inet6 fe80::222:82ff:feff:fe01/64 scope link
valid_lft forever preferred_lft forever
14: ethpi4:mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether 00:22:82:ff:fe:04 brd ff:ff:ff:ff:ff:ff
inet6 fe80::222:82ff:feff:fe04/64 scope link
valid_lft forever preferred_lft forever
15: ethpi3:mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether 00:22:82:ff:fe:03 brd ff:ff:ff:ff:ff:ff
inet6 fe80::222:82ff:feff:fe03/64 scope link
valid_lft forever preferred_lft forever
16: ethpi2:mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether 00:22:82:ff:fe:02 brd ff:ff:ff:ff:ff:ff
inet6 fe80::222:82ff:feff:fe02/64 scope link
valid_lft forever preferred_lft forever
Les interfaces USB des PI Zero ethpi1 à ethpi4 sont connecté à l'interface br0.
Pensez au clavier pour le mot de passe par défaut clusterhat (clusterhqt avec un clavier azerty). Modifiez le système :
- L'espace de stockage de votre carte (use entire disk) pour les anciennes versions
- La localisation du système et le changement du clavier en Français
- Modifier le mot de passe
Pour arrêter les PI Zero, utilisez cette commande :
clusterctrl offou
clusterhat off
Il est possible d'activer ou désactiver chaque PI Zero avec les commandes suivantes :
clusterctrl on p1 clusterctrl off p1ou
clusterhat on p1 clusterhat off p1
L'installation de notre Clusterhat est terminée, passons à l'installation de Docker.
Références
Le site officiel de Clusterhat : https://clusterhat.com/
Le site d'Adafruit : https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget?view=all
Le site d'Adafruit : https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget?view=all