\newpage Cluster Swarm ============= ## Création du cluster ### De quoi s'agit-il ? Pour travailler sur un cluster, il faut avoir plusieurs machines. Au moins plus d'une ! TODO parler du clustering et du provisionning TODO parler des concurrents ### Provisionner des machines #### Automagiquement La solution magique consiste à passer par `docker-machine` pour créer des machines virtuelles automatiquement provisionnées avec Docker. Rien de plus simple, mais cela nécessite d'être dans un environnement dans lequel vous maîtrisez le shell et dans lequel vous pouvez créer des machines virtuelles. Si votre machine Linux est en fait une machine virtuelle hébergée par VirtualBox sous Windows, vous allez sans doute préférer la deuxième solution, que d'utiliser PowerShell et Docker4Windows[^amazon]. [^amazon]: Vous pouvez aussi vous inscrire sur [Amazon Web Services](https://aws.amazon.com/), `docker-machine` est capable, à partir de vos [clefs d'API](https://docs.docker.com/machine/examples/aws/), de créer et lancer des machines dans le cloud ! Et ce n'est pas le seul service de [cloud supporté](https://docs.docker.com/machine/drivers/) ! ##### Créer une machine Pour créer une nouvelle machine, nous allons utiliser la commande `docker-machine create`, en prenant soin de préciser le pilote à utiliser, les éventuelles options que prend ce pilote, ainsi que le nom que vous souhaitez donner à cette machine (les machines ne sont pas considérées comme jetables, leur nom vous permettra par exemple de relancer une machine plus tard) : ```shell docker-machine create --driver virtualbox echinoidea ``` Consultez la section suivante, réservée aux gens qui ne peuvent pas passer par `docker-machine` si vous souhaitez avoir plus d'information sur ce que fait cette commande. ##### Commandes usuelles de `docker-machine` De la même manière que `docker`, vous pouvez lister les machines connues (`ls`), changer leur état d'exécution (`start`/`stop`/`kill`/`restart`) ou encore supprimer la machine (`rm`) Si vous avez besoin d'obtenir un shell : `docker-machine ssh $NAME` et évidemment la commande `scp` s'utilise de la même manière, pour transférer des fichiers. ##### Utilisation avec Docker Rappelez-vous, au cours précédent, nous avions évoqué le fait que le deamon pouvait ne pas se trouver sur la même machine que le client `docker`. Eh bien avec `docker-machine` cela prend tout son sens, car vous pouvez très facilement changer de daamon/machine avec une simple commande : ```shell $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS $ eval $(docker-machine env echinoidea) $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS a814293b9f45 armbuild/busybox "/bin/sh" 18 seconds ago Up 10 minutes 0caddeed5037 armbuild/alpine "/bin/sh" 3 weeks ago Created ``` On remarque que le client Docker est influencé par l'exécution de notre commande `docker-machine env`. En effet, cette commande va modifier l'environnement (d'où le besoin d'`eval` le retour de la commande) pour faire correspondre `DOCKER_HOST` avec le chemin où le daemon peut être contacté. Pour reprendre le contrôle de votre environnement local, vous pouvez, soit supprimer manuellement les variables qui ont été ajoutées par l'évaluation, soit lancer `eval $(docker machine env -u)`. #### Automanuellement Si votre environnement ne vous permet pas d'utiliser `docker-machine`, vous pouvez https://github.com/boot2docker/boot2docker/releases/latest ## Présentation de l'orchestration Déployer des conteneurs sur sa propre machine, c'est extrêmement simple grâce à Docker. Mais souvent, le passage d'une application en production ou simplement dans un environnement de qualification, n'est pas toujours aisé. Il n'est pas question pour un administrateur système de faire la répartition de la charge à la main : afin de ne pas trop charger un serveur qui pourrait recevoir des pics, alors que d'autres serveurs attendent des calculs. Ce processus d'optimisation s'appelle l'*orchestration*. Il s'agit de réussir à répartir au mieux les conteneurs dans notre environnement de production ## Création du cluster Swarm `docker swarm` ### Le maître #### Initialisation du cluster #### Présentation des mécanismes de sécurité ### Les nodes #### Enregistrement d'un esclave #### Multi-maître