Techniques avancées de mise à l'échelle
Contraintes de placement
Les contraintes de placement vous permettent de contrôler où les tâches sont placées dans le Swarm. Cela peut être utile pour des scénarios de mise à l'échelle avancés, tels que :
- Placer des tâches sur des noeuds spécifiques en fonction des ressources matérielles ou de l'emplacement
- Séparer différents services ou composants sur des noeuds différents
- Garantir une haute disponibilité en répartissant les tâches sur plusieurs zones de disponibilité
Voici un exemple d'utilisation des contraintes de placement :
## Create a service with a placement constraint
docker service create --constraint 'node.labels.region==us-east' my-service
Dans cet exemple, les tâches du service seront placées sur les noeuds ayant l'étiquette region=us-east
.
Mises à jour incrémentielles (Rolling Updates)
Docker Swarm prend en charge les mises à jour incrémentielles, qui vous permettent de mettre à jour vos services avec un temps d'arrêt minimal. Lors d'une mise à jour incrémentielle, de nouvelles tâches sont déployées progressivement, et les anciennes tâches sont supprimées à mesure que les nouvelles deviennent disponibles.
Vous pouvez configurer le degré de parallélisme et le délai de mise à jour pour contrôler le rythme de la mise à jour incrémentielle :
## Perform a rolling update with a parallelism of 2 and a delay of 10 seconds
docker service update --update-parallelism 2 --update-delay 10s my-service
Mise à l'échelle avec des services répliqués et globaux
Docker Swarm prend en charge deux modes de déploiement de services :
- Services répliqués (Replicated Services) : Dans ce mode, vous spécifiez le nombre souhaité de répliques pour le service, et Swarm s'assurera que le nombre spécifié de tâches est en cours d'exécution.
- Services globaux (Global Services) : Dans ce mode, une seule tâche du service sera exécutée sur chaque noeud du Swarm.
Les services répliqués sont utiles pour la mise à l'échelle d'applications sans état, tandis que les services globaux sont utiles pour exécuter des services d'infrastructure ou des agents qui doivent être présents sur chaque noeud.
Voici un exemple de création d'un service répliqué et d'un service global :
## Create a replicated service
docker service create --replicas 5 my-service
## Create a global service
docker service create --mode global my-agent
Mise à l'échelle avec des étiquettes et des contraintes de noeud
Vous pouvez utiliser des étiquettes et des contraintes de noeud pour cibler des noeuds spécifiques pour la mise à l'échelle. Cela peut être utile pour des scénarios tels que :
- Mettre à l'échelle des services à la demande sur des types de noeuds spécifiques (par exemple, des noeuds équipés de GPU)
- Mettre à l'échelle des services avec état sur des noeuds ayant un stockage local
- Mettre à l'échelle des services dans des zones de disponibilité ou des régions spécifiques
Voici un exemple d'utilisation d'étiquettes et de contraintes de noeud :
## Add a label to a node
docker node update --label-add gpu=true node1
## Create a service that uses the gpu label
docker service create --constraint 'node.labels.gpu==true' my-gpu-service
En combinant ces techniques avancées de mise à l'échelle, vous pouvez créer des déploiements Docker Swarm hautement évolutifs et résilients qui répondent à vos besoins spécifiques.