Fortgeschrittene Skalierungstechniken
Platzierungskontrollen (Placement Constraints)
Platzierungskontrollen ermöglichen es Ihnen, zu steuern, wo Tasks innerhalb des Swarms platziert werden. Dies kann für fortgeschrittene Skalierungsszenarien nützlich sein, wie beispielsweise:
- Platzieren von Tasks auf bestimmten Nodes basierend auf Hardware-Ressourcen oder Standort
- Trennen verschiedener Dienste oder Komponenten auf verschiedene Nodes
- Sicherstellen der hohen Verfügbarkeit, indem Tasks über mehrere Verfügbarkeitszonen verteilt werden
Hier ist ein Beispiel, wie Sie Platzierungskontrollen verwenden können:
## Create a service with a placement constraint
docker service create --constraint 'node.labels.region==us-east' my-service
In diesem Beispiel werden die Dienst-Tasks auf Nodes mit der Bezeichnung region=us-east
platziert.
Rolling Updates
Docker Swarm unterstützt Rolling Updates, die es Ihnen ermöglichen, Ihre Dienste mit minimaler Ausfallzeit zu aktualisieren. Während eines Rolling Updates werden neue Tasks schrittweise bereitgestellt, und alte Tasks werden entfernt, sobald die neuen verfügbar sind.
Sie können die Parallelität und die Verzögerung der Aktualisierung konfigurieren, um das Tempo des Rolling Updates zu steuern:
## 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
Skalierung mit replizierten und globalen Diensten
Docker Swarm unterstützt zwei Arten von Dienst-Bereitstellungsmodi:
- Replizierte Dienste (Replicated Services): In diesem Modus geben Sie die gewünschte Anzahl von Replikaten für den Dienst an, und Swarm stellt sicher, dass die angegebene Anzahl von Tasks ausgeführt wird.
- Globale Dienste (Global Services): In diesem Modus wird eine einzelne Instanz des Dienstes auf jedem Node im Swarm ausgeführt.
Replizierte Dienste sind nützlich für die Skalierung zustandsloser Anwendungen, während globale Dienste nützlich sind für die Ausführung von Infrastrukturdiensten oder Agenten, die auf jedem Node vorhanden sein müssen.
Hier ist ein Beispiel für die Erstellung eines replizierten und eines globalen Dienstes:
## Create a replicated service
docker service create --replicas 5 my-service
## Create a global service
docker service create --mode global my-agent
Skalierung mit Node-Bezeichnungen (Labels) und Kontrollen
Sie können Node-Bezeichnungen und Kontrollen verwenden, um bestimmte Nodes für die Skalierung auszuwählen. Dies kann für Szenarien nützlich sein wie:
- Skalierung von bedarfsgesteuerten Diensten auf bestimmten Node-Typen (z.B. GPU-fähige Nodes)
- Skalierung von zustandsbehafteten Diensten auf Nodes mit lokalem Speicher
- Skalierung von Diensten in bestimmten Verfügbarkeitszonen oder Regionen
Hier ist ein Beispiel für die Verwendung von Node-Bezeichnungen und Kontrollen:
## 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
Indem Sie diese fortgeschrittenen Skalierungstechniken kombinieren, können Sie hochskalierbare und widerstandsfähige Docker Swarm-Bereitstellungen erstellen, die Ihren spezifischen Anforderungen entsprechen.