Recherche…


Introduction

Un essaim est un nombre de moteurs Docker (ou nœuds ) qui déploient des services collectivement. Swarm est utilisé pour distribuer le traitement sur de nombreuses machines physiques, virtuelles ou cloud.

Syntaxe

Remarques

Le mode Swarm implémente les fonctionnalités suivantes:

  • Gestion de cluster intégrée à Docker Engine
  • Conception décentralisée
  • Modèle de service déclaratif
  • Mise à l'échelle
  • Réconciliation de l'Etat souhaitée
  • Réseau multi-hôte
  • Découverte de service
  • L'équilibrage de charge
  • Conception sécurisée par défaut
  • Mises à jour roulantes

Pour plus de documentation officielle sur Docker concernant la visite de Swarm : Présentation du mode Swarm


Commandes CLI du mode Swarm

Cliquez sur la description des commandes pour la documentation

Initialiser un essaim

docker swarm init [OPTIONS]

Rejoindre un essaim en tant que nœud et / ou gestionnaire

docker swarm join [OPTIONS] HOST:PORT

Créer un nouveau service

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

Afficher des informations détaillées sur un ou plusieurs services

docker service inspect [OPTIONS] SERVICE [SERVICE...]

Liste des services

docker service ls [OPTIONS]

Supprimer un ou plusieurs services

docker service rm SERVICE [SERVICE...]

Mettre à l'échelle un ou plusieurs services répliqués

docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]

Liste les tâches d'un ou plusieurs services

docker service ps [OPTIONS] SERVICE [SERVICE...]

Mettre à jour un service

docker service update [OPTIONS] SERVICE

Créer un essaim sous Linux en utilisant docker-machine et VirtualBox

# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1

# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
    docker swarm init \
    --advertise-addr $(docker-machine ip manager)
    --listen-addr $(docker-machine ip manager)

# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)


# Join a worker node with the worker token
docker-machine ssh worker1 \
    docker swarm join \
    --token $WORKER_TOKEN \
    --listen-addr $(docker-machine ip worker1) \
    $(docker-machine ip manager):2377



Découvrez que le travailleur et le responsable se joignent au jeton

Lors de l'automatisation de la mise à disposition de nouveaux nœuds vers un essaim, vous devez connaître le jeton de jointure correct pour l'essaim ainsi que l'adresse publiée du gestionnaire. Vous pouvez le découvrir en exécutant les commandes suivantes sur l'un des nœuds de gestionnaire existants:

# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 |  tr -d '[[:space:]]')

# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)

L'option -q génère uniquement le jeton. Sans cette option, vous obtenez la commande complète pour vous inscrire à un essaim.

Ensuite, sur les nouveaux nœuds provisionnés, vous pouvez rejoindre l'essaim en utilisant.

docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS

Bonjour application mondiale

Généralement, vous souhaitez créer une pile de services pour former une application répliquée et orchestrée.

Une application Web moderne typique consiste en une base de données, une API, une interface frontale et un proxy inverse.

Persistance

La base de données a besoin de persistance. Nous avons donc besoin d'un système de fichiers partagé entre tous les nœuds d'un essaim. Cela peut être NAS, serveur NFS, GFS2 ou autre chose. Sa configuration est hors de propos ici. Actuellement, Docker ne contient pas et ne gère pas la persistance dans un essaim. Cet exemple suppose que /nfs/ emplacement partagé est monté sur tous les nœuds.

Réseau

Pour pouvoir communiquer entre eux, les services d'un essaim doivent être sur le même réseau.

Choisissez une plage IP (ici 10.0.9.0/24 ) et un nom de réseau ( hello-network ) et exécutez une commande:

docker network create \
  --driver overlay \
  --subnet 10.0.9.0/24 \
  --opt encrypted \
  hello-network

Base de données

Le premier service dont nous avons besoin est une base de données. Utilisons postgresql comme exemple. Créez un dossier pour une base de données dans nfs/postgres et exécutez ceci:

docker service create --replicas 1 --name hello-db \
       --network hello-network -e PGDATA=/var/lib/postgresql/data \
       --mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
       kiasaki/alpine-postgres:9.5

Notez que nous avons utilisé les --network hello-network et --mount .

API

La création de l'API est hors de portée de cet exemple, alors supposons que vous avez une image API sous le username/hello-api .

docker service create --replicas 1 --name hello-api \
       --network hello-network \
       -e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
       username/hello-api

Notez que nous avons passé un nom de notre service de base de données. Docker swarm a un serveur DNS intégré, ce qui permet à l'API de se connecter à la base de données en utilisant son nom DNS.

Proxy inverse

Créons le service nginx pour servir notre API à un monde extérieur. Créez des fichiers de configuration nginx dans un emplacement partagé et exécutez-le:

docker service create --replicas 1 --name hello-load-balancer \
       --network hello-network \
       --mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
       -p 80:80 \
       nginx:1.10-alpine

Notez que nous avons utilisé l'option -p pour publier un port. Ce port serait disponible pour n'importe quel nœud d'un essaim.

Disponibilité des nœuds

Disponibilité du nœud du mode essaim:

  • Active signifie que le planificateur peut affecter des tâches à un nœud.
  • Pause signifie que le planificateur n'attribue pas de nouvelles tâches au nœud, mais que les tâches existantes restent en cours d'exécution.
  • Drain signifie que le planificateur n'attribue pas de nouvelles tâches au nœud. Le planificateur arrête toutes les tâches existantes et les planifie sur un nœud disponible.

Pour modifier la disponibilité du mode:

#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls

Promouvoir ou rétrograder les nœuds de l'essaim

Pour promouvoir un noeud ou un ensemble de noeuds, exécutez le docker node promote de gestionnaire:

docker node promote node-3 node-2

Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.

Pour rétrograder un nœud ou un ensemble de nœuds, exécutez la docker node demote du docker node demote depuis un nœud de gestionnaire:

docker node demote node-3 node-2

Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.

Quitter l'essaim

Noeud du travailleur:

#Run the following on the worker node to leave the swarm.

docker swarm leave
Node left the swarm.

Si le noeud a le rôle de gestionnaire , vous recevrez un avertissement sur la gestion du quorum des gestionnaires. Vous pouvez utiliser --force pour laisser sur le noeud du gestionnaire:

#Manager Node

docker swarm leave --force
Node left the swarm.

Les nœuds qui ont quitté le Swarm apparaîtront toujours dans la sortie du docker node ls .

Pour supprimer des nœuds de la liste:

docker node rm node-2

node-2


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow