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 0u6a4s31ybk7yw2wyvtikmu50
Vous configurez la politique de mise à jour progressive au moment du déploiement du service.
Le flag
--update-delay
configure le délai entre les mises à jour d'une tâche de service ou d'ensembles de tâches. Vous pouvez décrire le tempsT
comme une combinaison du nombre de secondesTs
, minutesTm
, ou heuresTh
. Donc10m30s
indique 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-parallelism
pour 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-action
pourdocker service create
oudocker 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 redis
Le 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 redis
pour 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: vip
La sortie de
service inspect
montre 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 redis
Pour é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 ago
Avant que Swarm mette à jour toutes les tâches, vous pouvez voir que certaines exécutent
redis:7.4.0
tandis 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.