Vamos supor um cluster Docker de 3 nós. Um desses nós, os recursos são apertados. Alguns serviços que podem ser bastante gananciosos em termos de CPU ou RAM começaram no mesmo host.
Em algum momento, o Docker verificará se os outros nós têm menos trabalho a fazer e migrará um ou mais serviços do nó pressionado para um dos nós menos pressionados?
Existe alguma funcionalidade embutida no Docker para lidar com isso ou uma migração eventualmente será resultado de, por exemplo, um assassino OOM retirar um contêiner?
Swarm não move tarefas (contêineres). Seu objetivo é "não causar danos" movendo contêineres que você não disse explicitamente para fazer isso. Se você fizer
service update
isso, ele recriará o contêiner, potencialmente em outros nós com base em 1. garantir que as tarefas nesse serviço sejam distribuídas entre os nós e 2. densidade do contêiner por nó.Mas AFAIK essa avaliação não é baseada na utilização de recursos momento a momento.
Você pode usar
--limit-cpu/memory
e--reserve-cpu/memory
opções em seusservice create/update
comandos que ajudarão.reserve
fará com que o Swarm rastreie essa reserva e, se você definir reservas para vários serviços, ele garantirá que eles sejam agendados em nós que tenham esses recursos disponíveis, mas, novamente, ele apenas usa a tabela de reservas, não a utilização em tempo real para determinar isso (AFAIK ).Já vi pessoas usarem o Prometheus para monitorar e iniciar alertas que dimensionam um serviço, então é possível que esses alertas também possam iniciar a movimentação de um contêiner.