Maneira apropriada de manipular contêineres LXC em btrfs

11

Digamos que temos um servidor com lxc instalado e um contêiner lxc usado como base img /var/lib/lxc/ubuntu_base . Para simplificar, vamos esquecer as alterações de configuração depois de copiar a base img.

algumas pessoas sugerem o uso de subvolumes e snapshots para criar novos contêineres , mas um poderia facilmente fazer cp --reflexar com resultados semelhantes.

Então, qual é o caminho certo (ou qual é o melhor) para gerenciar vários contêineres?

  • instantâneos

Dessa forma, parece melhor, mas comandos como lxc-destroy não funcionarão, já que não será possível excluir o diretório.

btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • cp com reflink

Não tenho certeza se existe alguma diferença de desempenho entre este ou os instantâneos

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • ou existe alguma outra maneira melhor de fazer isso que eu não conheço.

editar:

Uma coisa que eu vi com a opção de reflink é que você não pode excluir o contêiner base se outros estiverem em execução, porque os /proc e /dev estão montados e nunca são alterados, se a referência for sempre a mesmo. Mas desligar todos os recipientes copiados parece ajudar.

    
por zidarsk8 25.07.2014 / 22:13

3 respostas

2

Eu estou no Ubuntu LTS 14 e apenas corri o seguinte (pela primeira vez mesmo) e funcionou como um encanto:

lxc-stop -n ubuntu_base
lxc-clone -o ubuntu_base -n ubuntu_base_c1 -s
lxc-start -n ubuntu_base_c1 -d # make changes if needed
lxc-stop -n ubuntu_base_c1
lxc-snapshot -n ubuntu_base_c1

Usar -s com lxc-clone terá um instantâneo se o armazenamento de backup for btrfs (no seu caso).

Verifique novos clones / instantâneos com

lxc-ls -f
btrfs subvolume list /var/lib/lxc

Espero que ajude!

    
por 04.09.2014 / 21:45
3

Se você usar subvolumes do btrfs para lxc, será necessário adicionar a opção user_subvol_rm_allowed no seu /etc/fstab . Exemplo extraído de um arquivo fstab:

UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0

a opção permitirá que você possa remover o subvol sem ser root, apenas usuário normal. Esse recurso é usado pelo lxc quando os instantâneos vão em subvolumes btrfs

    
por 18.03.2015 / 18:13
3

Acho que depende do tamanho da sua imagem base. Eu provavelmente lxc-criar um novo contêiner e usar Salt / Puppet etc para provisionar meus contêineres e somente lxc-clone para contêineres relativamente maiores (por exemplo, contêineres dev com muitos ferramentas instaladas e configuradas).

Observe que o lxc-clone usará o mesmo repositório de armazenamento da origem. Então, para usar subvolume, você precisará criar seus contêineres com "-B btrfs". Por exemplo:

lxc-create -B btrfs -n mycontainer -t ubuntu

Em seguida, clone-o com:

lxc-clone -s mycontainer mynewcontainer

Caso você esteja usando o zfs para armazenar contêineres, há uma opção --zfsroot extra para criar o lxc, para que você possa escolher um zpool diferente do "tanque" padrão. Por exemplo:

lxc-create -B zfs --zfsroot=data/lxc

Compartilhe e divirta-se!

    
por 31.03.2015 / 13:16