Apakah mungkin untuk memulai wadah LXC di dalam wadah LXC?

21

Apakah mungkin untuk memulai wadah LXC di dalam wadah LXC lain?

Mikhail
sumber
1
Apakah Anda benar-benar memiliki alasan kuat untuk melakukan ini? Harap ingat bahwa pertanyaan di sini harus tentang masalah aktual yang Anda hadapi .
Zoredache
6
Saya pikir, lxc itu harus dapat menyederhanakan migrasi VM (dan backup + recovery juga). Tapi saya tidak yakin tentang kasus, ketika tidak ada akses ke host OS (misalnya vps murah).
Mikhail

Jawaban:

45

Saya akan menghilangkan beberapa mitos di sini.

Ini hanya ide yang buruk. Maafkan saya. - Yakub 5 Maret pukul 20:30

Saya tidak melihat bagaimana ini adalah ide yang buruk. Benar-benar hanya chroot di dalam chroot. Di satu sisi, itu mungkin dapat menurunkan kinerja dalam beberapa cara yang dapat diabaikan (tidak ada dibandingkan dengan menjalankan VM di dalam VM). Di sisi lain, ini cenderung lebih aman (misalnya lebih terisolasi dari sistem host root dan konstituennya).

Apakah Anda benar-benar memiliki alasan kuat untuk melakukan ini? Harap ingat bahwa pertanyaan di sini harus tentang masalah aktual yang Anda hadapi. - Zoredache 5 Maret pukul 21:52

Saya setuju 100% dengan komentar poster berikut. Lebih jauh, saya pikir aman untuk mengasumsikan bahwa setiap orang yang memposting pertanyaan di sini kemungkinan berpikir bahwa mereka memiliki alasan kuat untuk melakukannya [..]

Saya pikir, lxc itu harus dapat menyederhanakan migrasi VM (dan backup + recovery juga). Tapi saya tidak yakin tentang kasus, ketika tidak ada akses ke host OS (misalnya vps murah). - Mikhail 6 Maret jam 11:17

Saya benar-benar menemukan pertanyaan ini pada bulan Juni ketika saya pertama kali menyelam ke LXC untuk proyek PaaS / IaaS, dan saya sangat tertarik pada kemampuan untuk memungkinkan pengguna untuk meniru lingkungan cloud untuk tujuan pengembangan.

LXCeption. Kami terlalu dalam. - Tom O'Connor 6 Maret pukul 22:46

Saya tertawa sedikit ketika membaca ini, tapi itu sama sekali bukan masalahnya :)

Bagaimanapun, saya akhirnya membuat lingkungan VirtualBox dengan instalasi stok Ubuntu 12.04 LTS Server Edition setelah membaca semua ini, berpikir bahwa ini 100% mungkin. Setelah menginstal LXC, saya membuat wadah baru, dan menginstal LXC di dalam wadah dengan apt-get. Sebagian besar instalasi berkembang dengan baik, tetapi pada akhirnya menghasilkan kesalahan karena masalah dengan paket cgroup-lite, yang pekerjaan pemula gagal dimulai setelah paket diinstal.

Setelah sedikit mencari, saya menemukan artikel bagus ini di stgraber.org ( barangnya bersembunyi di bawah bagian "Container Nesting"):

sudo apt-get install lxc
sudo lxc-create -t ubuntu -n my-host-container -t ubuntu
sudo wget https://www.stgraber.org/download/lxc-with-nesting -O /etc/apparmor.d/lxc/lxc-with-nesting
sudo /etc/init.d/apparmor reload
sudo sed -i "s/#lxc.aa_profile = unconfined/lxc.aa_profile = lxc-container-with-nesting/" /var/lib/lxc/my-host-container/config
sudo lxc-start -n my-host-container
(in my-host-container) sudo apt-get install lxc
(in my-host-container) sudo stop lxc
(in my-host-container) sudo sed -i "s/10.0.3/10.0.4/g" /etc/default/lxc
(in my-host-container) sudo start lxc
(in my-host-container) sudo lxc-create -n my-sub-container -t ubuntu
(in my-host-container) sudo lxc-start -n my-sub-container

Menginstal kebijakan AppArmor itu dan memulai ulang daemon berhasil (jangan lupa mengubah rentang jaringan!). Bahkan, saya pikir cuplikan tertentu itu sangat penting sehingga saya mencerminkannya di @ http://pastebin.com/JDFp6cTB untuk berjaga-jaga kalau-kalau artikel itu pernah offline.

Setelah itu, sudo /etc/init.d/cgroup-lite startberhasil dan ternyata lancar.

Jadi, ya, dimungkinkan untuk memulai wadah LXC di dalam wadah LXC lain :)

