Appliquer des mises à jour progressives à un service
Dans une étape précédente du tutoriel, vous avez mis à l'échelle le nombre d' instances d'un service. Dans cette partie du tutoriel, vous déployez un service basé sur le tag de conteneur Redis 7.4.0. Ensuite, vous mettez à niveau le service pour utiliser l' image de conteneur Redis 7.4.1 en utilisant des mises à jour progressives.
-
Si vous ne l'avez pas déjà fait, ouvrez un terminal et connectez-vous en ssh à la machine où vous exécutez votre nœud gestionnaire. Par exemple, le tutoriel utilise une machine nommée
manager1. -
Déployez votre tag Redis dans le swarm et configurez le swarm avec un délai de mise à jour de 10 secondes. Notez que l'exemple suivant montre un tag Redis plus ancien :
$ docker service create \ --replicas 3 \ --name redis \ --update-delay 10s \ redis:7.4.0 0u6a4s31ybk7yw2wyvtikmu50Vous configurez la politique de mise à jour progressive au moment du déploiement du service.
Le flag
--update-delayconfigure le délai entre les mises à jour d'une tâche de service ou d'ensembles de tâches. Vous pouvez décrire le tempsTcomme une combinaison du nombre de secondesTs, minutesTm, ou heuresTh. Donc10m30sindique un délai de 10 minutes 30 secondes.Par défaut, le planificateur met à jour 1 tâche à la fois. Vous pouvez passer le flag
--update-parallelismpour configurer le nombre maximum de tâches de service que le planificateur met à jour simultanément.Par défaut, lorsqu'une mise à jour d'une tâche individuelle retourne un état de
RUNNING, le planificateur planifie une autre tâche à mettre à jour jusqu'à ce que toutes les tâches soient mises à jour. Si à tout moment pendant une mise à jour une tâche retourneFAILED, le planificateur met en pause la mise à jour. Vous pouvez contrôler le comportement en utilisant le flag--update-failure-actionpourdocker service createoudocker service update. -
Inspectez le service
redis:$ docker service inspect --pretty redis ID: 0u6a4s31ybk7yw2wyvtikmu50 Name: redis Service Mode: Replicated Replicas: 3 Placement: Strategy: Spread UpdateConfig: Parallelism: 1 Delay: 10s ContainerSpec: Image: redis:7.4.0 Resources: Endpoint Mode: vip -
Maintenant vous pouvez mettre à jour l'image de conteneur pour
redis. Le gestionnaire swarm applique la mise à jour aux nœuds selon la politiqueUpdateConfig:$ docker service update --image redis:7.4.1 redis redisLe planificateur applique les mises à jour progressives comme suit par défaut :
- Arrêter la première tâche.
- Planifier la mise à jour pour la tâche arrêtée.
- Démarrer le conteneur pour la tâche mise à jour.
- Si la mise à jour d'une tâche retourne
RUNNING, attendre la période de délai spécifiée puis démarrer la tâche suivante. - Si, à tout moment pendant la mise à jour, une tâche retourne
FAILED, mettre en pause la mise à jour.
-
Exécutez
docker service inspect --pretty redispour voir la nouvelle image dans l' état désiré :$ docker service inspect --pretty redis ID: 0u6a4s31ybk7yw2wyvtikmu50 Name: redis Service Mode: Replicated Replicas: 3 Placement: Strategy: Spread UpdateConfig: Parallelism: 1 Delay: 10s ContainerSpec: Image: redis:7.4.1 Resources: Endpoint Mode: vipLa sortie de
service inspectmontre si votre mise à jour s'est mise en pause à cause d'une défaillance :$ docker service inspect --pretty redis ID: 0u6a4s31ybk7yw2wyvtikmu50 Name: redis ...snip... Update status: State: paused Started: 11 seconds ago Message: update paused due to failure or early termination of task 9p7ith557h8ndf0ui9s0q951b ...snip...Pour redémarrer une mise à jour en pause, exécutez
docker service update <SERVICE-ID>. Par exemple :$ docker service update redisPour éviter de répéter certaines défaillances de mise à jour, vous pourriez avoir besoin de reconfigurer le service en passant des flags à
docker service update. -
Exécutez
docker service ps <SERVICE-ID>pour regarder la mise à jour progressive :$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR redis.1.dos1zffgeofhagnve8w864fco redis:7.4.1 worker1 Running Running 37 seconds \_ redis.1.88rdo6pa52ki8oqx6dogf04fh redis:7.4.0 worker2 Shutdown Shutdown 56 seconds ago redis.2.9l3i4j85517skba5o7tn5m8g0 redis:7.4.1 worker2 Running Running About a minute \_ redis.2.66k185wilg8ele7ntu8f6nj6i redis:7.4.0 worker1 Shutdown Shutdown 2 minutes ago redis.3.egiuiqpzrdbxks3wxgn8qib1g redis:7.4.1 worker1 Running Running 48 seconds \_ redis.3.ctzktfddb2tepkr45qcmqln04 redis:7.4.0 mmanager1 Shutdown Shutdown 2 minutes agoAvant que Swarm mette à jour toutes les tâches, vous pouvez voir que certaines exécutent
redis:7.4.0tandis que d'autres exécutentredis:7.4.1. La sortie ci-dessus montre l'état une fois que les mises à jour progressives sont terminées.
Prochaines étapes
Ensuite, vous apprendrez comment drainer un nœud dans le swarm.