Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
Partager sur:

Docker Swarm pour l'orchestration de conteneurs

nuage Docker
Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Tout sur le Docker Swarm et la façon dont il gère et orchestre tous les conteneurs d'un cluster.

What is Docker Swarm?

Docker swarm est un mode de gestion d'un cluster de moteurs Docker, d'où le nom Swarm. Le cluster d'hôtes Docker s'exécute en mode essaim composé de gestionnaires et de travailleurs. Les instances du moteur docker qui participent à l'essaim sont appelées nœuds.

Un déploiement d'essaim au niveau de la production se compose de nœuds docker répartis sur plusieurs serveurs.

Why use it? – Container Orchestration

Lorsque vous travaillez dans un environnement de production, des centaines de conteneurs docker exécuteront plusieurs applications. La gestion de tous ces conteneurs peut être très pénible pour tous les DevOps ingénieurs; c'est là que Docker Swarm vous aide. Il gère et orchestre le cluster exécutant facilement plusieurs conteneurs Docker.

Voici quelques-unes de ses caractéristiques:

  • La haute disponibilité - vise à n'offrir aucun temps d'arrêt ou panne.
  • L'équilibrage de charge - allouez automatiquement les ressources et les demandes sur les autres nœuds du cluster en cas de défaillance d'un nœud.
  • Décentralisé - plusieurs nœuds de gestion s'exécutent dans un environnement de production; par conséquent, le cluster ne dépend jamais d'un seul nœud de gestionnaire.
  • Évolutivité - à l'aide d'une seule commande docker swarm, vous pouvez facilement augmenter ou réduire les conteneurs dans le cluster.

Orchestrate Docker Containers

Maintenant que vous connaissez les bases de Docker Swarm, regardons un exemple de sa mise en œuvre.

Dans cet exemple, j'ai trois machines fonctionnant dans un cluster avec les détails ci-dessous:

manager1: 192.168.56.104

worker1: 192.168.56.105

worker2: 192.168.56.102

Pour initialiser le mode Swarm dans le docker, exécutez la commande ci-dessous sur le nœud du gestionnaire. Le drapeau --advertise-addr est utilisé pour se faire connaître auprès des nœuds qui peuvent rejoindre le cluster.

geekflare@manager1:~$ docker swarm init --advertise-addr 192.168.56.104

Swarm initialized: current node (lssbyfzuiuh3sye1on63eyixf) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

La commande ci-dessus générera un jeton qui sera utilisé par d'autres nœuds pour rejoindre ce cluster. Copiez la commande avec le jeton généré et exécutez-la sur les nœuds worker.

Exécution du jeton sur le nœud worker1.

geekflare@worker1:~$ docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

This node joined a swarm as a worker.

Exécution du jeton sur le nœud worker2.

geekflare@worker2:~$ docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

This node joined a swarm as a worker.

Maintenant, sur le nœud de gestionnaire, vous pouvez vérifier quels nœuds s'exécutent dans le cluster.

geekflare@manager1:~$ docker node ls

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION

lssbyfzuiuh3sye1on63eyixf *   manager1            Ready               Active              Leader              18.09.6

utdr3dnngqf1oy1spupy1qlhu     worker1             Ready               Active                                  18.09.6

xs6jqp95lw4cml1i1npygt3cg     worker2             Ready               Active                                  18.09.6

Construisons le geekflare_mongodb image de docker que nous avons utilisée dans Tutoriel Dockerfile.

docker build -t geekflare_mongodb .

Exécutez un conteneur de l'image docker MongoDB en créant un service swarm. 27017 est le numéro de port sur lequel MongoDB est exposé.

geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 geekflare_mongodb

image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image.

kok58xa4zi05psh3uy6s5x9e6

overall progress: 1 out of 1 tasks

1/1: running

verify: Service converged

Vérifiez si le service Docker Swarm a démarré. MODE répliquées signifie que le conteneur a été répliqué sur tous les nœuds du cluster et REPLICAS 1/1 signifie qu'un seul service Swarm est en cours d'exécution.

geekflare@manager1:~$ docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS

kok58xa4zi05        Mongo-Container     replicated          1/1                 geekflare_mongodb:latest   *:27017->27017/tcp

Vérifions sur quel nœud du cluster ce service unique s'exécute. Il s'exécute sur le nœud manager1.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS

jgqjo92rbq23        Mongo-Container.1   geekflare_mongodb:latest   manager1            Running             Running about a minute ago

Exécutez la commande docker ps pour obtenir plus de détails sur le conteneur qui exécute ce service swarm.

