Docker
Mode essaim Docker
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
Initialiser un essaim : init docker swarm [OPTIONS]
Joindre un essaim en tant que nœud et / ou gestionnaire : Docker Swarm join [OPTIONS] HOST: PORT
Créer un nouveau service : service docker créer [OPTIONS] IMAGE [COMMANDE] [ARG ...]
Afficher des informations détaillées sur un ou plusieurs services : service docker inspecter [OPTIONS] SERVICE [SERVICE ...]
Liste des services : service docker ls [OPTIONS]
Supprimer un ou plusieurs services : service docker rm SERVICE [SERVICE ...]
Mettre à l'échelle un ou plusieurs services répliqués : échelle du service docker SERVICE = REPLICAS [SERVICE = REPLICAS ...]
Liste les tâches d'un ou plusieurs services : service docker ps [OPTIONS] SERVICE [SERVICE ...]
Mettre à jour un service : mise à jour du service docker [OPTIONS] SERVICE
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
docker swarm init [OPTIONS]
Rejoindre un essaim en tant que nœud et / ou gestionnaire
docker swarm join [OPTIONS] HOST:PORT
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Afficher des informations détaillées sur un ou plusieurs services
docker service inspect [OPTIONS] SERVICE [SERVICE...]
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...]
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