docker swarm com nós heterogêneos: limite por recursos disponíveis?

0

Eu tenho um pequeno enxame docker em execução no meu escritório: um de 40 núcleos (128 GB de RAM) e dois de oito núcleos (16 GB de RAM cada). Quando eu implemento um serviço no swarm, os jobs estão em execução, mas eles são distribuídos uniformemente sem considerar a capacidade por máquina.

Eu comecei o enxame no gerente com:

docker swarm init
docker swarm update --task-history-limit 2

e em cada nó:

docker swarm join --token <token-string> <ipaddr:port>

Então eu inicio um serviço com:

docker service create --detach \
     --mount type=bind,src=/s/mypath,dst=/home/mypath \
     --entrypoint "/home/mypath/myscript.sh arg1 arg2" \
     --name "mystuff" -w /home/mypath myregistry.me.com:5433/myimage

O processo funciona individualmente. Eu não encontrei uma indicação de ponderação de atribuição ou afinidade com base na força do nó.

Idealmente, gostaria de poder dizer algo como um destes:

  1. junte-se ao enxame, não leve mais de n tarefas (um pouco ingênuas)
  2. junte-se ao enxame, peso minha capacidade (cpu-) como 0.2 (ou 5 nos maiores)
  3. inicie este serviço, atribua não mais de uma tarefa por núcleo disponível

Eu estou auto-regulando a escala global do serviço com docker service scale , mas isso não fornece nenhuma granularidade. É possível regular os serviços de enxame docker por nó pelos recursos disponíveis?

(Isso pode ser ainda mais incentivo para mudar para o k8s, o que eu estou supondo que fornece funcionalidade ao longo destas linhas. Há dores de crescimento com o aprendizado e a transição que eu tenho feito com o stiff-arming.)

    
por r2evans 22.01.2018 / 19:26

1 resposta

1

Tudo o que é realmente possível quando você cria ou atualiza um serviço Swarm.

Isso se enquadra nas opções de "posicionamento do contêiner" nesses comandos. Se você está preocupado com a reserva de recursos, veja --reserve-cpu e --reserve-memory . Isso garantirá que o nó tenha o cpu livre ou a memória disponível em um nó antes de atribuir a tarefa a cada contêiner.

Exemplo: Se você precisa de um serviço de enxame para implantar duas réplicas de php, e cada um precisa certificar-se de que está em um nó com 1GB de memória e 1 CPU, então service create --reserve-cpu 1 --reserve-memory 1GB php agendará os contêineres nos nós que o programador do Swarm sabe que tem essa quantidade de hardware disponível. Se um nó tiver apenas 2 CPUs lógicas, nunca implantar mais do que 2 réplicas desse serviço nesse nó.

    
por 24.01.2018 / 04:45