Control Service Placement in Docker Swarm

Introduzione

Docker Swarm offre una solida piattaforma per orchestrare e scalare i servizi su più nodi. 

Control Service Plane

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.

Replicated services

2 – Global services: assicurano che ogni nodo esegua esattamente un’istanza del servizio.

One instance each node

Example: Creating a Replicated Service

Vediamo come funziona un Replicated Service, creiamo un semplice servizio Nginx replicato con 3 repliche.

comando 1

Questo comando lancia 3 repliche del servizio `nginx`repliche, distribuite automaticamente sui nodi disponibili.

Repliche

Example: Creating a Global Service

Per distribuire un servizio globale invece, che viene eseguito su ogni nodo, usare il flag `–mode global`.

Global Service

Questo esegue un’istanza di `nginx` su ogni nodo e ogni volta che un nuovo nodo si unisce, esegue automaticamente il servizio.

Global service 2

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:

Riservare CPU e Memoria

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:

Node Labels for Placement

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:

Adding labels to node

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.

Spread Service Across Data Centers

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:

Combining Preference con Constraints

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:

Monitoring Service Placement

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