Você está na página 1de 7

Orquestração de Containers:

Uma breve revisão literária

João Paulo Costa Rua1 e Hugo Daniel Braga de Andrade2

Universidade de trás os Montes e Alto Douro, Vila Real, Portugal


1 al70407@alunos.utad.pt
2 al70833@alunos.utad.pt

Abstract
Este artigo tem por intenção apresentar uma visão geral do que é orquestração
de containers, explicando a fundo o que são, as suas vantagens e desvantagens e
como e quando esta deve ser utilizada. Para uma conceitualização adequada, a
pesquisa se dá através do enquadramento e aplicabilidade da orquestração de
containers, contendo uma comparação de três engines de orquestração de con-
tainers, sendo estes o Docker Swarm, e Kubernets, comparando tanto suas ca-
racterísticas em comum, quanto as suas específicas, em termos de quantidade,
qualidade e usabilidade de ferramentas e sua estabilidade. Em adição, será fala-
do sobre a implantação de funcionalidades, microserviços e como o uso de con-
tainers facilitou esta tarefa, ajudando não só empresas especializadas em desen-
volvimento de software, mas também auxiliando a introdução de novas infraes-
truturas. Será, também, feita uma exposição da performance dos containers nas
plataformas Docker e uma máquina virtual clássica, comparando diferentes re-
sultados encontrados ao longo do estudo.

Keywords: Orquestração de Containers, Kubernetes, Containers, Microservi-


ços, Máquinas Virtuais, Docker.

1 Introdução

Nos últimos anos, o uso de containers vem se popularizando cada vez mais, pois são
leves, flexíveis e permitem o código correr, de forma confiável, em diferentes ambi-
entes através do encapsulamento das aplicações juntamente com as suas bibliotecas,
ficheiros de configuração e outras dependências. Assim, os containers tornaram-se
excelentes soluções para o desenvolvimento de software moderno.
O contexto desta crescente popularidade dá-se juntamente à adoção de novos pa-
drões arquiteturais de software, principalmente os microserviços, que aumentam a
modularidade da aplicação e simplificam, desta forma, os seus testes, escalabilidade e
desenvolvimento. Tecnologias de containerização têm sido cruciais, permitindo rápi-
da implantação, escalabilidade e portabilidade a um custo mais baixo do que tecnolo-
gias mais antigas como, por exemplo, as máquinas virtuais tradicionais.
2

Existe uma notável dependência da indústria referente à containerização. Com a


adaptação de microserviços para containers, aplicações tendem a ter números cada
vez maiores de containers. De acordo com estudos realizados, cerca de cinquenta e
sete porcento das companhias tem entre dois e oito containers para cada aplicação.
Outros trinta e um porcento operam entre onze e cem containers por aplicação [6].
Geri-los individualmente, nestas escalas, não é viável.
Assim, a orquestração de containers assume um papel vital nestes sistemas, pois
permite usar automatização para gerir o ciclo de vida dos containers. Tal estratégia
aumenta a escalabilidade e facilita aplicações de maior tamanho a adotarem a contai-
nerização.
A orquestração de containers é, portanto, uma camada mais alta da containerização
que funciona através de orquestradores de containers, também conhecidos como mo-
tores de orquestração de containers, ferramentas que permitem automatizar o provisi-
onamento e gestão do container, como a coordenação e a comunicação entre micro-
serviços.
Ao longo deste artigo serão abordadas diferentes tecnologias referentes a orques-
tração de containers, motores de orquestração, containerização; bem como conceitos
prévios que servirão de base para um melhor entendimento do tema. Desta forma, a
pesquisa realizada terá como objetivo englobar a caracterização e localização da or-
questração de containers, seus benefícios, principais ferramentas e a importância de
seu uso na indústria.

2 Background

Nesta seção são apresentados os conhecimentos necessários para um entendimento


adequado da necessidade da orquestração de containers e o cenário dos sistemas mo-
dernos.

2.1 Virtualização

As origens da virtualização remontam à década de 1960, como um método de dividir


