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.


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!


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


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!


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.