É possível iniciar o contêiner LXC dentro do contêiner LXC?

21

É possível iniciar o contêiner LXC dentro de outro contêiner LXC?

    
por Mikhail 05.03.2012 / 21:08

4 respostas

44

Vou dissipar alguns mitos aqui.

This is just a bad idea. I'm sorry. – Jacob Mar 5 at 20:30

Eu não vejo como isso é uma má ideia. É realmente apenas um chroot dentro de um chroot. Por um lado, pode diminuir o desempenho de alguma forma insignificante (nada comparado a executar uma VM dentro de uma VM). Por outro lado, é provável que seja mais seguro (por exemplo, mais isolado do sistema host raiz e seus constituintes).

Do you actually have a real reason to do this? Please remember that questions here should be about actual problems that you face. – Zoredache Mar 5 at 21:52

Concordo 100% com o comentário seguinte do poster. Além disso, acho que é seguro supor que todos que postarem uma pergunta aqui provavelmente pensam que têm uma razão real para fazer isso.

I think, that lxc should be able to simplify VM migration(and backup+recovery too). But I'm not sure about cases, when there is no access to host OS(cheap vps for example). – Mikhail Mar 6 at 11:17

Na verdade, deparei com essa pergunta em junho, quando eu mergulhei no LXC para projetos de PaaS / IaaS e fiquei particularmente interessado na capacidade de permitir que os usuários emulassem ambientes de nuvem para fins de desenvolvimento.

LXCeption. We're too deep. – Tom O'Connor Mar 6 at 22:46

Eu ri um pouco quando li este, mas esse não é o caso:)

De qualquer forma, eu finalmente configurei um ambiente VirtualBox com uma instalação padrão do Ubuntu 12.04 LTS Server Edition depois de ler tudo isso, pensando que isso era 100% possível. Depois de instalar o LXC, criei um novo contêiner e instalei o LXC dentro do contêiner com o apt-get. A maior parte da instalação progrediu bem, mas resultou em erro, eventualmente devido a um problema com o pacote cgroup-lite, cuja tarefa inicial falhou ao iniciar após o pacote ter sido instalado.

Depois de pesquisar um pouco, deparei-me com este artigo excelente em stgraber.org (os itens estão escondidos sob a seção "Container Nesting"):

sudo apt-get install lxc
sudo lxc-create -t ubuntu -n my-host-container -t ubuntu
sudo wget https://www.stgraber.org/download/lxc-with-nesting -O /etc/apparmor.d/lxc/lxc-with-nesting
sudo /etc/init.d/apparmor reload
sudo sed -i "s/#lxc.aa_profile = unconfined/lxc.aa_profile = lxc-container-with-nesting/" /var/lib/lxc/my-host-container/config
sudo lxc-start -n my-host-container
(in my-host-container) sudo apt-get install lxc
(in my-host-container) sudo stop lxc
(in my-host-container) sudo sed -i "s/10.0.3/10.0.4/g" /etc/default/lxc
(in my-host-container) sudo start lxc
(in my-host-container) sudo lxc-create -n my-sub-container -t ubuntu
(in my-host-container) sudo lxc-start -n my-sub-container

A instalação dessa política do AppArmor e a reinicialização do daemon resolveram o problema (não se esqueça de alterar os intervalos de rede!). Na verdade, achei que um snippet específico era tão importante que espelhei o link apenas para o caso de o artigo ficar off-line.

Depois disso, sudo /etc/init.d/cgroup-lite start foi bem-sucedido e foi tranquilo.

Então, sim, é possível iniciar um contêiner LXC dentro de outro contêiner LXC:)

    
por 25.08.2012 / 20:31
13

Com o Ubuntu 14.04 (trusty) você pode simplesmente adicionar o seguinte na configuração do container pai:

lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting

referência: link (procure por "aninhamento"

Certifique-se de ter uma rede pré-configurada antes de inicializar para evitar uma longa pausa antes que a tela de login apareça!

HTH

    
por 05.06.2014 / 15:49
1

Além disso, você sabia que agora pode instalar o ALL Openstack em um único contêiner LXC. Cada um dos "serviços" do Openstack (nova, swift, etc) é então instalado em contêineres lxc "aninhados" dentro do contêiner "mestre / pai".

Demora um tempo para instalar tudo, mas quando terminar, você terá um bom ambiente de teste do OpenStack no seu laptop ou desktop para experimentar.

Se você quiser interromper o OpenStack, basta parar o container master / parent para reiniciar o Openstack.

veja: instruções do Openstack Single Installer

    
por 03.01.2016 / 15:30
1

Sim, você pode fazer contêineres LXC aninhados e, apesar do primeiro comentário, há momentos e casos de uso em que os contêineres Aninhados certamente são úteis. Veja o blog LXC de 10 partes de Stephane Graber, mas em particular a seção Container Nesting -

A série de 10 partes de Stephane Graber no LXC

casos de uso: Suponha que você queira um ambiente LXC com vários inquilinos. Crie um contêiner mestre para cada pessoa ou organização certificando-se de ativar o aninhamento adicionando os 2 cmds ao arquivo de configuração do contêiner LXC. Em seguida, em cada contêiner mestre, crie seus sub-contêineres aninhados nos quais você instalará os aplicativos, áreas de trabalho, etc., que cada grupo exige. OBSERVE que, enquanto a rede padrão para os contêineres principais será 10.0.3.x, os contêineres aninhados serão 10.0.4.x por padrão (você também pode alterar se precisar).

Qual é a maior vantagem que tive usando o Nested LXC? Se você lxc-stop o container Master e lxc-clone-lo .. você clone não só o mestre, mas todos os sub-recipientes ... isso é útil para backups rápidos. Essa abordagem também é útil se você quiser fazer uma migração ao vivo do LXC com CRIU. Quando você migra um dos contêineres do Mestre para outra Máquina ... na verdade, você está migrando e todos os contêineres aninhados também.

Por fim, para um exemplo interessante de aninhamento LXC, use Stephane Graber & outros construíram um simulador para "A Internet" usando LXC, BPG & OSPF tudo em um contêiner LXC. Dentro desse contêiner LXC "mestre ou principal" do LXC, há 512 contêineres LXC aninhados, cada um rodando o roteamento Quagga para BGP / OSPF. Juntos, esses 512 "nós" da Internet simulam a Internet. Essa implementação foi usada na conferência de segurança de 2014 da NSEC para todos os participantes para experimentar a segurança na Internet.

A fonte para isso está no Githug em: 2014 simulador NSEC LXC para o código github da Internet

    
por 03.01.2016 / 15:23