Afin de pouvoir simuler un cluster de plus de 5 machine il est plus simple d’utiliser docker machine. Ce logiciel permet de rapidement lancer des machines virtuelles avec Docker préinstallé et propose différentes option pour faire fonctionner swarm directement.
Par exemple :
docker-machine create -d virtualbox keystore
Cette commande crée une machine virtuelle dans virtualbox et y installe un systeme simple contenant Docker et s’apellant keystore
Il faut ensuite installer Consul qui va se charger de stocker les IP des différentes machines du cluster :
docker run -d \
-p "8500:8500" \
-h "consul" \
progrium/consul -server -bootstrap
De la même manière il est possible de créer un cluster très rapidement comme suit :
Pour démarer un master :
docker-machine create \
-d virtualbox \
--swarm --swarm-master \
--swarm-discovery="consul://$(docker-machine ip keystore):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip keystore):8500" \
--engine-opt="cluster-advertise=eth1:2376" \
node-1
Pour connecter un client :
docker-machine create -d virtualbox \
--swarm \
--swarm-discovery="consul://$(docker-machine ip keystore):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip keystore):8500" \
--engine-opt="cluster-advertise=eth1:2376" \
node-2
On peut voir qu’il est possible de récupérer les IP de machines créées auparavant avec ‘docker-machine ip keystore’
Exemple de cluster fonctionnel :
Capture d’écran cluster
Le cluster peut ensuite être manipulé très simplement de la façon suivante :
eval $(docker-machine env keystore)
cette commande va modifier les variables d’environement de Docker afin que la machine se connecte aux machines virtuelles docker. Les machines virtuelles exposent le port du daemon Docker et le client peut donc s’y connecter.
Si on veut se connecter au master du swarm docker il faut lancer eval $(docker-machine env –swarm node-1)
Pour ce genre d’architecture complexe le plus simple est d’utiliser docker-compose. Ce programme permet, à partir d’un fichier YAML de démarer les containers indiqué avec les option indiquées.
Pour notre cas je me suis inspiré de celui ci il suffit ensuite après avoir chargé les variables d’environement du swarm de lancer : docker-compose up
Pour rajouter des worker la commande est la suivante : docker-compose scale spark-worker=x avec x le nombre total de worker souhaités.
Résultat :
Capture d’écran spark + hdfs
On voit que les workers on été dispatché sur les différentes machines. Namenode est le noeud principal hdfs et datanode 1 et 2 correspondent au stockage. Les deux premiers containers de la liste sont des interfaces web pour spark et hdfs.