• Nenhum resultado encontrado

Os containers são uma tecnologia de virtualização que permite a instalação de aplicações num único pacote, contendo as suas dependências em termos de bibliotecas e definições. Esta tecnologia possibilita a execução de múltiplas aplicações (containers) numa mesma máquina que tenha suporte à execução de containers, sem que existam conflitos entre eles [1,7,15].

Os containers são um mecanismo de virtualização bastante leve, em que um container pode ser iniciado em poucos segundos, e dado que não são uma virtualização completa do hardware físico como as máquinas virtuais, têm um menor overhead. A Figura2.7mostra a diferença entre as máquinas virtuais e os containers.

Atualmente existem diversos motores de containers, como o CoreOS RKT14, o Mesos Containerizer15ou o Docker16, sendo o Docker o mais utilizado, representando 83% da

utilização de motores de containers em produção [65].

Para que um container seja iniciado, tem que ser dada a informação sobre qual a imagem que se pretende executar. Cada imagem contém a aplicação (ou aplicações) e todo o software necessário para a execução da mesma(s), sendo que pode estar disponível apenas localmente, ou em repositórios privados ou públicos, como o Docker Hub17. Cada

container possibilita também ser configurado em termos de recursos que pode utilizar,

por exemplo a nível de CPU, RAM, disco, etc.

14CoreOS RKT:https://coreos.com/rkt/

15Mesos Containerizer:http://mesos.apache.org/documentation/latest/mesos-containerizer/ 16Docker:https://www.docker.com/

Infrastructure Host Operating System Hypervisor Guest OS Guest OS bins/libs bins/libs App A App B Infrastructure Operating System Container Engine Container bins/libs App A Virtual Machines Containers Container bins/libs App C Container bins/libs App B

Figura 2.7: Máquinas virtuais vs. containers. Adaptado de [46].

2.6.1 Containers e micro-serviços

Como descrito anteriormente em2.2.3.4, uma possibilidade de executar micro-serviços é com recurso a containers. Esta opção tem diversas vantagens, pois os micro-serviços são aplicações pequenas, que podem ser implementadas em diversas linguagens e fra-

meworks, sendo que com a utilização de containers é possível obter uma abstração em que

os micro-serviços são instalados contendo todas as suas dependências. Assim, podem ser executados micro-serviços diferentes com requisitos diferentes numa só máquina, sem que existam conflitos entre eles. Isto permite também que a monitorização dos micro- serviços seja feita ao nível do container, o que facilita a identificação dos recursos reais que são utilizados por um dado micro-serviço, bem como todo o software necessário para a sua execução [30].

2.6.2 Orquestração de containers

A execução de múltiplos containers em simultâneo torna necessária a existência de me- canismos que façam a sua gestão de uma forma eficiente e eficaz. A orquestração de

containers é um conjunto de operações acordadas entre os fornecedores de serviços (cloud)

e os proprietários das aplicações, para realizar o deploy, monitorizar e controlar dinamica- mente as configurações dos recursos, de forma a garantir uma certa qualidade de serviço (QoS). Esta orquestração engloba o deployment inicial dos containers, mas também tem de efetuar a sua gestão em tempo de execução [6].

Devido ao elevado dinamismo e à complexidade do ambiente onde os containers são executados (por exemplo, um cluster com múltiplos nós em diferentes data centers), as decisões tomadas pela orquestração devem ter em conta as variações do ambiente e ser ajustadas em tempo de execução. Tal significa a necessidade da existência de mecanismos

autonómicos que façam essas decisões sem a intervenção humana.

Para realizar a orquestração de containers de uma forma autonómica existe a neces- sidade de ter em consideração certos fatores, como a gestão dos recursos em tempo de execução, a monitorização dos containers, etc.

2.6.2.1 Plataformas de orquestração

Atualmente já existem ferramentas que permitem a orquestração de containers. Contudo, ainda não fornecem funcionalidades verdadeiramente autonómicas que se adaptem aos mais variados cenários.

O Kubernetes18é uma ferramenta de orquestração de containers que possibilita a sua gestão num cluster de nós, sendo, atualmente, a ferramenta mais utilizada, com valores a chegar aos 51% de quota de mercado [65].

O Kubernetes oferece bastantes funcionalidades, como a substituição de um container que falha, a possibilidade de auto scaling de containers com base na taxa de utilização de CPU, entre outros. Por exemplo, o Kubernetes permite alterar automaticamente o número de containers através de um controlador denominado HPA (Horizontal Pod Autoscaler). O HPA é implementado através de um ciclo de controlo com um período de 30 segundos, em que a cada iteração é calculado o número de containers necessários com base na proporção entre o número de containers atual e a utilização de CPU, obtendo-se assim a utilização média de CPU. O resultado obtido é comparado com o valor limite de CPU previamente definido, e é então decidido se é necessário aumentar, diminuir, ou manter o número de

containers atual. Para além da configuração padrão do HPA, em que é utilizada a métrica

de CPU, é também possível configurar outro tipo de métricas [6,31,33].

O Docker Swarm é uma ferramenta que vem integrada com o Docker e que permite a criação de um cluster de nós para a execução de containers. Para cada tipo de container é possível especificar o número de réplicas pretendido, bem como alterá-lo em tempo de execução, sendo que, quando existe uma falha num determinado container, é inicia- lizado um novo. Esta é a segunda ferramenta mais utilizada para a gestão de containers representando 11% de quota de mercado [65].

Apesar das diversas vantagens que estas ferramentas oferecem na gestão de containers, ainda não são muito desenvolvidas em termos de funcionalidades no que diz respeito a mecanismos de adaptação quando existe a variação no número de acessos aos containers, nem na identificação da melhor localização para a execução dos mesmos com base na proveniência dos acessos.

No documento Gestão de micro-serviços na Cloud e Edge (páginas 65-67)