Para fazer a implantação de um software, precisamos não só do software em si, mas de suas dependências. As dependências implicam em bibliotecas, interpretadores, subpacotes, compiladores, extensões e assim por diante.
Você também precisará da sua configuração. Parâmetros, detalhes específicos da localidade, chaves de licença, senhas de banco de dados. Tudo que transforma um software bruto em um serviço utilizável.
É aí que entram os Containers de Software, que trazem a solução em uma ideia de empacotamento e um formato de distribuição, padrões genéricos, de adoção generalizada, com uma capacidade muito maior de transporte, custos menores, economias de escala e facilidade de manipulação. O formato de container inclui tudo que a aplicação precisa para executar.
Diferenças entre uma imagem de container para uma máquina virtual:
Uma máquina virtual contém tudo que a aplicação precisa para executar, mas conta com muito mais itens. A imagem de uma máquina virtual típica tem aproximadamente 1 GB. A imagem de um contêiner com um bom design, pode ser cem vezes menor.
Como uma máquina virtual contém muitos programas, bibliotecas e itens não relacionados e que jamais serão usados pela aplicação, a maior parte de seu espaço é desperdiçada. Pior ainda, as máquinas virtuais são virtuais: a CPU física subjacente implementa uma CPU emulada, na qual a máquina virtual executa.
Em comparação, os containers executam diretamente na CPU real, sem o overhead da virtualização, simplesmente como fazem os executáveis binários comuns.
Por ter apenas os arquivos de que necessitam, os containers são muito menores que as imagens de VMs. Eles também usam uma técnica mais inteligente de camadas de sistemas de arquivos que permitem endereçamento e podem ser compartilhadas e reutilizadas entre os containers.
Por exemplo, se você tiver dois containers, ambos derivados da mesma imagem Debian Linux de base, a imagem da base só precisará ser baixada uma vez, e cada container poderá simplesmente a referenciar.
Aplicações Plug and Play
O container não é a unidade de implantação e de empacotamento; é também a unidade de reutilização (a mesma imagem de container pode ser usada como um componente de vários serviços diferentes), a unidade para escalar e a unidade de alocação de recursos (um container pode executar em qualquer lugar em que haja recursos suficientes disponíveis para suas necessidades específicas).
Os desenvolvedores não precisam mais se preocupar em manter versões diferentes de software para executar em distribuições distintas de Linux, com bibliotecas e versões de linguagem diferentes, e assim por diante. O único item do qual o container depende é o Kernel do sistema operacional (Linux, por exemplo).
Basta disponibilizar sua aplicação em uma imagem de container, e ela executará em qualquer plataforma que aceite o formato padrão do container e tenha um Kernel compatível.
Conduzindo a orquestração de containers
As equipes de operações tendem a achar que sua carga de trabalho é bastante simplificada com os containers. Isso porque em vez de ter que manter um conjunto enorme de máquinas de vários tipos, arquitetura e sistemas operacionais, tudo que elas têm de fazer é fazer a orquestração de containers em um orquestrador de containers. Ou seja, um software projetado para reunir várias máquinas diferentes em um cluster – um tipo de substrato unificado de computadores que, para o usuário, parece um único computador muito potente no qual os containers podem executar.
Os termos orquestração (orchestration) e escalonamento (scheduling) muitas vezes são usados de modo flexível como sinônimos. Estritamente falando, porém, orquestração, nesse contexto, significa coordenar e sequenciar diferentes atividades para servir a um objetivo comum (como os músicos em uma orquestra). Escalonamento quer dizer administrar os recursos disponíveis e atribuir cargas de trabalho aos locais em que sejam executadas com mais eficiência. (Não confundir com escalonar no sentido de tarefas agendadas [scheduled jobs], que executam em horários predefinidos.)
Principais pontos para adoção da orquestração de Containers
- Provisionamento e implantação: Trás uma facilidade na construção dos containers gerando uma certa liberdade para os administradores provisionarem recursos de acordo com as necessidades solicitadas.
- Alocação de recursos: Pode ser bastante satisfatória, pois pode-se agrupar e desagrupar diversos recursos para cada finalidade do container.
- Disponibilidade dos containers: Irá garantir que os containers estejam 100% em constante funcionalidade.
- Balanceamento de carga e roteamento de tráfego: Facilita o processo de distribuição dos containers dentro do cluster melhorando ainda mais a disponibilidade das aplicações.
Conclusão – Orquestração de Containers
Todo o conceito de containers permite que você implante e execute softwares em unidades pequenas, padronizadas e autocontidas. Isso facilita e reduz os custos de construção de sistemas distribuídos grandes e diversificados, por meio da conexão de microsserviços conteinerizados. Já o sistema de orquestração de containers cuida da implantação de seus containers, escalonamento, escalabilidade, rede e de todas as tarefas que um bom administrador de sistemas faria, porém de modo automatizado e programável.
Quem é a Aquarela Analytics?
A Aquarela Analytics é vencedora do Prêmio CNI de Inovação e referência nacional na aplicação de Inteligência Artificial Corporativa na indústria e em grandes empresas. Por meio da plataforma Vorteris, da metodologia DCM e o Canvas Analítico (Download e-book gratuito), atende clientes importantes, como: Embraer (aeroespacial), Scania, Mercedes-Benz, Grupo Randon (automotivo), SolarBR Coca-Cola (varejo alimentício), Hospital das Clínicas (saúde), NTS-Brasil (óleo e gás), Auren, SPIC Brasil (energia), Telefônica Vivo (telecomunicações), dentre outros.
Acompanhe os novos conteúdos da Aquarela Analytics no Linkedin e assinando a nossa Newsletter mensal!
Autor
DevSecOps Engineer na Aquarela Advanced Analytics. Formação Superior em Análise e Desenvolvimento de Sistemas e Pós-Graduando em DevOps and Cloud Computing. Apaixonado pela Cultura DevOps e entusiasta nas seguintes stacks tecnológicas: Cloud – AWS and GCP; Infraestrutura como Código – Terraform and Ansible; Containers – Docker and Kubernetes; Repositórios de código – Gitlab, Git and GitHub; Monitoramento – Grafana and Prometheus;