Différences
Ci-dessous, les différences entre deux révisions de la page.
infrastructure:installation_docker_swarm_cluster [2017/05/13 21:15] – modification externe 127.0.0.1 | infrastructure:installation_docker_swarm_cluster [2019/03/09 16:31] (Version actuelle) – Suppression page jjerphan | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | **Cette documentation ne reflète plus l' | ||
- | ======Installation d'un cluster Docker Swarm====== | ||
- | Cette page a pour but la mise en place d'un cluster Docker Swarm sur deux noeuds avec un partage des données via un volume partagé utilisant [[https:// | ||
- | {{ : | ||
- | |||
- | |||
- | =====Préparation d'un disque logique===== | ||
- | ====Ajouter un autre disque a la VM==== | ||
- | |||
- | Afin de stocker les données, nous devons créer un disque dédié au volume GlusterFS. | ||
- | Pour se faire, il faut aller (sur l' | ||
- | |||
- | Le disque devrait être bien ajouté a la liste de composants hardware de la VM. Toutefois, il apparaît en rouge. Pour qu'il soit bien pris en compte et rattaché à la VM, il est nécessaire de la relancer. | ||
- | |||
- | Une fois que le disque dur est bien prit en compte par la VM, il est nécessaire d' | ||
- | |||
- | 1. Verifier que le disque a bien été ajouté/est détectable par l'OS: | ||
- | $ fdisk -l | ||
- | |||
- | 2. On ajoute le " | ||
- | $ pvcreate /dev/sdb | ||
- | |||
- | 3. On créer un volume groupe data | ||
- | $ vgcreate vg01 /dev/sdb | ||
- | |||
- | ====Volume LVM==== | ||
- | |||
- | C'est ce volume qui sera ensuite partagé avec les différents serveurs sur le réseau. | ||
- | $ vgs | ||
- | VG #PV #LV #SN Attr | ||
- | vg00 | ||
- | vg01 | ||
- | | ||
- | Sur la machine virtuelle, j'ai donc ajouté un nouveau disque d'une taille de 15G ici ajouté sur un groupe logique vg01. | ||
- | Je créé ensuite un volume logique (lv) à partir de ce vg et qui va prendre tout l' | ||
- | $ lvcreate -l 100%FREE -n data vg01 | ||
- | |||
- | On peux maintenant formater ce disque et le monter sur la machine: | ||
- | $ mkfs -t ext4 / | ||
- | $ echo "/ | ||
- | $ mkdir / | ||
- | |||
- | ====Volume GlusterFS==== | ||
- | Une fois le volume monté, il faut maintenant créer un volume de plus haut niveau à l'aide de glusterFS. Cela permettra aux différentes machines de notre cluster d' | ||
- | |||
- | La première chose à faire et de s' | ||
- | $ cat /etc/hosts | ||
- | | ||
- | | ||
- | | ||
- | |||
- | Il faut ajouter les clés du repo ainsi que le repo contenant les packages | ||
- | $ wget -O - http:// | ||
- | $ echo deb http:// | ||
- | $ apt-get update | ||
- | $ apt-get -y install glusterfs-server | ||
- | | ||
- | Ensuite, on ajoute le second serveur à partir du premier noeud du cluster. Ici, on lance donc sur pica01 | ||
- | $ gluster peer probe pica02 | ||
- | $ gluster peer status | ||
- | Number of Peers: 1 | ||
- | Hostname: pica02 | ||
- | Uuid: 36530258-860b-4403-85b3-3de1fd6bb47a | ||
- | State: Peer in Cluster (Connected) | ||
- | | ||
- | On peut maintenant créer un volume répliqué que l'on va configurer en mirroring afin d' | ||
- | $ gluster volume create gluster-data replica 2 transport tcp pica01:/ | ||
- | $ gluster volume start gluster-data | ||
- | |||
- | Une fois le volume créé, on peut vérifier l' | ||
- | $ gluster volume info | ||
- | Volume Name: gluster-data | ||
- | Type: Replicate | ||
- | Volume ID: 24ec2dcb-84fe-4981-9e01-1a5614cd209b | ||
- | Status: Started | ||
- | Snapshot Count: 0 | ||
- | Number of Bricks: 1 x 2 = 2 | ||
- | Transport-type: | ||
- | Bricks: | ||
- | Brick1: pica01:/ | ||
- | Brick2: pica02:/ | ||
- | |||
- | Afin d' | ||
- | $ gluster volume set gluster-data auth.allow pica02 | ||
- | |||
- | On peut maintenant ajouter une ligne au fichier fstab pour lancer le montage automatique du volume. À noter qu'il faut adapter le point de montage en fonction de la machine | ||
- | $ echo " | ||
- | $ mkdir /DATA && mount -a | ||
- | |||
- | Pour le moment, le montage automatique au boot de la machine ne fonctionne pas. Pour palier à ce problème, j'ai ajouté les lignes suivante a la fin du fichier / | ||
- | < | ||
- | systemctl start glusterfs-server | ||
- | mount -a | ||
- | </ | ||
- | | ||
- | =====Installation de Docker===== | ||
- | ====Docker Engine==== | ||
- | Docker va nous servir pour mettre en place et faire tourner les conteneurs contenant les services. Avant de mettre en place un cluster Swarm permettant de répartir automatiquement les conteneurs sur les différentes machines, il faut installer le Docker engine sur chacune de nos machines. Pour cela: | ||
- | $ apt-get update | ||
- | $ apt-get install \ | ||
- | | ||
- | | ||
- | curl \ | ||
- | | ||
- | $ curl -fsSL https:// | ||
- | |||
- | Verifier que la signature soir bien 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 | ||
- | $ apt-key fingerprint 0EBFCD88 | ||
- | $ add-apt-repository \ | ||
- | " | ||
- | | ||
- | | ||
- | $ apt-get update && apt-get install docker-ce | ||
- | $ systemctl start docker && systemctl enable docker | ||
- | | ||
- | On peut vérifier que l' | ||
- | $ docker version | ||
- | Client: | ||
- | | ||
- | API version: | ||
- | Go version: | ||
- | Git commit: | ||
- | | ||
- | | ||
- | Server: | ||
- | | ||
- | API version: | ||
- | Go version: | ||
- | Git commit: | ||
- | | ||
- | | ||
- | |||
- | ====Déploiement de Swarm==== | ||
- | On peut maintenant déployer le cluster Swarm à l'aide des commandes suivantes: | ||
- | Sur pica01 | ||
- | $ root@pica01: | ||
- | Swarm initialized: | ||
- | To add a worker to this swarm, run the following command: | ||
- | docker swarm join \ | ||
- | --token SWMTKN-1-0aieljefhgeirgjkzrjkbgerohzg69rnlj6why0dmaddseswnsmntldd9-ci1ew93yu91p7dfl1gxlur1zh \ | ||
- | 91.224.148.57: | ||
- | To add a manager to this swarm, run ' | ||
- | |||
- | Sur pica02 on lance la commande proposée par pica01 | ||
- | $ root@pica02: | ||
- | > | ||
- | > | ||
- | This node joined a swarm as a worker. | ||
- | | ||
- | |||
- | Sur le nœud master, on peut voir les nœuds du cluster: | ||
- | $ docker node ls | ||
- | ID | ||
- | 9c3xnjjo1u6mbol5qtbeh92cb | ||
- | alpfdvrzjrbiuvya7nyiwhbjg * pica01 | ||
- | |||
- | Dans le cas d'un cluster à deux noeuds, la notion de manager et de client est difficile à mettre en place. On peut donc passer le second noeud comme manager. En cas de panne du premier, il sera possible de lancer des commandes " | ||
- | $ docker node promote pica02 | ||
- | |||
- | Le cluster est maintenant prêt à être utilisé. Avant de lancer les premiers services, il faut savoir que Docker lorsque est utilisé en mode Swarm ne permet plus de lier des conteneurs les uns aux autres comme c'est le cas avec Docker en standalone. Pour palier à ce problème, il faut créer une réseau overlay qui par la suite permettra de contacter n' | ||
- | $ docker network create --driver overlay --opt encrypted pica-net | ||
- | Maintenant, lorsque l'on lance différents services sur le réseau pica-net à l'aide du paramètre --network, ils seront en mesure de communiquer à partir du nom qui leur aura été attribué au lancement. | ||
- | |||
- | ====Lancement d'un service==== | ||
- | Il est désormais possible de lancer les premiers services utilisant le volume partagé glusterfs pour la persistance des données. | ||
- | Par exemple, le lancement d'un conteneur dokuwiki peut se traduire avec la commande suivante: | ||
- | $ docker service create --name dokuwiki --replicas 3 \ | ||
- | --publish 3000:80 \ | ||
- | --mount type=bind, | ||
- | --network pica-net registry.picasoft.net: | ||
- | |||
- | |||
- | Cette commande va automatiquement déployer 3 instances dokuwiki sur les différents noeuds du cluster en fonction de la charge de ceux-ci. Le service est accessible sur le port 3000 sur chacune des machines du cluster et ce même si le noeud n' | ||
- | $ docker service scale dokuwiki=1 | ||
- | dokuwiki scaled to 1 | ||
- | $ docker service scale dokuwiki=4 | ||
- | dokuwiki scaled to 4 | ||
- | | ||
- | **Bon à savoir:** Pour qu'une image puisse être lancée sur les deux serveurs, il faut au préalable avoir télécharger cette image sur les différents noeuds du cluster. Sans cela, Swarm va scheduller les conteneurs sur une unique machine qui possède les images.\\ | ||
- | \\ | ||
- | Contact en cas de questions : | ||
- | [[antoine@barbare.me|Antoine Picasoft]] |