Cara penanganan kontainer LXC yang benar pada btrfs

11

Katakanlah kita memiliki satu server dengan lxc diinstal, dan wadah lxc digunakan sebagai basis img /var/lib/lxc/ubuntu_base. Untuk mempermudah, mari kita lupakan perubahan konfigurasi setelah menyalin basis img.

beberapa orang menyarankan untuk menggunakan subvolume dan snapshot untuk membuat wadah baru, tetapi orang dapat dengan mudah melakukan cp --reflink dengan hasil yang serupa.

Jadi apa cara yang tepat (atau mana yang lebih baik) untuk mengelola banyak wadah?

  • snapshot

Cara ini sepertinya yang terbaik, tetapi perintah seperti lxc-destroy tidak akan berfungsi karena tidak akan bisa menghapus direktori.

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

Saya tidak yakin apakah ada perbedaan kinerja antara ini atau snapshot

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • atau Adakah cara lain yang lebih baik untuk melakukan ini yang tidak saya sadari.

edit:

Satu hal yang saya lihat dengan opsi reflink adalah, bahwa Anda tidak dapat menghapus wadah dasar jika yang lain berjalan, karena /procdan /devsudah terpasang dan tidak pernah berubah, se referensi selalu sama. Tetapi mematikan semua wadah yang tertutup tampaknya membantu.

zidarsk8
sumber
Saya telah menggunakan fitur snapshot btrfs untuk membuat wadah baru - dan berfungsi dengan baik (ketentuan cukup cepat dll). Namun, btrfs memiliki cache halaman per-subvolume - jadi meskipun menggunakan snapshots lebih cepat / ruang disk efisien, Anda cenderung memiliki banyak salinan dari apa yang secara efektif biner yang sama dalam memori.
David Goodwin

Jawaban:

2

Saya menggunakan Ubuntu LTS 14 dan baru saja menjalankan yang berikut (untuk pertama kalinya) dan bekerja dengan sangat baik:

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

Menggunakan -s dengan lxc-clone akan mengambil snapshot jika backing store adalah btrfs (dalam kasus Anda).

Verifikasi klon / foto baru dengan

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

Semoga itu bisa membantu!

dapithor
sumber
1
Perhatikan bahwa hari ini Anda perlu menentukan btrf sebagai toko dukungan ketika Anda menjalankan lxc-create atau lxc-clone akan memberikan Anda overlayfs sebagai gantinya.
Lester Cheung
Untuk hanya membuat wadah "ringan" baru, tampaknya dua baris pertama sudah cukup (lxc-stop dan lxc-klon), berkat -sopsi, dan bahwa tiga yang terakhir (lxc_start, lxc_stop, lxc_stop, lxc_snapshot) hanyalah sebuah proses pembantu untuk mengelola evolusi wadah di masa depan. Apakah itu benar ?
lalebarde
3

jika Anda akan menggunakan subvolume btrfs untuk lxc, Anda perlu menambahkan opsi user_subvol_rm_alloweddi /etc/fstab. Contoh diekstrak dari satu file fstab:

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

opsi akan memungkinkan Anda dapat menghapus subvol tanpa menjadi root, hanya pengguna biasa. Kemampuan ini digunakan oleh lxc ketika snapshot masuk dalam subvolume btrfs

Yonsy Solis
sumber
3

Kira itu tergantung pada seberapa besar gambar dasar Anda itu. Saya mungkin akan membuat lxc-membuat wadah baru dan menggunakan Salt / Puppet dll untuk menyediakan wadah saya dan hanya klon-lxc untuk wadah yang relatif lebih besar (misalnya wadah dev dengan banyak alat yang diinstal dan dikonfigurasi).

Perhatikan bahwa lxc-clone akan menggunakan backing store yang sama dengan sumbernya. Jadi untuk menggunakan subvolume Anda harus membuat wadah Anda dengan "-B btrfs". Sebagai contoh:

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

Kemudian klon dengan:

lxc-clone -s mycontainer mynewcontainer

Jika Anda menggunakan zfs untuk menyimpan kontainer, ada --zfsrootopsi tambahan untuk lxc-create sehingga Anda dapat memilih zpool selain "tangki" default. Sebagai contoh:

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

Bagikan dan nikmati!

Lester Cheung
sumber
Saya menggunakan debian wheezy dengan BTRFS. Tampaknya opsi -B btrfsini digunakan secara default - saya berasumsi karena debian saya diatur dengan BTRFS. Sebenarnya, saya membuat wadah pertama saya (debee wheezy 32 bit) tanpa opsi ini, dan subvolume dibuat untuk itu.
lalebarde
@ lalebarde yang mungkin -B bestberaksi tetapi senang mengetahui!
Lester Cheung