- O que é o LXC?
- Para o que é útil?
- Quais são as diferenças entre o LXC e a virtualização comum?
Respostas:
Se por "inglês simples" você quer dizer pessoas não técnicas, a diferença não pode ser explicada facilmente. Esse cabelo é fino demais para ser cortado sem consideração cuidadosa.
Se, por "inglês simples", você quer dizer tipos gerenciais que conversam com pessoas técnicas e, portanto, têm pelo menos uma boa compreensão dos tópicos técnicos, envio o seguinte verbage:
É uma forma diferente de virtualização.
Se você observar o VMWare ESXi, é um hypervisor completo executando o que é chamado virtualização completa. Há uma camada muito pequena entre os sistemas virtualizados em execução no topo do hardware. Existe virtualização de hardware completa, em que o sistema operacional em execução na máquina virtual é totalmente independente do próprio hipervisor e é apresentado com todo o hardware esperado.
Dê outro passo à frente e observe algo como VMWare Player, Workstation, ESX (não ESXi) ou VMWare Server, e você possui um sistema operacional completo que fornece a função de hypervisor. No entanto, as máquinas virtuais ainda são apresentadas com uma gama completa de hardware virtual.
Outra abordagem é a para-virtualização, que o Xen seguiu por algum tempo. Nesta forma de virtualização, o sistema operacional convidado está ciente de que está virtualizado e foi modificado para funcionar nesse ambiente. Às vezes, tudo isso precisa é de drivers especiais para virtualização. Outras vezes, são necessárias mudanças definitivas no kernel.
LXC, ou Linux Containers, é mais um passo em frente. Nesse caso, ele está executando várias instâncias do mesmo sistema operacional . O kernel pode ser o mesmo, mas vários espaços de usuários estão sendo executados para cada contêiner do SO. Cada contêiner pode ou não ter um sistema de arquivos diferente.
Os contêineres oferecem uma maneira de fornecer uma forte separação de segurança entre processos de uma maneira que não está disponível em sistemas com o mesmo espaço de usuário. Os sistemas operacionais do tipo Unix têm a 'prisão chroot' há algum tempo, mas não oferecem separação de processos ou capacidade de limitar os recursos consumidos pelos processos na prisão. Ao containerizar esses processos, o uso de recursos pode ser limitado, os endereços IP discretos podem ser atribuídos a eles e as vulnerabilidades de segurança que exploram o espaço do usuário são contidas no restante do sistema.
Onde você usaria o LXC em comparação com outro tipo de virtualização? Depende, mas o LXC deve fornecer menos penalidade de virtualização do que qualquer outro método de vitualização, pois é o mesmo kernel que medeia todas as chamadas do espaço do usuário, em vez de um hipervisor que finge ser hardware para várias imagens de SO que esperam falar com hardware físico. Portanto, se você tem um monte de processamento que precisa da mesma versão do sistema operacional e pode ser reinicializado ao mesmo tempo para atualizações, o LXC pode fornecer uma maneira de baixo custo para executar tudo isso de forma segura e com gerenciamento de recursos.
O LXC é um meio pelo qual isolar sistemas / processos no kernel. O sistema está bloqueado em um "contêiner" para que não possa interagir com nada fora desse contêiner. Assim, o nome Linux Containers.
Pode ser útil para muitas coisas, uma das quais seria isolar serviços em execução em uma máquina. Se um desses serviços for comprometido, o próprio sistema host (juntamente com os outros serviços executados em seus próprios LXCs) não será afetado. Pode até ser usado como um meio estúpido para dar a cada usuário acesso root ao seu próprio sistema, sem preocupações de interagir um com o outro.
A maioria das outras virtualizações "comuns" impõe uma grande sobrecarga no uso de recursos devido à necessidade de emular dispositivos de hardware. O LXC não requer nenhum tipo de emulação para dispositivos de hardware, pois cada LXC recebe acesso limitado / nenhum acesso direto ao hardware. Cada sistema está "executando" no host, mas não pode afetar nada fora do contêiner. Esse tipo de virtualização foi chamado de virtualização no nível do SO (google it). O que significa basicamente uma sobrecarga muito pequena / inexistente para executar um contêiner Linux. Portanto, você pode ter centenas de LXCs em uma determinada máquina, mas os recursos acabariam rapidamente, usando um software de máquina virtual "comum".
Na verdade, eu estou mais familiarizado com o Linux-Vserver, mas a teoria é praticamente a mesma.
A maneira mais simples de entender isso é aprender o que o chroot faz. O chroot permite que você "efetue login" em uma pasta de um sistema unix, como se fosse o sistema completo por si só. Em outras palavras:
se você tem:
/
/boot
/etc
/home
...
etc., você pode adicionar um diretório some_new_install:
/
/some_new_install
/boot
/etc
/home
/usr
...
/boot
/etc
/home
/usr
...
e faça login em / some_new_install. Então / some_new_install / etc é o novo / etc, por exemplo, e o / etc original fica oculto e (principalmente) inacessível. / usr / bin pode ser diferente do original, com programas diferentes. O MySQL pode ser o mesmo programa em / usr / bin / mysql, mas com dados diferentes em / var / lib / mysql.
O sistema de arquivos foi virtualizado; você dividiu seu sistema de arquivos original, compartilhando seus recursos, isolando-os de outros recursos virtualizados.
Isso é ótimo. Em vez de executar uma cópia virtual nova e completa do unix, apenas para executar um programa extra, você pode pular para um sistema de arquivos virtual e executá-lo no mesmo kernel, nas mesmas bibliotecas (se você usou links simbólicos) etc. É MUITO mais eficiente do que algo como Xen ou VirtualBox.
O problema é que, se um desses programas, digamos, MySQL, enlouquecer e começar a usar toda a CPU e trocar no disco, isso ainda afetará o resto da máquina, porque apenas o sistema de arquivos foi virtualizado, e não a CPU ou desempenho do disco subjacente. Os endereços IP e as portas também não são virtualizados; portanto, se dois programas enviarem informações na rede, eles o farão pelos mesmos IPs, potencialmente causando conflitos. Da mesma forma, se duas cópias do mysql tentarem ouvir em uma porta, a segunda falhará, porque a porta está em uso.
O LXC resolve isso virtualizando não apenas o sistema de arquivos, mas também os ips / portas / interfaces de rede, a CPU, o uso de memória etc.
O LXC não é tão seguro quanto as máquinas virtuais completas, mas geralmente é a solução superior. Afinal, os sistemas operacionais têm tudo a ver com o compartilhamento seguro de recursos. Na maioria das vezes, é bobagem executar vários sistemas operacionais para fazer isso - só precisamos de um sistema operacional melhor com melhor isolamento. É isso que o LXC e ferramentas similares fornecem.