Pesquisa de site

LFCA: Aprenda os conceitos básicos do uso de contêineres – Parte 22


Com o tempo, à medida que a procura por testes rápidos e implementação de aplicações crescia, juntamente com ciclos de negócios mais rápidos, as organizações foram obrigadas a inovar para acompanhar o ritmo acelerado do ambiente de negócios.

A busca por modernizar aplicações e construir novas para criar fluxos de trabalho ágeis levou ao conceito de uso de containers. A tecnologia de conteinerização é quase tão antiga quanto a virtualização. No entanto, os contêineres não despertaram muito entusiasmo até que o Docker explodiu em cena em 2013 e despertou um interesse frenético entre desenvolvedores e outros profissionais de TI.

Atualmente, todas as entidades gigantes de tecnologia, como Google, Amazon, Microsoft e Red Hat, para mencionar algumas entraram no movimento.

Por que contêineres?

Um dos desafios enfrentados pelos desenvolvedores é a diferença nos ambientes de computação em todas as etapas do desenvolvimento de software. Os problemas surgem quando o ambiente de software é diferente de um estágio para outro.

Por exemplo, um aplicativo pode ser executado perfeitamente em um ambiente de teste usando o Python 3.6. No entanto, o aplicativo se comporta de maneira estranha, retorna alguns erros ou trava completamente quando portado para um ambiente de produção executando o Python 3.9.

Os contêineres entraram em cena para enfrentar esse desafio e garantir que os aplicativos sejam executados de maneira confiável quando movidos de um ambiente de computação para outro em todas as etapas do desenvolvimento de software – desde o PC dos desenvolvedores até o ambiente de produção. E não é apenas o ambiente de software que pode provocar tais inconsistências, mas também as diferenças na topologia da rede e nas políticas de segurança.

O que são contêineres?

Um contêiner é uma unidade de software isolada que agrupa todo o código binário, bibliotecas, executáveis, dependências e arquivos de configuração em um único pacote, de forma que o aplicativo funcione perfeitamente quando portado de um ambiente de computação. para outro. Ele não vem com uma imagem de sistema operacional, o que o torna leve e facilmente portátil.

Uma imagem de contêiner é um pacote autônomo, leve e executável que agrupa tudo o que é necessário para executar o aplicativo. Em tempo de execução, uma imagem de contêiner se transforma em um contêiner. No caso do Docker, por exemplo, uma imagem do Docker se torna um contêiner docker quando executada no Docker Engine. Docker é um ambiente de execução usado para construir aplicativos em contêineres.

Os contêineres são executados em completo isolamento do sistema operacional subjacente, e os aplicativos em contêineres sempre serão executados de forma consistente, independentemente do ambiente de computação ou da infraestrutura. É por esse motivo que um desenvolvedor pode desenvolver um aplicativo no conforto deste laptop e implantá-lo prontamente em um servidor.

A consistência e a confiabilidade da execução de contêineres proporcionam aos desenvolvedores a tranquilidade de saber que seus aplicativos serão executados conforme o esperado, independentemente de onde forem implantados.

Como os contêineres são diferentes das máquinas virtuais?

Uma coisa comum que os contêineres e as máquinas virtuais compartilham é que eles operam em um ambiente virtualizado. A conteinerização, em certo sentido, é uma forma de tecnologia virtualizada. No entanto, os contêineres diferem das máquinas virtuais em mais de um aspecto.

Máquinas virtuais

Uma máquina virtual, também chamada de instância virtual ou VM, é uma emulação de um servidor físico ou PC. A virtualização é uma tecnologia que possibilita a criação de máquinas virtuais. O conceito de virtualização remonta ao início da década de 1970 e lançou as bases para a primeira geração de tecnologia em nuvem.

Na virtualização, uma camada de abstração é criada sobre um servidor bare-metal ou hardware de computador. Isso possibilita que os recursos de hardware de um único servidor sejam compartilhados entre várias máquinas virtuais.

O software usado para fazer a camada de abstração é chamado de hipervisor. O hipervisor abstrai a máquina virtual e o sistema operacional convidado do bare metal ou hardware do computador. Assim, uma máquina virtual fica em cima do hipervisor que disponibiliza os recursos de hardware graças à camada de abstração.

As máquinas virtuais executam um sistema operacional completo (sistema operacional convidado) que é independente do sistema operacional subjacente (sistema operacional host) no qual o hipervisor está instalado. O sistema operacional convidado fornece então uma plataforma para construir, testar e implantar aplicativos juntamente com suas bibliotecas e binários.

Existem dois tipos de hipervisores:

Hipervisor tipo 1 (hipervisor bare metal)

Este hipervisor é instalado diretamente em um servidor físico ou no hardware subjacente. Não há sistema operacional entre o hipervisor e o hardware do computador, daí o nome da tag hypervisor bare-metal. Ele fornece excelente suporte, pois os recursos não são compartilhados com o sistema operacional host.

