Sei interessato?
Control Service Placement in Docker Swarm
Indice
Introduzione
Replicated vs Global Services
Example - Creating a Replicated Service
Example - Creating a Global Service
Resources Constraints: Reserve Memory or CPU
Example: Reserving CPU & Memory
Placement Constraints​
Example: Using Node Labels for Placement​​
Adding Labels to Nodes
Placement Preferences
Example: Spread Service Across Data Centers
Combining Preferences with Constraints
Handling Resource Limitations
Monitoring Service Placement
Conclusione
Introduzione
Docker Swarm offre una solida piattaforma per orchestrare e scalare i servizi su più nodi.Â
Una delle potenti caratteristiche di Docker Swarm è il controllo del posizionamento dei servizi. In questo articolo esploreremo diversi modi per gestire il posizionamento dei servizi sui nodi, utilizzando vincoli di risorse, preferenze di posizionamento e modalità di servizio.
Replicated vs Global Services
Docker Swarm consente due tipi di servizi: Replicated and Global.
1 – Replicated services: consentono di specificare quante copie (repliche) di un servizio devono essere eseguite.
2 – Global services: assicurano che ogni nodo esegua esattamente un’istanza del servizio.
Example: Creating a Replicated Service
Vediamo come funziona un Replicated Service, creiamo un semplice servizio Nginx replicato con 3 repliche.
Questo comando lancia 3 repliche del servizio `nginx`repliche, distribuite automaticamente sui nodi disponibili.
Example: Creating a Global Service
Per distribuire un servizio globale invece, che viene eseguito su ogni nodo, usare il flag `–mode global`.
Questo esegue un’istanza di `nginx` su ogni nodo e ogni volta che un nuovo nodo si unisce, esegue automaticamente il servizio.
Resource Constraints: Reserve Memory or CPU
Docker Swarm consente di specificare i requisiti delle risorse per ogni servizio. È possibile riservare una quantità specifica di memoria o CPU per ogni servizio, per garantire che venga eseguito solo sui nodi in grado di soddisfare tali requisiti.
Example: Reserving CPU and Memory
Proviamo quindi a lanciare un servizio riservando 0,5 CPU e 1 GB di memoria a un servizio Nginx:
Placement Constraints
I vincoli di posizionamento consentono di limitare i nodi su cui un servizio può essere eseguito, in base a specifici attributi o etichette del nodo.
Example: Using Node Labels for Placement
Si supponga di voler eseguire il servizio solo sui nodi della regione est. Si può usare il flag `–constraint` per specificare questo requisito:
Questo comando assicura che il servizio Nginx venga eseguito solo sui nodi etichettati con `label=test`.
Adding Labels to Nodes
È possibile aggiungere etichette a un nodo utilizzando il seguente comando:
Assicurarsi di assegnare le etichette ai nodi prima di applicare il vincolo.
Placement Preferences
Mentre i vincoli di posizionamento limitano i nodi su cui un servizio può essere eseguito, le preferenze di posizionamento distribuiscono i task tra i nodi disponibili in modo algoritmico. Attualmente, Docker Swarm supporta l’algoritmo `spread`, che cerca di bilanciare le attività in modo uniforme tra i nodi che corrispondono alle preferenze.
Nota: Le preferenze di posizionamento vengono ignorate per i servizi globali.
Example: Spread Service Across Data Centers
Supponiamo di avere nodi etichettati con l’etichetta `datacenter` (ad esempio, `us-east` e `us-west`) e di voler distribuire le repliche tra questi data center.
In questo caso, il servizio nginx sarà distribuito tra i nodi di `us-east` e `us-west` nel modo più uniforme possibile.
Combining Preferences with Constraints
È possibile combinare le preferenze di posizionamento con i vincoli.Ad esempio, distribuiamo i task tra i data center, ma solo sui nodi della regione est:
Handling Resource Limitations
Se un servizio tenta di utilizzare più risorse di quelle disponibili sul nodo, è possibile che si verifichino eccezioni di esaurimento della memoria (OOME). Per evitare che ciò accada, assicurarsi che i nodi abbiano memoria sufficiente per gestire i carichi di lavoro del servizio.
Monitoring Service Placement
Una volta distribuiti i servizi con vincoli o preferenze di posizionamento, si può usare il comando seguente per verificarne lo stato e il posizionamento:
Questo comando fornisce una panoramica dell’esecuzione di ogni replica o task, consentendo di verificare che i vincoli e le preferenze siano rispettati.
Conclusione
Utilizzando i vincoli di risorse, le preferenze di posizionamento e i vincoli di posizionamento di Docker Swarm, potete controllare finemente dove e come i vostri servizi vengono eseguiti tra i nodi del vostro Swarm. Sia che vogliate riservare risorse, imporre l’alta disponibilità o bilanciare i carichi di lavoro tra le regioni,Â
Le funzionalità di posizionamento dei servizi di Docker Swarm semplificano la gestione e la scalabilità dei servizi in modo efficace.
A cura di Gaetano Maurizio Abbaticchio