web-dev-qa-db-fra.com

Comment la mise en réseau et l'équilibreur de charge fonctionnent-ils en mode Swarm Docker?

Je suis nouveau dans les Dockers et les conteneurs. Je parcourais les tutoriels pour docker et suis tombé sur ces informations. https://docs.docker.com/get-started/part3/#docker-composeyml

   networks:
     - webnet
networks:
  webnet:

Qu'est-ce que le Webnet? Le document dit

Demandez aux conteneurs Web de partager le port 80 via un réseau à charge équilibrée appelé Webnet. (En interne, les conteneurs eux-mêmes seront publiés sur le port Web 80 sur un port éphémère.)

Donc, par défaut, le réseau de superposition est équilibré en charge dans le cluster docker? Quel est l'algo d'équilibrage de charge utilisé?

En fait, il n'est pas clair pour moi pourquoi nous avons l'équilibrage de charge sur le réseau de superposition.

25
SunilS

Je ne suis pas sûr que je puisse être plus clair que les documents, mais peut-être que la reformulation aidera.

Tout d'abord, le document que vous suivez ici utilise ce qu'on appelle le swarm mode de docker.

Quel est swarm mode ?

Un essaim est un cluster de moteurs Docker, ou nœuds, sur lequel vous déployez des services. L'interface CLI et l'API Docker Engine incluent des commandes pour gérer les nœuds de l'essaim (par exemple, ajouter ou supprimer des nœuds) et déployer et orchestrer les services sur l'essaim.

De SO Documentation:

Un essaim est un certain 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.

Ainsi, avec le mode Swarm, vous avez un cluster multi-hôtes (vms et/ou physique) et des machines qui communiquent entre elles via leur docker engine .

Q1. Qu'est-ce que le Webnet?

webnet est le nom d'un overlay network qui est créé au lancement de votre pile.

Les réseaux de superposition gèrent les communications entre les démons Docker participant à l'essaim

Dans votre cluster de machines, un réseau virtuel est créé, où chaque service a une adresse IP mappée à une entrée DNS interne (qui est le nom du service), et permettant à Docker de router les paquets entrants vers le bon conteneur, partout dans l'essaim ( grappe).

Q2. Ainsi, par défaut, le réseau de superposition est équilibré en charge dans le cluster docker?

Oui, si vous utilisez le réseau de superposition, mais vous pouvez également supprimer la configuration du service networks pour contourner cela. Ensuite, vous devrez publier le port du service que vous souhaitez exposer.

Q3. À quoi sert l'algo d'équilibrage de charge?

De cela question SO répondu par le maître de l'essaim bmitch ;):

L'algorithme est actuellement round-robin et je n'ai vu aucune indication qu'il soit encore pluginable. Un équilibreur de charge de niveau supérieur permettrait de supprimer les nœuds d'essaim pour maintenance, mais toutes les sessions persistantes ou autres fonctionnalités de routage seront annulées par l'algorithme de tourniquet en mode essaim.

Q4. En fait, je ne comprends pas pourquoi nous avons l'équilibrage de charge sur le réseau de superposition

Le but du mode/services docker swarm est de permettre l'orchestration des services répliqués , ce qui signifie que nous pouvons augmenter/réduire les conteneurs déployés dans l'essaim.

De la docs à nouveau:

Le mode Swarm possède un composant DNS interne qui attribue automatiquement à chaque service de l'essaim une entrée DNS. Le gestionnaire d'essaim utilise l'équilibrage de charge interne pour répartir les demandes entre les services au sein du cluster en fonction du nom DNS du service.

Ainsi, vous pouvez avoir déployé comme 10 exactement le même conteneur (disons nginx avec votre application html/js), sans avoir à gérer les entrées DNS du réseau privé, la configuration des ports, etc. essaim.

J'espère que cela t'aides!

40
François Maturel