Manera adecuada de manejar contenedores LXC en btrfs

11

Digamos que tenemos un servidor con lxc instalado, y un contenedor lxc utilizado como img base /var/lib/lxc/ubuntu_base. Por simplicidad, olvidemos los cambios de configuración después de copiar el img base.

algunas personas sugieren usar subvolúmenes e instantáneas para hacer nuevos contenedores, pero uno podría hacer cp --reflink fácilmente con resultados similares.

Entonces, ¿cuál es la forma adecuada (o cuál es mejor) para administrar múltiples contenedores?

  • instantáneas

Esta manera parece mejor, pero los comandos como lxc-destroy no funcionarán ya que no podrá eliminar el directorio.

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

No estoy seguro de si hay alguna diferencia de rendimiento entre esto o las instantáneas

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • o ¿Hay alguna otra manera mejor de hacer esto que no conozca?

editar:

Una cosa que he visto con la opción reflink es que no se puede eliminar el contenedor base si hay otros en ejecución, porque /procy /devestán montados y nunca cambiaron, ya que la referencia es siempre la misma. Pero cerrar todos los contenedores copiados parece ayudar.

zidarsk8
fuente
He usado la función de instantánea btrfs para crear nuevos contenedores, y funciona bien (aprovisionamiento bastante rápido, etc.). Sin embargo, btrfs tiene un caché de página por subvolumen, por lo que, aunque el uso de instantáneas es rápido / eficiente en el espacio en disco, es probable que termine teniendo múltiples copias de lo que efectivamente es el mismo binario en la memoria.
David Goodwin

Respuestas:

2

Estoy en Ubuntu LTS 14 y acabo de ejecutar lo siguiente (incluso por primera vez) y funcionó de maravilla:

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

El uso de -s con lxc-clone tomará una instantánea si la tienda de respaldo es btrfs (en su caso).

Verifique nuevos clones / instantáneas con

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

¡Espero que ayude!

dapithor
fuente
1
Tenga en cuenta que en estos días necesita especificar btrfs como el almacén de respaldo cuando ejecuta lxc-create o lxc-clone le dará una superposición en su lugar.
Lester Cheung
Para crear un nuevo contenedor "ligero", parece que las dos primeras líneas son suficientes (lxc-stop y lxc-clone), gracias a la -sopción, y que las tres últimas (lxc_start, lxc_stop, lxc_snapshot) son solo una proceso auxiliar para gestionar futuras evoluciones de contenedores. Es correcto ?
lalebarde
3

si va a utilizar subvolúmenes btrfs para lxc, debe agregar la opción user_subvol_rm_alloweden su /etc/fstab. Ejemplo extraído de un archivo fstab:

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

la opción permitirá que pueda eliminar subvol sin ser root, solo usuario normal. Esta capacidad es utilizada por lxc cuando las instantáneas van en subvolúmenes btrfs

Yonsy Solis
fuente
3

Supongo que depende de qué tan grande sea su imagen base. Probablemente crearía un nuevo contenedor y usaría Salt / Puppet, etc. para aprovisionar mis contenedores y solo lxc-clone para contenedores relativamente más grandes (por ejemplo, contenedores de desarrollo con muchas herramientas instaladas y configuradas).

Tenga en cuenta que lxc-clone usará el mismo almacén de respaldo que la fuente. Por lo tanto, para usar subvolumen necesitará crear sus contenedores con "-B btrfs". Por ejemplo:

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

Luego clonarlo con:

lxc-clone -s mycontainer mynewcontainer

En caso de que esté usando zfs para almacenar sus contenedores, hay una --zfsrootopción adicional para lxc-create para que pueda elegir un zpool diferente al "tanque" predeterminado. Por ejemplo:

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

¡Comparte y Disfruta!

Lester Cheung
fuente
Estoy en debian wheezy con BTRFS. Parece que la opción -B btrfsse usa de forma predeterminada. Supongo que mi Debian está configurado con BTRFS. En realidad, creé mi primer contenedor (un debian wheezy de 32 bits) sin esta opción, y se creó un subvolumen para él.
lalebarde
@lalebarde que probablemente esté -B besten acción, ¡pero es bueno saberlo!
Lester Cheung