O Swarm não move tarefas (contêineres). Seu objetivo é "não fazer mal" movendo contêineres que você não disse explicitamente para fazer isso. Se você fizer um service update
, ele recriará o contêiner, potencialmente em outros nós, com base em 1. assegurando que as tarefas nesse serviço estejam distribuídas entre os nós e 2. a densidade do contêiner por nó.
Mas a AFAIK nessa avaliação não é baseada na utilização de recursos momento a momento.
Você pode usar as opções --limit-cpu/memory
e --reserve-cpu/memory
nos seus comandos service create/update
que ajudarão. reserve
fará com que o Swarm rastreie essa reserva e, se você definir reservas para vários serviços, verificará se eles estão agendados em nós com esses recursos disponíveis, mas, novamente, usa apenas a tabela de reservas, não a utilização em tempo real para determinar que (AFAIK).
Eu vi pessoas usarem o Prometheus para monitorar e lançar alertas que escalam um serviço, portanto, é possível que esses alertas também iniciem a movimentação de um contêiner.