Quais são os benefícios da execução de um contêiner docker dentro de uma VM versus a execução de contêineres docker em bare metal?

3

Quais são os benefícios de executar um contêiner do Docker dentro de uma VM versus contêineres do Docker em execução no bare metal (no host diretamente)?

Já ouvi falar de empresas que executam contêineres de estivadores dentro de uma VM, especialmente em conferências docker que algumas organizações estão fazendo. Por quê?

(Comparando o contêiner do Docker em execução no host versus o contêiner do Docker em execução no KVM no host)

  • O Docker e o KVM têm maneiras de salvar seu estado atual, sem nenhum benefício adicional aqui
  • Tanto o Docker quanto o KVM podem receber IPs separados para uso em rede
  • O Docker e o KVM separam os programas em execução e são instalados em conflito com os processos de execução do host
  • O Docker e o KVM fornecem maneiras fáceis de escalar com o crescimento da empresa
  • Ambos Fornecem métodos simples de mover instâncias para hosts diferentes

Então, por que alguém executaria o Docker dentro de um KVM? Eles não estariam tomando um desempenho desnecessário do KVM?

    
por TrevorKS 15.08.2018 / 15:48

2 respostas

5

Com relação aos seus pontos principais:

O Docker e o KVM têm maneiras de salvar seu estado atual, sem nenhum benefício adicional aqui

Só que como eles armazenam seu estado é diferente, e um método ou outro pode ser mais eficiente. Além disso, você não pode salvar 100% do estado de um contêiner com segurança.

Tanto o Docker quanto o KVM podem receber IPs separados para uso em rede

Dependendo do sistema de VM e contêiner usado, isso pode ser mais fácil de configurar para VMs do que para contêineres. Isso é especialmente verdadeiro se você quiser uma interface de camada 2 dedicada para o contêiner VM /, que quase sempre é mais fácil de fazer com uma VM.

O Docker e o KVM separam programas em execução e são instalados em conflito com os processos de execução do host

A VM faz melhor do que contêineres. Os contêineres ainda estão fazendo chamadas do sistema nativo para o sistema operacional host. Isso significa que eles podem potencialmente diretamente explorar quaisquer erros nessas chamadas do sistema. As VMs têm seu próprio sistema operacional, então elas são muito melhores isoladas.

O Docker e o KVM fornecem maneiras fáceis de escalar com o crescimento das empresas

Isso é quase o mesmo, embora eu pessoalmente tenha descoberto que a VM fez a escala certa um pouco melhor do que os recipientes feitos corretamente (muito provavelmente porque as VMs descarregaram os problemas de permissões no hardware, enquanto os containers precisam de software para lidar com isso).

Ambos fornecem métodos simples de mover instâncias para hosts diferentes

Não, não exatamente. Ambos podem fazer a migração offline, mas muitos sistemas de contêiner não podem fazer migração ao vivo (ou seja, mover um contêiner em execução de um host para outro). A migração ao vivo é muito importante por razões de gerenciamento se você estiver executando em qualquer escala razoável (Precisa executar atualizações no host? Migrar tudo para outro sistema, reinicializar o host, migrar tudo do segundo host para o primeiro, reinicie isso, rebalance.).

Alguns pontos extras:

  • Geralmente, as VMs têm mais facilidade para trabalhar com opções de alta disponibilidade. Isso não quer dizer que os contêineres não tenham essas opções, apenas que normalmente são mais fáceis de trabalhar e adaptam o código do aplicativo às VMs.
  • As
  • VMs são um pouco mais fáceis de migrar diretamente de e para a hospedagem na nuvem (você não precisa se importar tanto com o ambiente de hospedagem subjacente).
  • As VMs permitem que você execute uma plataforma diferente do sistema operacional host. Mesmo diferentes distribuições Linux têm diferenças suficientes em sua configuração do kernel, o material escrito para um não é completamente garantido para funcionar em outro.
  • As VMs oferecem melhor controle da possível superfície de ataque. Com os contêineres, você simplesmente não consegue se livrar do fato de que o código do seu sistema operacional host ainda está na memória e, portanto, um vetor de ataque em potencial. Com as VMs, você está executando um sistema operacional isolado, para que você possa reduzi-lo ao mínimo absoluto do que realmente precisa.
  • A execução de um grupo de contêineres relacionados em uma VM oferece uma maneira fácil de iniciar e interromper esse grupo de contêineres juntos.
por 15.08.2018 / 21:55
1

A virtualização surgiu quando o hardware tornou-se grande para cargas únicas, e a necessidade de fazer uma única máquina poderosa fazer mais de uma tarefa, com as tarefas isoladas umas das outras, tornou-se aparente. As VMs fazem um ótimo trabalho fazendo exatamente isso - dividindo um host grande em vários hosts menores. Os contêineres são uma maneira de não dividir um host em partes utilizáveis, mas uma maneira de isolar aplicativos e cargas de trabalho específicos.

Portanto, tendo uma máquina poderosa, você pode dividi-la em várias partes menores com talvez propriedades diferentes (recursos, SO etc.) e, em seguida, executar seus aplicativos dentro dessas VMs, pois faz sentido para o caso de uso.

Esta não é a maneira absoluta e única de fazer as coisas, é claro, mas é o caso mais óbvio para misturar VMs e containers

    
por 16.08.2018 / 09:40