Adam Eberlin
sumber
1
Konfigurasi ini cukup banyak menonaktifkan perlindungan AppArmor (dengan menjalankan wadah tanpa batas). AppArmor "dimaksudkan untuk melindungi tuan rumah dari penyalahgunaan hak istimewa yang tidak disengaja di dalam wadah." Konfigurasi ini cukup banyak membuka host lxc untuk dieksploitasi oleh wadah lxc bersarang Anda. Tuan rumah LXC yang bersarang mungkin tidak menawarkan perlindungan pada wadahnya juga. Secara umum, menonaktifkan perlindungan ini tidak dianjurkan.
Reece45
apakah ada pendekatan aman yang layak untuk menjalankan lxc di dalam lxc?
Mascarpone
10
Kasus penggunaan dunia nyata: Saya memiliki kontainer LXC yang menjalankan jenkins, dan saya ingin jenkins dapat menjalankan kontainer LXC sebelum melakukan tes integrasi. Alternatif: jalankan jenkins di luar LXC, atau buat wadah LXC pada host melalui ssh (jelek).
Giovanni Toraldo
13

Dengan Ubuntu 14.04 (trusty) Anda cukup menambahkan berikut ini di konfigurasi wadah induk:

lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting

referensi: https://help.ubuntu.com/lts/serverguide/lxc.html#lxc-basic-usage (cari "nesting)

Pastikan Anda memiliki jaringan pra-konfigurasi sebelum melakukan booting untuk menghindari jeda lama sebelum layar login muncul!

HTH

Lester Cheung
sumber
1
Berfungsi dengan sempurna - terima kasih! Untuk pengguna seperti saya yang mungkin belum memiliki konfigurasi wadah induk untuk meletakkan baris di atas, menambahkan file di ~/.config/lxc/default.confbawah akun pengguna yang membuat wadah dan menambahkan dua baris ke dalamnya berfungsi dengan baik.
Brandon Rhodes
Kembali tahun 2017! Baru-baru ini saya harus memasang docker di dalam lxc untuk aplikasi "enterprise-y" - berfungsi dengan baik tetapi jangan tanya ...
Lester Cheung
1

Juga ... tahukah Anda sekarang Anda dapat menginstal SEMUA Openstack ke dalam wadah LXC tunggal. Setiap "layanan" Openstack (nova, swift dll) kemudian semua diinstal ke dalam wadah lxc "bersarang" di dalam wadah "master / parent".

Butuh beberapa saat untuk menginstal semuanya tetapi ketika selesai Anda memiliki lingkungan OpenStack pengujian yang bagus pada laptop atau desktop untuk bereksperimen.

Jika Anda ingin menghentikan OpenStack, Anda cukup lxc-stop wadah master / parent yang sama untuk me-restart Openstack.

lihat: Petunjuk Instalasi Tunggal Openstack

bmullan
sumber
1

Ya, Anda dapat membuat wadah LXC bersarang dan meskipun komentar pertama ada beberapa kali dan kasus penggunaan di mana kontainer bersarang tentu berguna. Lihat 10 bagian blog LXC Stephane Graber tetapi khususnya bagian Container Nesting -

Seri 10 bagian Stephane Graber di LXC

use-cases: Misalkan Anda menginginkan lingkungan LXC multi-tenant. Buat 1 wadah Master untuk setiap orang atau organisasi memastikan untuk mengaktifkan Nesting dengan menambahkan 2 cmds ke file konfigurasi wadah LXC. Selanjutnya di setiap wadah Master buat sub-wadah bersarang Anda di mana Anda menginstal aplikasi, desktop dll yang diperlukan setiap kelompok. CATATAN bahwa sedangkan jaringan default untuk wadah Master adalah 10.0.3.x kontainer bersarang akan menjadi 10.0.4.x secara default (Anda dapat mengubah salah satu jika perlu).

Apa keuntungan terbesar saya menggunakan Nested LXC? Jika Anda lxc-hentikan wadah Master dan lxc-clone itu .. Anda mengkloning tidak hanya Master tetapi semua sub-wadah ... ini berguna untuk backup cepat. Pendekatan ini juga berguna jika Anda ingin melakukan migrasi langsung LXC dengan CRIU. Saat Anda memigrasi salah satu wadah Master ke Mesin lain ... Anda sebenarnya sedang memigrasikannya dan semua wadah bersarang juga.

Terakhir, untuk contoh keren dari penggunaan bersarang LXC, Stephane Graber & yang lain membuat simulator untuk "Internet" menggunakan LXC, BPG & OSPF semuanya dalam 1 wadah LXC. Di dalam 1 kontainer LXC "master atau induk" LXC terdapat 512 kontainer LXC bersarang yang masing-masing menjalankan Quagga untuk perutean BGP / OSPF. Bersama-sama, 512 "Internet" Internet itu mensimulasikan Internet. Implementasi ini digunakan pada konferensi keamanan NSEC 2014 bagi semua peserta untuk bereksperimen dengan keamanan di Internet.

Sumber untuk ini ada di Githug di: 2014 NSEC LXC simulator untuk The Internet github code

bmullan
sumber