J'aimerais savoir comment configurer cet outil pour qu'il commence avec un nombre minimal de nœuds et qu'il atteigne un nombre maximal de nœuds lorsque cela est nécessaire.
Devrais-je utiliser un autre outil ou Docker Swarm peut-il résoudre ce problème pour moi?
Réponse courte: Il n'y a pas de moyen facile de faire cela avec Docker Swarm pour le moment.
Docker Swarm (ou le mode Swarm) ne prend pas en charge les machines auto-scaling prêtes à l'emploi. Pour cela, vous devez utiliser une autre solution, telle que docker-machine
, pour créer des machines (avec menu fixe) sur votre infrastructure et les lier au cluster Swarm existant (avec docker swarm join
).
Cela impliquera beaucoup de scripts mais l’idée est de surveiller le cluster pour l’utilisation du processeur/de la mémoire/du réseau (avec top
ou monit
) et une fois que celui-ci dépasse un seuil (disons _ {70% des ressources totales du cluster) , vous déclenchez un script appelant docker-machine
pour augmenter la taille du cluster. En utilisant la même idée, vous pouvez également réduire les nœuds draining et remove (de préférence, les nœuds Agent
) du groupe d'essaims existant une fois que vous êtes sous le seuil inférieur.
Vous devez vous assurer que vous surveillez bien l'utilisation durable des ressources si vous souhaitez utiliser ce critère ou que votre infrastructure génère et détruit des nœuds à partir des changements fréquents et soudains dans l'utilisation des ressources.
Vous pouvez définir une limite inférieure et une limite supérieure pour que les machines du cluster contrôlent le contrôle.
Notez que Swarm nécessite au moins 3 nœuds Manager
(recommandé 5) pour maintenir un quorum pour l'algorithme de consensus distribué. Donc, la limite inférieure recommandée est de 5 nœuds (que vous pouvez étendre avec les nœuds Agent
lorsque les ressources sont utilisées de manière incrémentielle par les services).
Dans une certaine mesure, vous pouvez également consulter Docker InfraKit ou Terraform for automatisation de l'infrastructure et surveillance de l'état de santé.
Update: Il existe maintenant un analyseur automatique multi-plateformes prometteur qui prend en charge le mode par essaim task-scaling: Orbiter . Bien que rien ne soit encore prêt à l'emploi pour la mise à l'échelle automatique des services/machines.
La mise à l'échelle est assez facile. Vous pouvez simplement continuer à planifier des conteneurs en cas de besoin. Ensuite, vous créez simplement un script qui recherche un conteneur en attente et met à l'échelle le cluster. Par exemple, si vous utilisez le modèle officiel CloudFormation sur aws for swarm, vous pouvez simplement modifier le nombre souhaité sur le groupe de mise à l'échelle automatique. Un exemple de script d'itération pourrait ressembler à ceci:
services=$(docker service ls --format '{{.ID}}')
for service in $services; do
tasks=$(docker service ps $service --format '{{.ID}}')
for task in $tasks; do
if docker inspect $task --format '{{.Status}}' | grep 'insufficient resources' 1>/dev/null; then
scale-up-cmd
fi
done
done
Selon ce numéro sur GitHub , la mise à l'échelle automatique n'est pas prise en charge pour le moment. Un des participants à la discussion a indiqué que:
Non disponible aujourd'hui. Swarm utilise Docker-Compose pour mettre à l’échelle de manière statique . Une surveillance CPU/QPS est nécessaire pour effectuer la mise à l'échelle automatique. Swarm n'a pas ça encore.
Une question a été posée pour savoir si un ticket actuel pourrait être lié à cette question afin que cette fonctionnalité puisse être mise en œuvre.