Listar as diferenças entre contêineres e VMs

Concluído

O administrador do Windows Server da Contoso precisa determinar quais cargas de trabalho e cenários são apropriados para VMs e quais são mais adequados para contêineres. Eles avaliarão as características das cargas de trabalho de VM e contêiner, cenários em que elas podem ser usadas e em que circunstâncias as cargas de trabalho de contêiner podem ser usadas para aumentar a eficiência.

VMs versus contêineres

Tanto VMs quanto contêineres são tecnologias de virtualização usadas para fornecer ambientes de computação isolados e portáteis para aplicativos e serviços:

  • As VMs simulam um computador inteiro, incluindo hardware virtualizado, o sistema operacional, o modo de usuário e seu próprio modo kernel. As VMs são bastante ágeis e fornecem um suporte tremendo para aplicativos; no entanto, as VMs tendem a ser grandes e consomem recursos da máquina host.

  • Os contêineres (conforme descrito anteriormente) se baseiam no kernel do sistema operacional host e contêm um processo de modo de usuário isolado para o aplicativo empacotado. Isso ajuda a tornar os contêineres muito leves e rápidos de lançar. Diferente das VMs, os contêineres podem ser facilmente movidos dos ambientes de desenvolvimento, teste e produção. No entanto, como o sistema operacional não é exatamente o mesmo, nem todos os aplicativos são executados da mesma forma (ou de todo) em um ambiente de contêiner.

Semelhanças e diferenças

A tabela a seguir resume as semelhanças e diferenças entre os recursos para VMs e contêineres.

Funcionalidade VM Container (Contentor)
Isolamento Fornece isolamento completo do sistema operacional host e de outras VMs. Fornece isolamento leve do host e de outros contêineres.
SO Executa um sistema operacional completo, incluindo o kernel. Executa apenas a parte do modo de usuário de um sistema operacional.
Compatibilidade de hóspedes Capaz de executar qualquer sistema operacional suportado dentro da VM Os contêineres do Windows exigem versões correspondentes do sistema operacional de host e contêiner. (Consulte o modo de isolamento para obter mais detalhes e alternativas)
Implementação Implantado usando o Gerenciador Hyper-V ou outras ferramentas de gerenciamento de VM. Implantado e gerenciado usando o Docker ou outro tempo de execução de contêiner. Vários contêineres podem ser implantados usando um orquestrador, como o Kubernetes.
Armazenamento persistente Usa arquivos de disco rígido virtual ou compartilhamento SMB (Server Message Block). Os dados não persistem quando um contêiner não existe mais. Para persistir dados em um contêiner com o Windows Server, é necessário usar armazenamento persistente.
Balanceamento de carga e alta disponibilidade Usa um cluster de failover do Windows ou um balanceador de carga do Windows para mover VMs conforme necessário e oferecer suporte a um volume maior. Usa um orquestrador de contêineres para iniciar e parar contêineres automaticamente, dimensionar automaticamente e dar suporte a tráfego adicional.
Rede Usa adaptadores de rede virtual. Diferentes opções de rede estão disponíveis dependendo do cenário. O padrão é uma rede NAT (Network Address Translation) que usa um switch interno e mapeia portas do host para o contêiner.

Nota

É comum provisionar contêineres em uma VM altamente otimizada para fornecer isolamento e segurança aprimorados.

Vantagens dos contentores

A um nível elevado, os contentores:

  • Requerem relativamente poucos recursos. Elas consomem menos recursos do que as VMs.

  • Arranque rapidamente. Os tempos de inicialização do contêiner são aproximadamente equivalentes ao tempo necessário para iniciar um novo processo.

  • Melhore a densidade do servidor. Os contêineres permitem uma utilização mais eficiente da memória, do disco e da CPU do hardware disponível do que as VMs. Isso resulta em menos servidores ociosos, resultando em uma melhor utilização dos recursos de computação existentes. Isto é especialmente importante para os fornecedores e utilizadores de serviços em nuvem, uma vez que pode reduzir custos.

  • Portabilidade. Os contêineres se comportam da mesma forma, independentemente do ambiente em que estão sendo executados. Um contêiner terá as dependências para que um aplicativo funcione. Isso permite que um contêiner execute o mesmo entre desenvolvimento, teste e produção, bem como entre local e nuvem.

O gráfico a seguir fornece uma comparação de isolamento e eficiência entre PCs, VMs, contêineres e processos, e ilustra que:

  • Os PC proporcionam o maior grau de isolamento. O isolamento é progressivamente menor para VMs, contêineres e processos.

  • Os processos proporcionam o maior grau de eficiência e, por sua vez, densidade possível. Contêineres, VMs e PCs são progressivamente menos eficientes.

  • Hardware, kernel e recursos do sistema (como um sistema de arquivos) são compartilhados:

    • As VMs compartilham apenas hardware.

    • Os contêineres compartilham hardware e um kernel (exceto contêineres do Windows Hyper-V, que não compartilham um kernel).

    • Os processos compartilham hardware, um kernel e recursos do sistema.

    • Os PCs não partilham nada disso.

Diagrama mostrando a comparação de isolamento e eficiência entre PCs, VMs, contêineres e processos.

Gorjeta

Para armazenamento persistente, você pode usar uma montagem de ligação para montar um local na máquina local. Os arquivos dentro do local estarão disponíveis quando você reiniciar um contêiner ou se quiser compartilhar os arquivos com vários contêineres. Se você quiser que um contêiner seja executado em várias máquinas com acesso aos mesmos arquivos, um volume nomeado ou montagem SMB deve ser usado.

Orquestradores como o Kubernetes têm sua própria implementação de armazenamento persistente.

Atenção

Não associe diretórios confidenciais de montagem, como C:\, a um contêiner não confiável. Isso permitiria que o contêiner não confiável alterasse arquivos no host aos quais normalmente não teria acesso e poderia criar uma violação de segurança. Além disso, certifique-se de que seu contêiner funcionará corretamente ao se mover para um ambiente diferente. Isso significa evitar vincular um contêiner a uma unidade específica em um host específico.

Quando escolher uma VM

Use uma VM quando:

  • Necessidade de gerenciar vários sistemas operacionais.

  • Precisa executar um aplicativo que requer todos os recursos e serviços de um sistema operacional completo, como uma interface gráfica do usuário (GUI).

  • Precisa de um ambiente que preserve as mudanças e seja persistente. Exemplo: os bancos de dados não são bons candidatos para serem executados em contêineres.

  • Requerem isolamento e segurança completos.

Quando escolher um contentor

Utilize um contentor quando:

  • Precisa de um pacote de aplicativos leve que comece rapidamente.

  • Necessidade de implantar várias instâncias de um único aplicativo - escala automática e/ou horizontal são necessárias.

  • Precisa executar um aplicativo ou processo que não seja persistente sob demanda.

  • Precisa implantar um aplicativo que possa ser executado em qualquer infraestrutura subjacente.