logicamente os recursos de sistema fornecidos pelos computadores mainframe entre
diferentes aplicações. Apesar de sua popularidade atual, foi apenas no final da década
de 1990 que começou a ter relevância significativa para a indústria, sendo até então
utilizada em sistemas pontuais da IBM.
Atualmente, a virtualização em servidores pode ser percebida como o processo de
criação de múltiplos sistemas virtuais em um único servidor. Estes sistemas, conheci-
dos como máquinas virtuais, podem variar do servidor, onde, por exemplo, pode ha-
ver um servidor Windows rodando máquinas virtuais Linux e MacOS.
Cada máquina virtual possui um sistema operacional inteiro e atua como uma má-
quina independente do sistema físico onde está sendo executada. Para isso, imita to-
dos os componentes de um computador real, incluindo CPU, armazenamento, RAM e
arquitetura de rede. [3][6]
3

2.2 Microserviços

Sistemas antigos de software normalmente utilizavam arquiteturas monolíticas para o


desenvolvimento de aplicações. Estas arquiteturas consistem, basicamente, numa
única pilha de aplicações, contendo todas as suas funcionalidades. Desta forma, são
fortemente acopladas, tanto na forma como é fornecido quanto na interação entre os
serviços. Atualizações de uma única aplicação tendem a afetar toda a pilha do siste-
ma. Alterações no código, por exemplo, obrigam o deploy da aplicação inteira. Assim,
este tipo de arquitetura cria problemas de manutenção e agilidade. Para solucionar
este problema, foi progressivamente adotada a arquitetura de microserviços.[3]
A arquitetura de microserviços permite desmembrar aplicações em componentes
menores e independentes. Cada um destes componentes é conhecido como microser-
viço. Estes têm as características de serem distribuídos e levemente acoplados, não
impactando assim uns nos outros. Diferentemente das aplicações monolíticas, são
mais ágeis, fáceis de implantar atualizações e de fazer manutenção, acelerando assim
o tempo de desenvolvimento. Os microserviços são comumente virtualizados e trans-
formados em containers, com a finalidade de aproveitar as características e vantagens
de ambos. Tal evolução pode ser acompanhada na figura abaixo.[6]

Figura 1: Evolução das aplicações ao longo do tempo

2.3 Devops
Devops é um conjunto de filosofias, práticas e ferramentas que permitem a uma equi-
pa lançar software a uma velocidade elevada. Tem como objetivo automatizar testes,
construção e entrega de soluções, com a finalidade de gerar software de forma mais
rápida e confiável. Para isto, otimiza o ciclo de vida da aplicação, desde o desenvol-
vimento até o deploy. Devops são aplicados comumente a arquiteturas de microservi-
ços, com o intuito de agilizar seus processos.
Para alcançar esta automatização, a virtualização assume um papel crucial no De-
vops. As máquinas virtuais permitem construir, testar e implantar código dentro de
ambientes isolados, permitindo análise do uso de recursos, maior escalabilidade, fle-
xibilidade e agilidade no desenvolvimento. [7]
4

Neste cenário, muitas empresas optam pela utilização de containerização para adi-
cionar ainda mais flexibilidade e leveza na criação de software. Entretanto, tal uso
acaba, muitas vezes, por gerar um número elevado de containers a serem geridos re-
sultando em perda de escalabilidade. Por isso são adotados, juntamente com as tecno-
logias de containerização, orquestradores de containers, responsáveis justamente pela
gestão e comunicação dos containers produzidos.

3 Tecnologias

A seguir será falado sobre containers, descrevendo o que são, como funcionam e o
quais são as alternativas. Será feita uma breve introdução ao Docker, o que é e como
funciona, descrevendo, assim, a sua arquitetura. Por fim, haverá uma introdução à
orquestração de containers, explicando o seu uso, e explicando em que situação se
devia utilizar as duas ferramentas de orquestração mais utilizadas pela comunidade, o
Kubernetes e o Docker Swarm.

3.1 Containers

Containers são fundamentais para rodar microserviços, armazenados com o código e


as suas dependências, para que a aplicação rode de forma mais suave e sem risco de
haver problemas, mantendo todo o código numa só máquina.
Antes de aparecer os containers, para poder rodar microserviços de forma indepen-
dente, eram utilizadas máquinas virtuais. Estas máquinas foram substituídas porque,
ao contrário dos containers, elas tinham de virtualizar o hardware, o que aumentava
em número de recursos, tempo de criação altos, mais difícil de ser gerados, entre ou-
tas inconveniências. Com o uso de containers, estes atrasos na criação de uma máqui-
na virtual foram reduzidos, uma vez que só era preciso virtualizar a aplicação, com a
possibilidade de ter múltiplas aplicações a rodar numa só máquina, partilhando o sis-
tema operativo, em processos isolados um do outro. [1][2]