Devido à sua eficiência, os hipervisores Tipo 1 são usados principalmente em ambientes corporativos. Os fornecedores de hipervisor tipo 1 incluem VMware Esxi e KVM.

Hipervisor Tipo 2:

Isso também é considerado um hipervisor hospedado. Ele é instalado sobre o sistema operacional host e compartilha os recursos de hardware subjacentes com o sistema operacional host.

Os hipervisores tipo 2 são ideais para pequenos ambientes de computação e são usados principalmente para testes de sistemas operacionais e pesquisas. Os fornecedores de hipervisor tipo 2 incluem Oracle VirtualBox e VMware Workstation Pro.

A desvantagem das máquinas virtuais

As máquinas virtuais tendem a ser enormes (podem ocupar vários GBs), lentas para iniciar e parar e consumir muitos recursos do sistema, levando a travamentos e desempenho lento devido a recursos limitados. Como tal, uma máquina virtual é considerada volumosa e está associada a elevados custos indiretos.

Containers

Ao contrário de uma máquina virtual, um contêiner não requer um hipervisor. Um contêiner fica sobre um servidor físico e seu sistema operacional e compartilha o mesmo kernel que o sistema operacional, entre outras coisas, como bibliotecas e binários. Vários contêineres podem ser executados no mesmo sistema, cada um executando seu próprio conjunto de aplicativos e processos dos demais. Plataformas de contêineres populares incluem Docker e Podman.

Ao contrário das máquinas virtuais, os contêineres são executados em completo isolamento do sistema operacional subjacente. Os contêineres são excepcionalmente leves – apenas alguns megabytes – ocupam menos espaço e economizam recursos. Eles são fáceis de iniciar e parar e podem lidar com mais aplicativos do que uma máquina virtual.

Benefícios do uso de contêineres

Os contêineres fornecem uma maneira conveniente de projetar, testar e implantar aplicativos do seu PC diretamente para um ambiente de produção, seja no local ou na nuvem. Aqui estão alguns dos benefícios do uso de aplicativos em contêineres.

1. Maior modularidade

Antes dos contêineres, tínhamos o modelo monolítico antiquado, onde um aplicativo completo composto por componentes de front-end e back-end seria agrupado em um único pacote. Os contêineres possibilitam dividir um aplicativo em vários componentes individuais que podem se comunicar entre si.

Dessa forma, as equipes de desenvolvimento podem colaborar em várias partes de um aplicativo, desde que não sejam feitas grandes modificações em relação à forma como os aplicativos interagem entre si.

É nisso que se baseia o conceito de microsserviços.

2. Aumento da produtividade

Mais modularidade significa mais produtividade, pois os desenvolvedores podem trabalhar em componentes individuais do aplicativo e depurar erros com muito mais rapidez do que antes.

3. Custos indiretos reduzidos

Em comparação com máquinas virtuais e outros ambientes de computação convencionais, os contêineres utilizam menos recursos do sistema, pois não incluem um sistema operacional. Isso evita gastos desnecessários na aquisição de servidores caros para construir e testar aplicativos.

4. Maior portabilidade

Devido ao seu pequeno espaço ocupado, os aplicativos em contêineres podem ser facilmente implantados em vários ambientes de computação/sistemas operacionais.

5. Maior eficiência e flexibilidade

Os contêineres permitem rápida implantação e dimensionamento de aplicativos. Eles também fornecem a flexibilidade necessária para implantar aplicativos em vários ambientes de software.

Como os contêineres beneficiam as equipes de DevOps?

Os contêineres desempenham um papel fundamental no DevOps e seria impossível imaginar como seria a situação sem os aplicativos em contêineres. Então, o que os contêineres trazem para a mesa?

Primeiro, os contêineres sustentam a arquitetura de microsserviços, permitindo que os blocos de construção de um aplicativo inteiro sejam desenvolvidos, implantados e dimensionados de forma independente. Conforme mencionado, isso proporciona maior colaboração e rápida implantação de aplicativos.

A conteinerização também desempenha um papel importante na facilitação dos pipelines de CI/CD, fornecendo um ambiente controlado e consistente para a construção de aplicativos. Todas as bibliotecas e dependências são empacotadas junto com o código em uma única unidade para uma implantação mais rápida e fácil. O aplicativo testado será exatamente o software que será implantado na produção.

Além disso, os contêineres melhoram a implementação de patches e atualizações quando um aplicativo é dividido em vários microsserviços, cada um em um contêiner separado. Contêineres individuais podem ser examinados, corrigidos e reiniciados sem interromper o restante do aplicativo.

Conclusão

Qualquer organização que pretenda atingir a maturidade em DevOps deve considerar aproveitar o poder dos contêineres para implantações ágeis e contínuas. O desafio está em saber como configurá-los, protegê-los e implantá-los perfeitamente em vários ambientes.