geekflare@manager1:~$ docker ps

CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES

05d77e7b4850        geekflare_mongodb:latest   "/bin/sh -c usr/bin/…"   2 minutes ago       Up 2 minutes        27017/tcp           Mongo-Container.1.jgqjo92rbq23sv01hrufdigtx

Vous pouvez exécuter le service Swarm dans "global" mode également au lieu du mode «répliqué» par défaut. Le mode global exécute une tâche du service swarm sur tous les nœuds du cluster.

Avant d'exécuter le service en mode global, permettez-moi de supprimer le conteneur en cours d'exécution existant.

geekflare@manager1:~$ docker service rm Mongo-Container

Mongo-Container

Démarrez le service Swarm dans un conteneur Docker en mode global à l'aide de l'indicateur –mode.

geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 --mode global geekflare_mongodb

image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image.

mfw8dp0zylffppkllkcjl8391

overall progress: 3 out of 3 tasks

utdr3dnngqf1: running

lssbyfzuiuh3: running

xs6jqp95lw4c: running

verify: Service converged

Vérifiez si le service Swarm a démarré en mode global. Étant donné que trois nœuds (1 gestionnaire, 2 nœuds de calcul) sont en cours d'exécution dans le cluster, c'est pourquoi le nombre de réplicas est de 3.

geekflare@manager1:~$ docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS

mfw8dp0zylff        Mongo-Container     global              3/3                 geekflare_mongodb:latest   *:27017->27017/tcp

3 services fonctionnent maintenant sur 3 nœuds, vérifiez-le en exécutant la commande ci-dessous.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                                        IMAGE                      NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS

zj2blvptkvj6        Mongo-Container.xs6jqp95lw4cml1i1npygt3cg   geekflare_mongodb:latest   worker2             Running             Running about a minute ago

3eaweijbbutf        Mongo-Container.utdr3dnngqf1oy1spupy1qlhu   geekflare_mongodb:latest   worker1             Running             Running about a minute ago

yejg1o2oyab7        Mongo-Container.lssbyfzuiuh3sye1on63eyixf   geekflare_mongodb:latest   manager1            Running             Running about a minute ago

Ensuite, laissez-moi vous montrer comment vous pouvez définir le nombre de répliques. Avant cela, je supprimerai le conteneur actuel, qui est en cours d'exécution.

geekflare@manager1:~$ docker service rm Mongo-Container

Mongo-Container

Utilisez l'indicateur –replicas dans la commande et mentionnez le nombre de répliques que vous voulez du service swarm. Par exemple, je souhaite avoir deux répliques du service swarm:

geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 --replicas=2 geekflare_mongodb

image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image.

4yfl41n7sfak65p6zqwwjq82c

overall progress: 2 out of 2 tasks

1/2: running

2/2: running

verify: Service converged

Vérifiez les services Swarm en cours d'exécution. Vous pouvez voir qu'un réplica est en cours d'exécution sur le nœud manager1 et l'autre sur le nœud worker1.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS

xukodj69h79q        Mongo-Container.1   geekflare_mongodb:latest   worker1             Running             Running 9 seconds ago

e66zllm0foc8        Mongo-Container.2   geekflare_mongodb:latest   manager1            Running             Running 9 seconds ago

Accédez au nœud worker1 et vérifiez si le conteneur docker exécute le service swarm.

geekflare@worker1:~$ docker ps

CONTAINER ID        IMAGE                      COMMAND                  CREATED              STATUS              PORTS               NAMES

5042b7f161cb        geekflare_mongodb:latest   "/bin/sh -c usr/bin/…"   About a minute ago   Up About a minute   27017/tcp           Mongo-Container.1.xukodj69h79q3xf0pouwm7bwv

Pour arrêter ce conteneur, exécutez la commande ci-dessous.

geekflare@worker1:~$ docker stop 5042b7f161cb

5042b7f161cb

Maintenant, à partir du nœud manager1, si vous vérifiez quels nœuds exécutent le service, vous verrez son exécution sur le nœud manager1 et le nœud worker2. L'ÉTAT ACTUEL du nœud worker1 est Shutdown (car nous avons arrêté le conteneur exécutant le service). Mais comme deux réplicas doivent exécuter ce service, un autre service a été démarré sur le worker 2.

C'est ainsi que vous obtenez une haute disponibilité à l'aide de docker swarm.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                    IMAGE                      NODE                DESIRED STATE       CURRENT STATE            ERROR                         PORTS

cd2rlv90umej        Mongo-Container.1       geekflare_mongodb:latest   worker2             Running             Running 30 seconds ago

