Visão geral
Containers e máquinas virtuais (VMs) são abordagens para empacotar ambientes de computação. Elas combinam vários componentes de TI e isolam esses ambientes do restante do sistema. A principal diferença entre elas está nos componentes que são isolados, o que afeta a escalabilidade e a portabilidade de cada abordagem.
O que é um container?
Um container é um software que contém todos os componentes e funcionalidades necessários para executar uma aplicação. As aplicações mais modernas são compostas por vários containers, cada qual responsável por uma função específica. Containers não utilizam um hipervisor. Além disso, costumam ser medidos em megabytes e são considerados uma forma mais ágil e rápida de gerenciar o isolamento de processos.
Um dos fatores que mais contribui para o sucesso dos containers é a portabilidade. Assim como peças de LEGO™ que se encaixam, containers individuais podem ser trocados e movidos entre ambientes diferentes com facilidade. Quando uma aplicação e suas dependências são empacotadas em um container, é possível implantá-la onde for necessário. Ela funcionará exatamente da mesma forma seja no laptop do desenvolvedor, em um data center, na nuvem ou na edge.
O Docker, uma plataforma open source para criação, implantação e gerenciamento de aplicações em containers, foi de extrema importância para a evolução dessa tecnologia ao longo dos anos.
Recursos da Red Hat
O que é uma máquina virtual?
Máquinas virtuais (virtual machines) são essenciais para a cloud computing. Elas replicam o funcionamento dos computadores físicos ao executar sistemas operacionais em instâncias isoladas. É comum hospedar várias VMs em um único servidor, com um hipervisor atuando como uma camada de software lightweight entre elas e o host físico. O hipervisor gerencia com eficiência o acesso aos recursos, permitindo que as máquinas virtuais funcionem como servidores distintos, oferecendo maior flexibilidade e agilidade.
As VMs ganharam popularidade nos anos 2000 devido a iniciativas de consolidação e corte de custos, mas sua utilização evoluiu com o tempo. As empresas aperfeiçoaram as implantações das VMs, indo além da consolidação para abranger diversos casos de uso. Entre eles, destacam-se o fornecimento de recursos sob demanda para aplicações e a otimização do acesso a recursos dispendiosos, como GPUs.
As VMs também serviram como base para muitos ambientes de cloud computing, viabilizando a virtualização de recursos e oferecendo suporte a multitenancy e isolamento (vários clientes executando sistemas que compartilham os mesmos recursos).
As máquinas virtuais contêm seus próprios sistemas operacionais, o que permite que elas executem várias funções de uso intensivo de recursos simultaneamente A maior disponibilidade de recursos para as VMs permite extrair, dividir, duplicar e replicar o funcionamento de servidores, sistemas operacionais, desktops, bancos de dados e redes inteiros.
Diferenças entre TI tradicional e nativa em nuvem
Além das diferenças tecnológicas, a comparação entre containers e máquinas virtuais é, indiretamente, uma comparação entre as modernas práticas de TI nativas em nuvem e as arquiteturas de TI tradicionais.
Novas práticas de TI
(implantação nativa em nuvem, CI/CD e DevOps) só são possíveis porque as cargas de trabalho são divididas nas menores unidades de serviço (geralmente uma função ou um microsserviço) e executadas isoladamente. Uma vez isoladas, elas são desenvolvidas, implantadas, gerenciadas e escaladas de forma independente.
Essas pequenas unidades são melhor empacotadas em containers, o que permite que várias equipes trabalhem em partes de um app ou serviço sem interromper, ou comprometer o código empacotado em outros containers.
Arquiteturas de TI tradicionais
(monolíticas e legadas) mantêm todos os aspectos de uma carga de trabalho firmemente agrupados e incapazes de funcionar sem que arquitetura completa seja executada. Como não é possível dividir esses aspectos, eles precisam ser empacotados como uma unidade completa em um ambiente maior, geralmente uma VM.
Era comum criar e executar aplicações inteiras dentro de VMs, mesmo sabendo que ao armazenar todo o código e dependências, ela ficaria grande demais e isso poderia gerar falhas em cascata e downtime durante as atualizações.
Como eles funcionam?
Virtualização
Um software chamado hipervisor separa recursos das máquinas físicas para serem particionados e dedicados às VMs. Quando um usuário emite uma instrução para uma VM que exige recursos adicionais do ambiente físico, o hipervisor retransmite a solicitação ao sistema físico e armazena as alterações em cache. As VMs parecem e agem como servidores físicos e, por isso, podem multiplicar as desvantagens da dependência de aplicações e de um sistema operacional com grande área de ocupação (desnecessária para a execução de uma única app ou microsserviço).
Containers
Tudo em um container é empacotado e enviado utilizando uma imagem de container, isto é, um arquivo que inclui todas as bibliotecas e dependências. Os arquivos de imagens de container são semelhantes aos pacotes de instalação de software (como RPMs no Linux). No entanto, eles só precisam de um runtime de container e um kernel compatível para executar a aplicação, não importando o sistema operacional usado para criar o container nem a origem das bibliotecas dentro dele. Como os containers são bem pequenos, geralmente temos centenas deles levemente acoplados uns aos outros. Por isso, plataformas de orquestração de container (como o Red Hat OpenShift e o Kubernetes) são usadas para provisioná-los e gerenciá-los.
Qual é a opção ideal?
Depende. Você precisa de uma instância pequena movida com facilidade (containers) ou de uma alocação semipermanente de recursos de TI personalizados?
Outros fatores a se considerar incluem: arquitetura da aplicação, práticas de desenvolvimento, segurança e exigências regulatórias.
Pequenos e lightweight, os containers podem ser implantados facilmente em sistemas bare metal, bem como em ambientes públicos, privados, híbridos e multicloud. Também é muito comum executar containers em VMs, uma vez que as maioria das organizações já possui uma infraestrutura com foco em máquinas virtuais em funcionamento. Isso atesta a flexibilidade dos containers.
Containers também são o ambiente ideal para implantar as apps nativas em nuvem atuais, que não são nada mais que coleções de microsserviços criados para oferecer desenvolvimento consistente e gerenciamento automatizado em ambientes públicos, privados, híbridos e multicloud. As apps nativas em nuvem ajudam a acelerar a criação de novas apps, a otimização de apps existentes e como todas elas se conectam.
Em comparação com as VMs, os containers são mais apropriados para:
- Criar apps nativas em nuvem
- Empacotar microsserviços
- Incorporar aplicações em práticas de DevOps ou CI/CD
- Mover projetos de TI escaláveis por uma área de ocupação de TI diversa
Em comparação com containers, as VMs são mais apropriadas para:
- Armazenar cargas de trabalho monolíticas, legadas e tradicionais
- Isolar ciclos de desenvolvimento arriscados
- Provisionar recursos de infraestrutura (como redes, servidores e dados)
- Executar um sistema operacional diferente dentro de outro, como o Unix no Linux
E, se você tem aplicações em execução tanto em máquinas virtuais quanto em containers, o Red Hat Service Interconnect pode ajudar a conectar aplicações e serviços em ambientes diferentes.
Bare metal, VMs ou containers?
Máquinas virtuais e containers podem ser implantados em diversos tipos de infraestrutura, incluindo servidores bare metal.
O que é bare metal?
“Bare metal” se refere a um computador ou servidor executado em um hardware e que não requer assistência de hipervisores, máquinas virtuais ou conteinerização para operar. Servidores bare metal também são conhecidos como servidores dedicados. Seus componentes de hardware não são compartilhados com outros usuários, logo são para uso exclusivo do contratante do serviço.
Esses servidores têm o poder de processar um grande volume de dados com baixa latência, ou seja, eles são rápidos e potentes. Com bare metal, o usuário tem total controle sobre a infraestrutura do seu servidor. Ele pode escolher o sistema operacional e adequar hardware e software às necessidades específicas de suas cargas de trabalho.
No entanto, apesar das implantações bare metal serem indispensáveis quando o desempenho e o acesso direto ao hardware são essenciais, elas podem não oferecer o mesmo nível de flexibilidade e gerenciamento de recursos que os containers e as máquinas virtuais.
Posso hospedar VMs em bare metal?
Sim, servidores bare metal podem hospedar máquinas virtuais, basta implantar neles um hipervisor e um software de virtualização.
Posso hospedar containers em bare metal?
Sim, plataformas como o Docker, Kubernetes e Podman foram criadas para ajudar usuários a gerenciar e implantar containers em escala em várias infraestruturas, incluindo servidores bare metal.
Por que escolher a Red Hat?
O Red Hat® OpenShift® é uma plataforma de aplicações empresarial baseada em container que oferece alternativas de implantação e opções de consumo com suporte a todo tipo de app ou ambiente. Com o Red Hat OpenShift, as organizações podem criar, implantar, executar e gerenciar aplicações de qualquer lugar em escala, com segurança e rapidez.
O Red Hat OpenShift Virtualization, uma funcionalidade do Red Hat OpenShift, permite que equipes de TI executem máquinas virtuais e containers na mesma plataforma Kubernetes, simplificando o gerenciamento e reduzindo o tempo até a produção.
Dessa forma, as empresas aproveitam os investimentos prévios em virtualização, ao mesmo tempo que se beneficiam da simplicidade e da velocidade de uma plataforma de aplicações moderna. Ao integrar VMs na plataforma de aplicações do OpenShift, você estabelece um ambiente consistente para o desenvolvimento e a implantação de aplicações. Os desenvolvedores podem criar, testar e implantar aplicações com mais rapidez, acelerando o time to market.
Blog da Red Hat
Tudo relacionado à Red Hat: soluções, treinamentos e certificações Red Hat, casos de sucesso de clientes, novidades dos nossos parceiros e notícias sobre projetos das comunidades open source.