DevSecOps

16 fev, 2017

Gerenciamento de CPU no Docker 1.13

Publicidade

Gerenciamento de recursos para containers é uma exigência enorme para os usuários de produção. Ser capaz de executar vários containers em um único host e garantir que um container não fique sem recursos em termos de CPU, memória, IO, ou rede, de uma forma eficiente, é a razão pela qual eu gosto de trabalhar com containers.

No entanto, o gerenciamento de CPU para containers ainda não é tão simples quanto eu gostaria.Há muitas opções diferentes quando se trata de lidar com restrição do uso da CPU para um container. Com a memória, por exemplo, é muito fácil para as pessoas pensar que –memory 512m dá ao container até 512MB. Com a CPU, é mais difícil para as pessoas entenderem o limite de um container com as opções atuais.

No Docker 1.13, nós adicionamos uma flag –cpus, que é a melhor tecnologia para limitar o uso da CPU de um container com uma UX que a maioria dos usuários consegue entender. Vamos dar uma olhada em algumas das opções da versão 1.12 para mostrar por que isso é necessário.

Existem várias maneiras de definir um limite de CPU para um container. Compartilhamento de CPU, cpuset, alocação CFS e de período são as três maneiras mais comuns. Nós podemos apenas ir em frente e dizer que o uso de compartilhamentos de CPU é a mais confusa e pior funcionalidade de todas as opções que temos. Os números não fazem sentido. Por exemplo, 5 é um grande número ou 512 é metade dos recursos do meu sistema se tenho um máximo de 1024 partes? 100 partes são significativas quando eu só tenho um container; no entanto, se eu adicionar mais dois containers, cada um com 100 ações, o que isso significa?  Nós poderíamos nos aprofundar sobre o compartilhamento de CPU, mas você tem que lembrar que o compartilhamento da CPU tem relação a todo o resto do sistema.

Cpuset é uma alternativa viável, mas é preciso muito mais pensamento e planejamento para usá-lo corretamente e nas circunstâncias corretas. O agendador CFS juntamente com a alocação e o período são algumas das melhores opções para limitar o uso da CPU pelo container, mas eles vêm com interfaces de usuário ruins. Especificando o uso da CPU em nanossegundos para um usuário às vezes é difícil determinar quando você quer fazer tarefas simples, como limitar um container a um núcleo.

No 1.13, porém, se você quer que um container seja limitado a uma CPU, então você pode apenas adicionar –cpus 1.0 à linha de comando do seu Docker para executar/criar. Se você gostaria de ter duas CPUs e meia como o limite do container, então basta adicionar –cpus 2.5. No Docker, estamos usando a alocação CFS e de período para limitar o uso de CPU do container para o que você quer e fazer os cálculos para você.

Se você está limitando o uso da CPU para os seus containers, veja essa nova flag e API para lidar com suas necessidades. Essa flag vai funcionar no Linux e no Windows ao utilizar Docker.

Para mais informações sobre o recurso, você pode ler documentos em https://docs.docker.com/engine/admin/resource_constraints/

Para mais informações sobre o Docker 1.13 em geral, confira estes links:

***

Este artigo é do Docker Core Engineering. A tradução do artigo foi feita pela Redação iMasters com autorização, e você pode acompanhar o artigo em inglês no link: https://blog.docker.com/2017/01/cpu-management-docker-1-13/.