xukodj69h79q         \_ Mongo-Container.1   geekflare_mongodb:latest   worker1             Shutdown            Failed 38 seconds ago    "task: non-zero exit (137)"

e66zllm0foc8        Mongo-Container.2       geekflare_mongodb:latest   manager1            Running             Running 3 minutes ago

Il est très facile d'augmenter ou de réduire les conteneurs Docker. La commande ci-dessous augmentera le conteneur mongo à 5.

geekflare@manager1:~$ docker service scale Mongo-Container=5

Mongo-Container scaled to 5

overall progress: 5 out of 5 tasks

1/5: running

2/5: running

3/5: running

4/5: running

5/5: running

verify: Service converged

Vérifiez le nombre de répliques du conteneur mongo en cours d'exécution, il doit y en avoir 5.

geekflare@manager1:~$ docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS

4yfl41n7sfak        Mongo-Container     replicated          5/5                 geekflare_mongodb:latest   *:27017->27017/tcp

Vérifiez où ces 5 répliques s'exécutent dans le cluster. 1 réplica s'exécute sur le nœud manager1 et 2 répliques sur les deux nœuds worker chacun.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                    IMAGE                      NODE                DESIRED STATE       CURRENT STATE            ERROR                         PORTS

cd2rlv90umej        Mongo-Container.1       geekflare_mongodb:latest   worker2             Running             Running 2 minutes ago

xukodj69h79q         \_ Mongo-Container.1   geekflare_mongodb:latest   worker1             Shutdown            Failed 2 minutes ago     "task: non-zero exit (137)"

e66zllm0foc8        Mongo-Container.2       geekflare_mongodb:latest   manager1            Running             Running 5 minutes ago

qmp0gqr6ilxi        Mongo-Container.3       geekflare_mongodb:latest   worker2             Running             Running 47 seconds ago

9ddrf4tsvnu2        Mongo-Container.4       geekflare_mongodb:latest   worker1             Running             Running 46 seconds ago

e9dhoud30nlk        Mongo-Container.5       geekflare_mongodb:latest   worker1             Running             Running 44 seconds ago

Dans votre cluster, si vous ne souhaitez pas que vos services s'exécutent sur des nœuds de gestionnaire et que vous souhaitez les conserver uniquement pour gérer les nœuds, vous pouvez vider le nœud de gestionnaire.

geekflare@manager1:~$ docker node update --availability drain manager1

manager1

Vérifiez la disponibilité du nœud de gestionnaire.

geekflare@manager1:~$ docker node ls

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION

lssbyfzuiuh3sye1on63eyixf *   manager1            Ready               Drain               Leader              18.09.6

utdr3dnngqf1oy1spupy1qlhu     worker1             Ready               Active                                  18.09.6

xs6jqp95lw4cml1i1npygt3cg     worker2             Ready               Active                                  18.09.6

Vous verrez que les services ne fonctionnent plus sur le nœud du gestionnaire; ils sont répartis sur les nœuds de calcul du cluster.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                    IMAGE                      NODE                DESIRED STATE       CURRENT STATE             ERROR                         PORTS

cd2rlv90umej        Mongo-Container.1       geekflare_mongodb:latest   worker2             Running             Running 5 minutes ago

xukodj69h79q         \_ Mongo-Container.1   geekflare_mongodb:latest   worker1             Shutdown            Failed 5 minutes ago      "task: non-zero exit (137)"

qo405dheuutj        Mongo-Container.2       geekflare_mongodb:latest   worker1             Running             Running 41 seconds ago

e66zllm0foc8         \_ Mongo-Container.2   geekflare_mongodb:latest   manager1            Shutdown            Shutdown 44 seconds ago

qmp0gqr6ilxi        Mongo-Container.3       geekflare_mongodb:latest   worker2             Running             Running 3 minutes ago

9ddrf4tsvnu2        Mongo-Container.4       geekflare_mongodb:latest   worker1             Running             Running 3 minutes ago

e9dhoud30nlk        Mongo-Container.5       geekflare_mongodb:latest   worker1             Running             Running 3 minutes ago

C'était tout à propos de Docker Swarm et comment orchestrer des conteneurs en mode essaim docker. Essayez-les sur votre environnement hors production pour avoir une idée de leur fonctionnement.

Merci à nos commanditaires
Plus de bonnes lectures sur DevOps
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Semrush est une solution de marketing numérique tout-en-un avec plus de 50 outils de référencement, de médias sociaux et de marketing de contenu.
    Essayez Semrush
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder