Modo corretto di gestire i contenitori LXC su btrfs


11

Diciamo che abbiamo un server con lxc installato e un contenitore lxc usato come img di base /var/lib/lxc/ubuntu_base. Per semplicità dimentichiamo le modifiche alla configurazione dopo aver copiato l'img di base.

alcune persone suggeriscono di usare sottovolumi e istantanee per creare nuovi contenitori, ma si potrebbe facilmente fare cp --reflink con risultati simili.

Allora, qual è il modo di propper (o quale è meglio) per la gestione di più contenitori?

  • istantanee

In questo modo sembra migliore, ma comandi come lxc-destroy non funzioneranno poiché non saranno in grado di eliminare la directory.

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

Non sono sicuro che ci siano differenze di prestazioni tra questo o gli snapshot

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • o Esiste un altro modo migliore di fare ciò di cui non sono a conoscenza?

modificare:

Una cosa che ho visto con l'opzione reflink è che non è possibile eliminare il contenitore di base se gli altri sono in esecuzione, perché /proce /devsono montati e mai modificati, poiché il riferimento è sempre lo stesso. Ma chiudere tutti i contenitori coppied sembra aiutare.


Ho usato la funzione snapshot di btrfs per creare nuovi container - e funziona bene (provisioning piuttosto veloce, ecc.). Tuttavia, btrfs ha una cache di pagine per sottovolume, quindi sebbene l'uso di snapshot sia rapido / efficiente in termini di spazio su disco, è probabile che finirai per avere più copie di quello che è effettivamente lo stesso binario in memoria.
David Goodwin,

Risposte:


2

Sono su Ubuntu LTS 14 e ho appena eseguito il seguente (anche per la prima volta) e ha funzionato come un fascino:

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

L'uso di -s con lxc-clone farà un'istantanea se il backing store è btrfs (nel tuo caso).

Verifica il nuovo clone / istantanee con

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

Spero possa aiutare!


1
Si noti che in questi giorni è necessario specificare btrfs come archivio di backup quando si esegue lxc-create o lxc-clone , invece si otterrà un overlayfs .
Lester Cheung,

Per creare semplicemente un nuovo contenitore "leggero", sembra che le prime due linee siano sufficienti (lxc-stop e lxc-clone), grazie -sall'opzione, e che le ultime tre (lxc_start, lxc_stop, lxc_snapshot) sono solo processo di supporto per la gestione delle future evoluzioni dei container. È corretto ?
lalebarde,

3

se utilizzerai i sottovolumi btrfs per lxc, devi aggiungere l'opzione user_subvol_rm_allowednel tuo /etc/fstab. Esempio estratto da un file fstab:

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

l'opzione consentirà di rimuovere subvol senza essere root, solo utente normale. Questa funzionalità viene utilizzata da lxc quando le istantanee vanno nei sottovolumi btrfs


3

Suppongo che dipenda da quanto è grande l'immagine di base. Probabilmente avrei creato un nuovo contenitore e usato Salt / Puppet ecc. Per eseguire il provisioning dei miei contenitori e solo lxc-clone per contenitori relativamente più grandi (ad es. Contenitori di sviluppo con molti strumenti installati e configurati).

Si noti che lxc-clone utilizzerà lo stesso archivio di backup del sorgente. Quindi per usare il sottovolume dovrai creare i tuoi contenitori con "-B btrfs". Per esempio:

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

Quindi clonalo con:

lxc-clone -s mycontainer mynewcontainer

Nel caso in cui si stia utilizzando zfs per archiviare i propri contenitori, è disponibile --zfsrootun'opzione aggiuntiva per lxc-create in modo da poter scegliere uno zpool diverso dal "serbatoio" predefinito. Per esempio:

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

Condividi e divertiti!


Sono debian wheezy con BTRFS. Sembra che l'opzione -B btrfssia usata di default - presumo perché il mio debian è impostato con BTRFS. In realtà, ho creato il mio primo container (un debian wheezy a 32 bit) senza questa opzione e per questo è stato creato un sottovolume.
lalebarde,

@lalebarde probabilmente -B bestin azione ma buono a sapersi!
Lester Cheung,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.