Figura 2: Representação gráfica de containers [5] Figura 3: Representação gráfica de máquinas Virtuai [5]s
5

3.2 Docker

Um Docker transforma os microserviços, juntamente com as suas dependências, libra-


rias, e tudo o que precisa, num executável leve e independente, capaz de rodar a apli-
cação, com acesso a runtime e ferramentas de sistema.
Para poder rodar a Docker, é necessário um motor(engine), uma aplicação instala-
da no lado do cliente. Este contém um Docker Daemon, um servidor presente na má-
quina host, que auxilia na criação, construção e a rodar a aplicação, sendo, assim, um
programa de longa execução. Quando se pretende comunicar com o Docker Deamon,
é usado a API Rest. A comunicação ente cliente e Docker Daemon é feita através do
terminal.[5]
Existem dois métodos de gerar uma imagem Docker. O primeiro método consiste
em criar uma imagem, auxiliada por uma template só de leitura, consistida de um
sistema operativo leve, como, por exemplo, centos, ubuntu 16.04 ou fedora. Sempre
que uma imagem base, fundamental para qualquer imagem, for criada do zero, é ne-
cessário montar uma nova imagem. Esta ação é conhecida como “committing a chan-
ge”. O segundo passo, conhecido como método automático de montar uma imagem,
consiste na criação de um documento Docker com todas as instruções para criar uma
imagem. Quando este documento é criado, usando o terminal, será criada a imagem,
contendo todas as dependências mencionadas no documento Docker. [1][3]

Figura 4: Arquitetura de um Docker Container

3.3 Orquestração de containers

Orquestração de containers é uma maneira de automatizar a gestão, tarefas demora-


das, como, por exemplo, recriar, escalar, e atualizar containers. Com isto, a equipa
não necessita mais de fazer trabalho manual. A orquestração também é uma grande
ajuda na gestão de network e na capacidade de armazenamento.[5]
A orquestração de containers é bastante usada para automatizar tarefas de software
containerizado. Estas tarefas diferem entre plataformas, mas as mais comuns são a
configuração, lançamento e escalamento de containers. Alocação de recursos e assets,
balanceamento de tráfego e encontrar serviços ou aplicações na network, e manusea-
mento de cluster. Esta também é responsável pelo bem-estar do container e da máqui-
6

na host, trata da disponibilidade e redundância de containers, executar atualizações e


melhorias em containers e proteção entre containers a containers, e containers a host.
Existe uma grande maioria de plataformas de orquestração que suportam um fi-
cheiro, geralmente em YAML ou JSON, que descreve passo a passo como deve ser
configurado ser configurado a app. Neste ficheiro está dito qual imagem de container
deve ser usada, direcionando a plataforma para a localização das imagens. Concede
ao container recursos necessários para o seu bom funcionamento, define uma network
segura entre containers e instruções em como montar o volume em que será armaze-
nado e onde deve guardar os ficheiros de log.
Assim que o ficheiro de configuração for recebido, a plataforma recebe o container
lançado automaticamente pela ferramenta de orquestração, escolhendo o melhor sis-
tema host, baseado nas suas especificações enviadas pelo ficheiro. Com o intuito de
reduzir redundância, todas as réplicas serão destruídas, tirando os casos em que é
informado o contrário.
O autor de [5] aborda diversos tópicos relevantes, os quais incluem-se a seguir.
Existem várias ferramentas de orquestração de containers. Uma delas é o kubernetes,
também conhecido como K8s ou Kube. Kubernetes é uma ferramenta open-source
focada em containerizar serviços e garga de trabalho. Esta ferramenta é estimada de
ter um pico de 3.9 milhões de utilizadores, que deu origem a vários Kubernetes-as-a-
Service, incluindo, por exemplo, Amazon Elastic Container Service, Azure Kuberne-
tes Services, Google Kubernetes Engine, e muitos mais. Existem várias razões para
utilizar kubernetes, como as suas funcionalidades em descoberta de serviços, orques-
tração de serviços, avançar e atrasar versões de forma automática, e boa integração de
IPv4 e IPv6. É, também, bastante bom em automatizar o seu escalamento, usando
tecnologias HPA e VPA. Isto tudo junto de uma comunidade dedicada, traz uma con-
tinuidade de novas ferramentas, junto de uma comunidade dedicada a ajudar uns aos
outros.
Outra ferramenta bastante utilizada é o Docker Swarm, ferramenta implementada
no Docker. Os autores de [2] e [1] aborda extensivamente as utilizações destas ferra-
mentas e seus atributos. Assim como o Docker, o Docker Swarm é open-source, com
um setup intuitivo e com um uso geral fácil, que possibilita o uso de aplicações
Dockerized. Para usos menos complexos, eta ferramenta de orquestração de contai-
ners prevalece em relação ao Kubernetes, por ter um setup fácil, uso facilitado e me-
nos ferramentas. O que torna o Docker Swarm para utilizadores que preferem um
deployment mais rápido e fácil, com uma curva de aprendizagem mais suave, ideal
para aprendizes.

