introduction
Docker Swarm est la solution native de Docker pour le déploiement d’un cluster d’hôtes Docker. Vous pouvez l’utiliser pour déployer rapidement un cluster d’hôtes Docker s’exécutant sur votre ordinateur local ou sur des plates-formes cloud prises en charge.
Avant Docker 1.12, la configuration et le déploiement d’un cluster d’hôtes Docker nécessitaient l’utilisation d’un magasin de valeurs-clés externe, tel que etcd ou Consul. pour la découverte du service. Cependant, avec Docker 1.12, un service de découverte externe n’est plus nécessaire, car Docker est livré avec un magasin de clés-valeurs en mémoire qui fonctionne sans configuration.
Dans ce didacticiel, vous apprendrez à déployer un cluster de machines Docker à l’aide de la fonctionnalité Swarm de Docker 1.12 sur DigitalOcean. Chaque nœud Docker du cluster exécutera CentOS 7. Bien que vous puissiez exécuter un cluster composé de dizaines, de centaines ou de milliers d’hôtes Docker, le cluster que nous allons configurer dans ce tutoriel sera composé d’un nœud de gestionnaire et de deux nœuds de travail, pour un total de trois membres du cluster. . Une fois ce didacticiel terminé, vous pourrez ajouter plus de nœuds à votre cluster facilement.
Conditions préalables
Pour ce tutoriel, vous aurez besoin de:
-
Une machine locale avec Docker installé. Votre machine locale peut exécuter n’importe quelle distribution Linux, ou même Windows ou macOS. Pour Windows et macOS, installez Docker à l’aide du programme d’installation officiel https://www.docker.com/products/docker. Si CentOS 7 fonctionne sur votre ordinateur local mais que Docker n’est pas installé, voir https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-centos-7 [ Comment installer et utiliser Docker sur CentOS 7] pour obtenir des instructions.
-
Un jeton d’API DigitalOcean. Si vous n’en avez pas, générez-le à l’aide de his guide. Lorsque vous générez un jeton, assurez-vous qu’il a une portée en lecture-écriture. C’est la valeur par défaut. Par conséquent, si vous ne modifiez aucune option lors de sa génération, elle disposera de fonctionnalités de lecture-écriture. Pour faciliter son utilisation sur la ligne de commande, veillez à affecter le jeton à une variable comme indiqué dans cet article.
-
Docker Machine installé sur votre ordinateur local, que vous utiliserez pour créer trois hôtes. Sous Windows et macOS, l’installation de Docker comprend Docker Machine. Si vous exécutez CentOS 7 localement, voir https://www.digitalocean.com/community/tutorials/how-to-provision-and-manage-remote-rocker-hosts-with-docker-machine-on-centos- 7 [Comment configurer et gérer des hôtes Docker distants avec Docker Machine sur CentOS 7] pour obtenir des instructions d’installation.
Étape 1 - Mise en service des nœuds de cluster
Nous devons créer plusieurs hôtes Docker pour notre cluster. En tant que rappel, la commande suivante fournit un seul hôte dockerisé, où + $ DOTOKEN +
est une variable d’environnement qui correspond à votre jeton d’API DigitalOcean:
docker-machine create --driver digitalocean --digitalocean-image centos-7-0-x64 --digitalocean-access-token $
Imaginez que vous ayez à le faire pour configurer un cluster composé d’au moins trois nœuds, alimentant un hôte à la fois.
Nous pouvons automatiser le processus de provisionnement d’un nombre illimité d’hôtes Docker à l’aide de cette commande, associée à quelques scripts Bash simples. Exécutez cette commande sur votre machine locale pour créer trois hôtes Docker, nommés + noeud-1 +
, + noeud-2 +
et + noeud-3 +
:
for i in ; do docker-machine create --driver digitalocean \
--digitalocean-image centos-7-0-x64 \
--digitalocean-access-token $i; done
Une fois la commande terminée, vous pouvez vérifier que toutes les machines ont été créées en visitant votre tableau de bord DigitalOcean ou en tapant la commande suivante:
docker-machine ls
La sortie doit ressembler à la suivante et servir de référence rapide pour rechercher l’adresse IP des nœuds:
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
- digitalocean Running tcp:// v1.12.2
- digitalocean Running tcp:// v1.12.2
- digitalocean Running tcp:// v1.12.2
À ce stade, les trois hôtes dockerisés ont été créés et vous avez l’adresse IP de chaque hôte. Ils exécutent également tous Docker 1.12.x, mais ne font pas encore partie d’un cluster Docker. Dans les étapes suivantes, nous allons configurer les règles de pare-feu qui permettront aux nœuds de fonctionner en tant que membres d’un cluster, choisir l’un des nœuds et en faire le gestionnaire de Docker Swarm, puis configurer le reste en tant que travailleurs Docker Swarm.
Étape 2 - Configuration des règles de pare-feu pour autoriser le trafic Docker Swarm
Un cluster doit avoir au moins un nœud servant de gestionnaire, bien que trois gestionnaires soient recommandés pour une installation de production. Pour cette configuration, sélectionnons le premier nœud et en faisons le gestionnaire Swarm. Les deux autres noeuds seront les noeuds de travail.
Certains ports réseau doivent être ouverts sur les nœuds qui feront partie d’un cluster pour que le cluster fonctionne correctement. Cela implique de configurer le pare-feu pour autoriser le trafic via ces ports. Étant donné que trois applications de pare-feu différentes peuvent être utilisées pour accomplir cette tâche, les commandes que vous devez exécuter sur les nœuds pour chaque application de pare-feu ont été décrites dans un article séparé. Suivez his guide et configurez les pare-feu pour chaque hôte. Ouvrez les ports appropriés sur le gestionnaire, puis répétez l’opération pour ouvrir les ports sur les deux nœuds clients.
Une fois cette étape terminée, vous pouvez initialiser le gestionnaire de cluster.
Étape 3 - Initialisation du gestionnaire de cluster
Nous avons décidé que ++
serait notre gestionnaire de cluster, alors connectez-vous au nœud à partir de votre machine locale:
docker-machine ssh
L’invite de commande changera pour refléter le fait que vous êtes maintenant connecté à ce nœud particulier. Pour configurer le noeud en tant que gestionnaire Swarm, tapez la commande suivante:
docker swarm init --advertise-addr
+ node_ip_address +
est l’adresse IP du nœud. Vous pouvez l’obtenir à la sortie de + docker-machine ls +
ou de votre tableau de bord DigitalOcean.
Vous verrez une sortie ressemblant à ceci:
OutputSwarm initialized: current node () is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-57m6beujakwyx0t2j5mglpi9juf8czapp8kf2tj3gudkgjkoda-0eg0x08w7uvyxiacmmx0zv67o \
111.111.111.111:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
La sortie contient l’ID du nœud, * 2n4y8bwu6s7c1kwdryd945zv1 * dans cet exemple, ainsi que les instructions relatives à l’ajout des autres nœuds au cluster.
Alors maintenant, vous avez un Docker Swarm avec un gestionnaire configuré. Ajoutons les nœuds restants en tant que travailleurs.
Étape 4 - Ajout de nœuds au cluster
Pour terminer cette étape, vous voudrez peut-être ouvrir un autre terminal et laisser l’onglet du terminal ou la fenêtre que vous avez utilisé pour vous connecter au gestionnaire Swarm seul pour le moment.
Commencez par vous connecter à + node-2 +
depuis votre machine locale:
docker-machine ssh
Puis exécutez cette commande, où + your_swarm_token +
est le jeton que vous avez reçu lors de la création du cluster à l’étape précédente, et + manager_node_ip_address +
est l’IP du gestionnaire Swarm:
docker swarm join \
--token \
:2377
Une fois la commande exécutée avec succès, vous verrez cette réponse:
OutputThis node joined a swarm as a worker.
Déconnectez-vous de `, puis répétez ce processus avec `
pour l’ajouter à votre cluster.
Vous avez maintenant ajouté deux nœuds de travail au cluster. Si les règles de pare-feu ont été configurées correctement, vous disposez maintenant d’un serveur Docker Swarm fonctionnel, avec tous les nœuds synchronisés.
Étape 5 - Gestion du cluster
Une fois que les nœuds de gestionnaire et de travail ont été affectés au cluster, toutes les commandes de gestion de Docker Swarm doivent être exécutées sur les nœuds de gestionnaire. Revenez donc au terminal que vous avez utilisé pour ajouter le gestionnaire et tapez cette commande pour afficher tous les membres du cluster:
docker node ls
Le résultat devrait ressembler à ceci:
OutputID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4smt8qechkvb8qp02nwo2oe6t * Ready Active Leader
5wzik3knakgj0c24jmtmiy5oq Ready Active
7f6ws6oladh94xnmbfdhanokm Ready Active
Cette sortie montre que nous avons affaire à un Docker Swarm à 3 nœuds et à ses nœuds - un gestionnaire et deux ouvriers. Pour afficher les autres commandes de gestion que vous pouvez exécuter sur le nœud du gestionnaire, tapez:
docker node --help
Pour obtenir des informations détaillées sur le cluster, vous pouvez utiliser la commande suivante sur le gestionnaire ou les travailleurs (il s’agit d’une commande générique de Docker):
docker info
La sortie doit être de ce type et indiquer le statut du cluster (* actif * ou * en attente *), le nombre de nœuds du cluster et indiquer si le nœud particulier est un gestionnaire ou un opérateur.
Output...
Network: null host overlay bridge
Swarm: active
NodeID: 4smt8qechkvb8qp02nwo2oe6t
Is Manager: true
ClusterID: 31i554ti23njgxg28av52hv47
Managers: 1
Nodes: 3
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Node Address: 111.111.111.111
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 3.10.0-327.22.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
...
Si vous répétez la même commande sur les nœuds de travail, la ligne * Is Manager * devrait afficher + false +
.
Maintenant, obtenons un service actif sur le cluster.
Étape 6 - Services en cours dans l’essaim de dockers
Maintenant que vous avez un Docker Swarm opérationnel, exécutons un conteneur de test et voyons comment le gestionnaire le gère. Sur une machine exécutant Docker Engine 1.12 ou une version plus récente, les conteneurs sont déployés en tant que services à l’aide de la commande + docker service +
. Et comme la commande + docker node
, la commande` + docker service` ne peut être exécutée que sur un nœud de gestionnaire.
Alors, déployons un service de serveur Web en utilisant l’image de conteneur officielle de Nginx:
docker service create -p 80:80 --name nginx
Dans cette commande, nous mappons le port + 80 +
dans le conteneur Nginx sur le port + 80 +
du cluster afin que nous puissions accéder à la page Nginx par défaut où que vous soyez.
Pour voir quels services s’exécutent sur un cluster, tapez:
docker service ls
La sortie devrait prendre cette forme. La colonne * REPLICAS * indique le nombre d’instances du service en cours d’exécution:
OutputID NAME REPLICAS IMAGE COMMAND
ch7xnvy8upho webserver 1/1 nginx
Vous pouvez déterminer les nœuds sur lesquels les services s’exécutent en utilisant + docker service ps +
suivi du nom du service.
docker service ps
La sortie devrait ressembler à ceci:
OutputID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
4pfbvs7sh5mugtzckw4czhcfm webserver.1 nginx node-1 Running Running 2 minutes ago
Dans cet exemple, le service + webserver +
est exécuté sur + node-1 +
. Étant donné qu’il s’agit d’un serveur Web fonctionnant sur les ports par défaut, vous pouvez y accéder en dirigeant votre navigateur sur + http: // +
. Essaie. Vous verrez la page par défaut de Nginx.
Grâce à la magie des réseaux maillés, un service exécuté sur un nœud est accessible sur n’importe quel autre nœud du cluster. Par exemple, vous pouvez également accéder à ce service en pointant votre navigateur sur l’adresse IP de n’importe quel nœud du cluster, pas seulement celui sur lequel il est exécuté. Essaie.
Une autre fonctionnalité de Docker Swarm est la possibilité de redimensionner un service, c’est-à-dire de créer des instances supplémentaires d’un service. Supposons que nous voulions redimensionner le service + webserver +
que nous avons démarré précédemment à cinq instances. Pour ce faire, il suffit de taper la commande suivante et le système créera quatre instances supplémentaires:
docker service scale =5
Et la sortie de + docker service ps +
indiquera sur quels nœuds les nouvelles instances ont été démarrées:
OutputID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
4pfbvs7sh5mugtzckw4czhcfm webserver.1 nginx node-1 Running Running 3 minutes ago
1er2rbrnj6ltanoe47mb653wf webserver.2 nginx node-3 Running Running 14 seconds ago
evassgyvruh256ebv5pj3bqcz webserver.3 nginx node-3 Running Running 14 seconds ago
d453agrdpgng47klbl6yfjnka webserver.4 nginx node-1 Running Running 18 seconds ago
2hsdevx178rg15gqxhzrsnmg6 webserver.5 nginx node-2 Running Running 14 seconds ago
Cela montre que deux des quatre nouvelles instances ont été démarrées sur + node-3 +
, une a été démarrée sur + node-1 +
et l’autre démarrée sur + node-2 +
.
Enfin, si un service tombe en panne, il est automatiquement redémarré sur le même nœud ou sur un nœud différent, si le nœud initial n’est plus disponible.
Conclusion
Vous avez constaté à quel point il est facile de configurer un Docker Swarm à l’aide de Docker Engine 1.12 et du nouveau mode Swarm. Vous avez également vu comment effectuer quelques tâches de gestion sur le cluster. Mais il y a encore plus. Pour afficher les commandes Docker Swarm disponibles, exécutez la commande suivante sur votre gestionnaire Swarm.
docker swarm --help
Pour plus d’informations sur Docker Swarm, visitez la page official documentation. Et n’oubliez pas de consulter d’autres Docker-related articles sur DigitaloOcean.