Contêiner ou máquina virtual: a diferença em uma frase e suas quatro consequências
A escolha costuma ser feita por hábito de recursos. Só que a diferença cabe em uma única frase, e todo o resto decorre dela.
AtlasPVE ·
Este verbete responde a
- proxmox lxc ou vm
- proxmox contêiner ou máquina virtual
- proxmox vantagens lxc
- proxmox qual escolher
- proxmox lxc é seguro
Você vai colocar algo novo para rodar no Proxmox e há duas opções. As duas rodam um Linux, as duas aparecem lado a lado no painel, as duas parecem fazer o mesmo trabalho.
A escolha costuma ser feita por hábito de recursos: "contêiner é mais leve". É verdade, mas não é isso que deve decidir.
A diferença cabe em uma frase: uma máquina virtual traz o próprio núcleo, um contêiner usa o do servidor. Tudo o que você precisa saber decorre dessa frase.
Primeira consequência: por onde passa a fronteira
A fronteira da máquina virtual é traçada pelo hardware. A do contêiner é traçada pelo núcleo do servidor.
Isso não quer dizer que contêiner seja "fraco"; diz por onde passa a fronteira. Se uma falha de software dentro de um contêiner quiser alcançar o servidor, o que ela precisa atravessar é o próprio núcleo do servidor. Numa máquina virtual, o que precisa atravessar é uma parede em nível de hardware.
A pergunta prática é esta: quanto você confia no que vai rodar? Para um serviço que você mesmo escreveu ou usa há anos, contêiner serve muito bem. Para algo baixado que você não domina totalmente, máquina virtual é o lugar melhor.
Segunda consequência: nem tudo roda em contêiner
Nada que precise do próprio núcleo roda em contêiner. Um software que quer outra versão de núcleo, uma ferramenta que carrega módulos de núcleo, um sistema operacional que não é Linux: todos exigem máquina virtual.
Isso não é questão de preferência, é consequência direta da frase acima. Se um contêiner usa o núcleo do servidor, você não pode pedir que ele mude esse núcleo.
Terceira consequência: a manutenção toca cada um de um jeito
Essa é a menos conhecida e a que mais tem chance de doer.
Quando você atualiza o motor de máquinas virtuais, as máquinas em funcionamento não são afetadas. O motor novo vale para as máquinas iniciadas depois daquela atualização. Ou seja, uma noite de manutenção pode passar em silêncio por cima das suas máquinas em funcionamento.
Quando você atualiza a camada de execução dos contêineres, os contêineres em funcionamento podem ser afetados, porque todos compartilham aquela camada. Durante a atualização a camada de arquivos compartilhada pode ser remontada e dentro dos contêineres podem aparecer erros de acesso passageiros.
Isso não é opinião do produto, é consequência direta da mesma frase: se você atualiza algo compartilhado, todo mundo que compartilha sente.
Quarta consequência: a liberdade de migrar
Uma máquina virtual pode ser movida para outro nó em funcionamento. Um contêiner não: ele é desligado, movido e ligado de novo.
Então, se um trabalho que não tolera interrupção está num contêiner, esse trabalho vai parar nas noites de manutenção. Isso entra na balança na hora de decidir onde colocar.
A regra prática
Escolha contêiner quando o que você vai rodar é um serviço Linux comum que você poderia rodar no próprio servidor, quando você confia nele e quando ele aguenta uma interrupção curta.
Escolha máquina virtual quando um núcleo próprio for necessário, quando não puder ser interrompida durante a manutenção, ou quando você não confia totalmente no que executa.
A diferença de recursos vem depois desses três testes. É verdade que um contêiner gasta menos memória, mas o custo de um contêiner no lugar errado supera de longe essa economia.
O que o Atlas faz
O Atlas carrega essa distinção não como slogan, mas como comportamento.
Na avaliação de atualizações, o motor de máquinas virtuais e a camada de execução dos contêineres são tratados em separado. Quando o motor de máquinas é atualizado, a resposta para as máquinas em funcionamento fica no nível informativo: elas não são afetadas, o motor novo vale para as iniciadas depois. Quando a camada de contêineres é atualizada, o nível sobe para aviso e o motivo é escrito: a camada compartilhada pode ser remontada, considere parar brevemente os contêineres críticos.
A mesma distinção aparece no planejamento de migração: para contêineres, migrar em funcionamento não é oferecido como opção, é indicada a corrente desligar, mover, ligar.
Ou seja, o produto não apresenta os dois como "duas variações da mesma coisa". Eles se comportam de modo diferente, então são descritos de modo diferente.
Fontes
A documentação oficial do Proxmox. Em inglês, e é ela que dá a palavra final neste assunto.