4 Conclusão

Ao fim deste artigo, é possível obter uma ampla compreensão sobre o tema da orques-
tração de containers, bem como localização e valências de diferentes ferramentas e
tecnologias presentes neste tópico.
A pesquisa conduzida através dos artigos que são objeto de estudo permitiu, para
além da localização do tema, perceber o funcionamento de motores de orquestração
7

de containers, comparações relativas ao desempenho, diversos cenários de aplicabili-


dade e contextualização de seu uso.
Também são expostos conceitos básicos ao entendimento de orquestração de con-
tainers e de containers em si, presentes principalmente na secção background. Através
desta base, a escalabilidade é evidenciada como sendo a principal motivação para o
uso de tais ferramentas e tecnologias.
Assim, nota-se que a solução proporcionada pela containerização utilizada conjun-
tamente com arquiteturas de microserviços para a transformação e decomposição de
aplicações monolíticas possui um custo relacionado justamente à gestão dos diferen-
tes containers gerados, bem como as interações entre si. Como resposta a isso, surgem
motores de orquestração de containers, os quais permitem exponenciar a escalabilida-
de através da automatização do comportamento e recursos dos containers.
Por meio desta pesquisa, também são elucidados cenários diversos de utilização da
orquestração de containers, com o intuito de enquadrar e exemplificar sua inserção em
sistemas modernos. Tais cenários possuem tanto o aspeto teórico quando prático da
orquestração, de forma a demonstrar com clareza seu uso.
Portanto, esta pesquisa, em suma, caracteriza o que é a orquestração de containers
de forma abrangente, relacionando e enumerando suas motivações, ferramentas, rele-
vância e usos na indústria de software atual.

Referências
1. Truyen, E., Van Landuyt, D., Preuveneers, D., Lagaisse, B., & Joosen, W. (2019). A Com-
prehensive Feature Comparison Study of Open-Source Container Orchestration Frame-
works. Applied Sciences, 9(5), Art. 5. https://doi.org/10.3390/app9050931
2. Amit M Potdar, Narayan D G, Shivaraj Kengond, & Mohammed Moin Mulla. (2020). Per-
formance Evaluation of Docker Container and Virtual Machine. Third International Con-
ference on Computing and Network Communications, 10.
https://doi.org/10.1016/j.procs.2020.04.152
3. Zhou, N., Georgiou, Y., Pospieszny, M., Zhong, L., Zhou, H., Niethammer, C., Pejak, B.,
Marko, O., & Hoppe, D. (2021). Container orchestration on HPC systems through Kuber-
netes. Journal of Cloud Computing, 10(1), 16. https://doi.org/10.1186/s13677-021-00231-z
4. Jawarneh, I. M. A., Bellavista, P., Bosi, F., Foschini, L., Martuscelli, G., Montanari, R., &
Palopoli, A. (2019). Container Orchestration Engines: A Thorough Functional and Perfor-
mance Comparison. ICC 2019 - 2019 IEEE International Conference on Communications
(ICC), 1–6. https://doi.org/10.1109/ICC.2019.8762053
5. What is a Container? - Docker. (2021, novembro 11).
https://www.docker.com/resources/what-container/
6. Velimirovic, A. (2022, setembro 21). What is Container Orchestration? Benefits & How It
Works. PhoenixNAP Blog. https://phoenixnap.com/blog/what-is-container-orchestration
7. Velimirovic, A. (2022, August 16). DevOps and Virtualization: The Effect of VMs on
Software Development. phoenixNAP Blog. https://phoenixnap.com/blog/devops-
virtualization

Você também pode gostar