0

J'ai mis en place un cluster en mode essaim de docker, avec deux managers et un worker. C'est sur Centos 7. Ils sont sur les machines dkr1, dkr2, dkr3. dkr3 est le travailleur. Je passais à v1.13 l'autre jour, et je voulais zéro temps d'arrêt. Mais cela n'a pas fonctionné exactement comme prévu. J'essaie de trouver la bonne façon de procéder, car c'est l'un des principaux objectifs d'avoir un cluster.Équilibrage de charge en mode essaim Docker

L'essaim est en mode 'global'. C'est-à-dire, une réplique par machine. Ma méthode de mise à niveau consistait à vider le noeud, arrêter le démon, mettre à jour yum, démarrer le démon. (Notez que cela effacé mes paramètres de configuration du démon pour ExecStart = ...! Soyez prudent si vous mettez à niveau.)

Notre client/ESB frappe dkr2, qui fait sa magie d'équilibrage de charge sur l'essaim. dkr2 qui est le chef. dkr1 est 'joignable'

J'ai descendu dkr3. Pas d'issues. Docker amélioré. Je l'ai ramené. Aucun temps d'arrêt de faire tomber le travailleur.

Diminué dkr1. Pas de problème au début. Je travaille toujours quand je l'ai ramené. Docker amélioré. Je l'ai ramené. Mais au démarrage, il 404'ed. Une fois levé, c'était OK.

Diminué dkr2. Je n'ai pas réellement enregistré ce qui s'est passé alors, désolé.

Quoi qu'il en soit, alors que mon application démarrait sur dkr1, elle 404'ed, puisque le serveur n'avait pas encore démarré.

Une idée de ce que je pourrais faire de mal? Je suppose que j'ai besoin d'un contrôle de santé, parce que le conteneur est bien évidemment, mais le serveur ne répond pas encore. Donc, c'est quand je reçois des temps d'arrêt.

Répondre

1

Vous avez raison - Vous devez spécifier un bilan de santé à exécuter sur votre application à l'intérieur du conteneur afin de vous assurer qu'il est prêt. Votre conteneur ne recevra pas de trafic tant que cette vérification n'aura pas réussi.

Une boucle simple à une extrémité devrait suffire. Utilisez le drapeau Healthcheck dans votre Dockerfile pour spécifier un bilan de santé à effectuer.

Un exemple de la ligne healthcheck dans un Dockerfile pour vérifier si un point final retourné 200 OK serait: HEALTHCHECK CMD curl -f 'http://localhost:8443/somepath' || exit 1

Si vous ne pouvez pas modifier votre Dockerfile, vous pouvez également spécifier votre healthcheck manuellement au moment du déploiement en utilisant le compose file healthcheck format.

Si cela n'est pas possible non plus et que vous devez mettre à jour un service en cours d'exécution, vous pouvez faire un service update et utiliser une combinaison des indicateurs health pour spécifier votre bilan de santé.