Essaim Docker est (alias moteur Docker en mode essaim) une solution de clustering native qui transforme un groupe d'hôtes Docker en un seul serveur virtuel logique. Swarm garantit la disponibilité et les hautes performances de votre application en la répartissant sur le nombre d'hôtes Docker à l'intérieur d'un cluster.
De plus, avec Docker Swarm, vous pouvez redimensionner votre application horizontalement, c'est-à-dire augmenter le nombre d'instances de conteneur pour la même application.
Notre infrastructure
Pour la démonstration, j'utilise un environnement de système d'exploitation mixte :
Nom d'hôte | Adresse IP | Système d'exploitation | Objectif |
---|---|---|---|
dockerm.itgeek.local | 192.168.12.10 | CentOS 7 | Agit en tant que gestionnaire Docker qui gère le moteur Docker exécuté sur les nœuds. Docker Manager prendra également une partie d'un cluster, c'est-à-dire qu'il exécutera également des conteneurs. |
node1.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | Nœud de travail 1 (moteur Docker en cours d'exécution) |
node2.itzgeek.local | 192.168.12.30 | Fédora 26/25 | Nœud de travail 2 (moteur Docker en cours d'exécution) |
Docker Swarm était auparavant un outil distinct. Il est désormais intégré au moteur Docker à partir de la v 1.12 . Ainsi, vous pouvez simplement installer le moteur Docker sur tous vos hôtes (Manager et Worker Nodes ).
LIRE :Comment installer Docker Community Edition sur CentOS 7 / RHEL 7
LIRE :Comment installer Docker Community Edition sur Ubuntu 16.04
LIRE :Comment installer Docker Community Edition sur Fedora 26 / Fedora 25
Pare-feu
Vous devez ouvrir les ports suivants sur le pare-feu pour qu'un cluster Swarm fonctionne correctement.
CentOS/Fedora :
firewall-cmd --permanent --add-port=7946/tcp firewall-cmd --permanent --add-port=4789/udp firewall-cmd --permanent --add-port=7946/udp firewall-cmd --permanent --add-port=2376/tcp firewall-cmd --permanent --add-port=2377/tcp firewall-cmd --permanent --add-port=80/tcp ## We are Testing Docker Swarm with WebService firewall-cmd --reload
Ubuntu :
ufw status ufw allow 2376/tcp ufw allow 7946/tcp ufw allow 7946/udp ufw allow 2377/tcp ufw allow 4789/udp ufw allow 80/tcp ## We are Testing Docker Swarm with WebService ufw reload ufw enable
Redémarrez le moteur Docker après avoir ouvert les ports requis, car la chaîne de pare-feu affecte les règles Docker.
systemctl restart docker
À partir de là, toutes les commandes mentionnées sont des commandes docker universelles afin que vous puissiez exécuter la commande sur n'importe quel système d'exploitation pris en charge par Docker (dans notre cas, CentOS 7 , Ubuntu 16.04 , et Fedora 26/25 ).
Créer un essaim
Lançons une création de cluster en utilisant "swarm init “. Exécutez la commande suivante sur votre nœud de gestionnaire (dockerm.itzgeek.local ).
[root@dockerm ~]# docker swarm init --advertise-addr 192.168.12.10
–advertise-adr L'option spécifie le nœud du gestionnaire pour publier son adresse en tant que 192.168.12.10 afin que le noeud worker puisse rejoindre le cluster.
Sortie :
Swarm initialized: current node (uhh38rpazd5tnzjph2g5rhgxy) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-5y1u36a0osykywxeme2akpjp4jgx2l67mbqbc4fnazs39bp314-e6djx8ma2qnevolztpplkn26j \ 192.168.12.10:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
La sortie ci-dessus contient le jeton permettant d'ajouter des nœuds de travail au cluster.
Affichez l'état actuel de l'essaim à l'aide de la commande suivante.
[root@dockerm ~]# docker info
Sortie :
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.03.1-ce Storage Driver: devicemapper Pool Name: docker-253:1-297-pool . . . . . . Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.135-RHEL7 (2016-11-16) Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Swarm: active NodeID: uhh38rpazd5tnzjph2g5rhgxy Is Manager: true ClusterID: kp8tgowwcuiv3om0wzfgpngp7 Managers: 1 Nodes: 1 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Number of Old Snapshots to Retain: 0 Heartbeat Tick: 1 Election Tick: 3 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Node Address: 192.168.12.10 Manager Addresses: 192.168.12.10:2377 Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe init version: 949e6fa Security Options: seccomp Profile: default Kernel Version: 3.10.0-123.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 979.9 MiB Name: dockerm.itzgeek.local ID: OTNI:UJZA:7CC4:TS5N:TVJ7:XXQE:5J7Q:ENWW:ZVPD:3VJI:F5DL:JYSP Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
Vous pouvez répertorier les nœuds Docker dans l'essaim avec la commande suivante.
[root@dockerm ~]# docker node ls
Sortie :
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS uhh38rpazd5tnzjph2g5rhgxy * dockerm.itzgeek.local Ready Active LeaderPages :1 2