เป็นไปได้หรือไม่ที่จะเริ่มคอนเทนเนอร์ LXC ภายในคอนเทนเนอร์ LXC?


21

เป็นไปได้หรือไม่ที่จะเริ่มคอนเทนเนอร์ LXC ภายในคอนเทนเนอร์ LXC อื่น?


1
คุณมีเหตุผลจริงที่จะทำเช่นนี้? โปรดจำไว้ว่าคำถามที่นี่ควรจะเกี่ยวกับปัญหาที่เกิดขึ้นจริงที่คุณต้องเผชิญ
Zoredache

6
ฉันคิดว่า lxc น่าจะสามารถทำการโยกย้าย VM ได้ง่ายขึ้น (และสำรอง + กู้คืนด้วย) แต่ฉันไม่แน่ใจเกี่ยวกับกรณีเมื่อไม่มีการเข้าถึงโฮสต์ OS (ตัวอย่างเช่น vps ราคาถูก)
มิคาอิล

คำตอบ:


45

ฉันจะปัดเป่าตำนานบางอย่างที่นี่

นี่เป็นเพียงความคิดที่ไม่ดี ฉันขอโทษ. - ยาโคบ 5 มี.ค. เวลา 20:30 น

ฉันไม่เห็นว่านี่เป็นความคิดที่เลว มันเป็นเพียง chroot ภายใน chroot ในอีกด้านหนึ่งก็อาจลดประสิทธิภาพในลักษณะที่เล็กน้อยบางอย่าง (ไม่มีอะไรเทียบกับการใช้งาน VM ภายใน VM) ในทางกลับกันมีแนวโน้มที่จะปลอดภัยมากขึ้น (เช่นแยกออกจากระบบโฮสต์หลักและองค์ประกอบอื่น ๆ )

คุณมีเหตุผลจริงที่จะทำเช่นนี้? โปรดจำไว้ว่าคำถามที่นี่ควรเกี่ยวกับปัญหาที่เกิดขึ้นจริงที่คุณเผชิญ - Zoredache 5 มี.ค. เวลา 21:52 น

ฉันเห็นด้วย 100% กับความคิดเห็นต่อไปนี้ของผู้โพสต์ นอกจากนี้ฉันคิดว่ามันปลอดภัยที่จะสมมติว่าทุกคนที่โพสต์คำถามที่นี่น่าจะคิดว่าพวกเขามีเหตุผลที่แท้จริงที่จะทำ [มัน] ..

ฉันคิดว่า lxc น่าจะสามารถทำการโยกย้าย VM ได้ง่ายขึ้น (และสำรอง + กู้คืนด้วย) แต่ฉันไม่แน่ใจเกี่ยวกับกรณีเมื่อไม่มีการเข้าถึงโฮสต์ OS (ตัวอย่างเช่น vps ราคาถูก) - มิคาอิล 6 มี.ค. เวลา 11:17 น

จริง ๆ แล้วฉันเจอคำถามนี้เมื่อเดือนมิถุนายนที่ผ่านมาเมื่อฉันดำดิ่งสู่ LXC สำหรับโครงการ PaaS / IaaS และฉันสนใจเป็นพิเศษในความสามารถในการอนุญาตให้ผู้ใช้จำลองสภาพแวดล้อมคลาวด์เพื่อการพัฒนา

LXCeption เราลึกเกินไป - Tom O'Connor 6 มีนาคมเวลา 22:46 น

ฉันหัวเราะเล็กน้อยเมื่อฉันอ่านข้อความนี้ แต่นั่นไม่ใช่กรณีทั้งหมด :)

อย่างไรก็ตามในที่สุดฉันก็ตั้งค่าสภาพแวดล้อม VirtualBox ด้วยการติดตั้ง Ubuntu 12.04 LTS Server Edition หลังจากอ่านทั้งหมดนี้โดยคิดว่ามันเป็นไปได้ 100% หลังจากติดตั้ง LXC ฉันสร้างคอนเทนเนอร์ใหม่และติดตั้ง LXC ภายในคอนเทนเนอร์ด้วย apt-get การติดตั้งส่วนใหญ่ดำเนินไปด้วยดี แต่ส่งผลให้เกิดข้อผิดพลาดในที่สุดเนื่องจากปัญหากับแพ็คเกจ cgroup-lite ซึ่งงานพุ่งพรวดล้มเหลวในการเริ่มต้นหลังจากติดตั้งแพคเกจแล้ว

หลังจากการค้นหาเล็กน้อยฉันก็ได้พบกับบทความดีๆนี้ที่ stgraber.org (สารพัดซ่อนอยู่ใต้หัวข้อ "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

การติดตั้งนโยบาย AppArmor และการรีสตาร์ท daemon นั้นได้ทำการหลอกลวง (อย่าลืมเปลี่ยนช่วงของเครือข่ายแม้ว่า!) ในความเป็นจริงฉันคิดว่าตัวอย่างบางอย่างมีความสำคัญมากที่ฉันทำมิเรอร์ @ http://pastebin.com/JDFp6cTBในกรณีที่บทความออฟไลน์

หลังจากนั้นก็sudo /etc/init.d/cgroup-lite startประสบความสำเร็จและมันก็ราบรื่น

ดังนั้นใช่เป็นไปได้ที่จะเริ่มคอนเทนเนอร์ LXC ภายในคอนเทนเนอร์ LXC อื่น :)


1
การกำหนดค่านี้ค่อนข้างปิดใช้งานการป้องกัน AppArmor (โดยการเรียกใช้คอนเทนเนอร์ที่ไม่ได้กำหนด) AppArmor คือ "มีจุดประสงค์เพื่อปกป้องโฮสต์จากการใช้สิทธิ์ในคอนเทนเนอร์โดยไม่ตั้งใจ" การกำหนดค่านี้ค่อนข้างเปิดโฮสต์ lxc เพื่อใช้ประโยชน์จากภาชนะ lxc ที่ซ้อนกันของคุณ โฮสต์ LXC ที่ซ้อนกันอาจไม่ให้การป้องกันกับคอนเทนเนอร์เช่นกัน โดยทั่วไปไม่แนะนำให้ปิดใช้งานการป้องกันนี้
Reece45

มีวิธีรักษาความปลอดภัยที่ทำงานได้เพื่อรัน lxc ภายใน lxc หรือไม่?
Mascarpone

10
กรณีใช้งานจริง: ฉันมีคอนเทนเนอร์ LXC ที่ใช้เจนกินส์และฉันต้องการให้เจนกินส์สามารถเรียกใช้คอนเทนเนอร์ LXCs ก่อนดำเนินการทดสอบการรวม ทางเลือก: รันเจนกินส์นอก LXC หรือสร้างภาชนะบรรจุ LXC บนโฮสต์ผ่าน ssh (น่าเกลียด)
Giovanni Toraldo

13

ด้วย Ubuntu 14.04 (เชื่อถือได้) คุณสามารถเพิ่มสิ่งต่อไปนี้ในการกำหนดค่าคอนเทนเนอร์หลัก:

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

ข้อมูลอ้างอิง: https://help.ubuntu.com/lts/serverguide/lxc.html#lxc-basic-usage (ค้นหาคำว่า "nesting)

ตรวจสอบให้แน่ใจว่าคุณมีเครือข่ายที่กำหนดค่าไว้ล่วงหน้าก่อนที่จะบูตเพื่อหลีกเลี่ยงการหยุดยาวก่อนที่หน้าจอเข้าสู่ระบบจะปรากฏขึ้น!

HTH


1
ทำงานได้อย่างสมบูรณ์แบบ - ขอบคุณ! สำหรับผู้ใช้อย่างฉันที่อาจไม่มีคอนฟิเกอเรนต์คอนเทนเนอร์ที่จะวางบรรทัดด้านบนให้เพิ่มไฟล์~/.config/lxc/default.confภายใต้บัญชีของผู้ใช้ที่สร้างคอนเทนเนอร์และเพิ่มทั้งสองบรรทัดให้ใช้งานได้
Brandon Rhodes

ย้อนกลับไปในปี 2560! เมื่อเร็ว ๆ นี้ฉันต้องติดตั้ง docker ภายใน lxc สำหรับแอป "enterprise-y" - ใช้งานได้ดี แต่ไม่ต้องถาม ...
Lester Cheung

1

นอกจากนี้ ... คุณรู้หรือไม่ว่าตอนนี้คุณสามารถติดตั้ง Openstack ทั้งหมดลงในคอนเทนเนอร์ LXC เดียวได้แล้ว แต่ละบริการ "Openstack" (nova, swift ฯลฯ ) จะถูกติดตั้งลงในคอนเทนเนอร์ lxc "ซ้อนกัน" ภายในคอนเทนเนอร์ "master / parent"

ใช้เวลาสักครู่ในการติดตั้งทุกอย่าง แต่เมื่อเสร็จแล้วคุณจะได้ทดสอบสภาพแวดล้อม OpenStack บนแล็ปท็อปหรือเดสก์ท็อปของคุณเพื่อทำการทดสอบ

ถ้าคุณต้องการหยุด OpenStack คุณเพียงแค่ lxc-stop คอนเทนเนอร์หลัก / พาเรนต์เดียวกันเพื่อรีสตาร์ท Openstack

โปรดดู: คำแนะนำของ Openstack Single Installer


1

ใช่คุณสามารถทำภาชนะบรรจุ LXC ซ้อนกันและแม้จะมีความคิดเห็นที่ 1 มีเวลาและกรณีการใช้งานที่ภาชนะซ้อนอยู่มีประโยชน์อย่างแน่นอน ดู Stephane Graber's 10 part LXC blog โดยเฉพาะในส่วน Container Nesting -

ชุดที่ 10 ของ Stephane Graber's ที่ LXC

use-cases:สมมติว่าคุณต้องการสภาวะแวดล้อม LXC แบบหลายผู้เช่า สร้าง 1 คอนเทนเนอร์หลักสำหรับแต่ละบุคคลหรือองค์กรเพื่อให้แน่ใจว่าได้เปิดใช้งานการทำรังโดยเพิ่ม 2 cmds ไปยังไฟล์กำหนดค่าคอนเทนเนอร์ LXC ถัดไปในแต่ละคอนเทนเนอร์หลักสร้างคอนเทนเนอร์ย่อยที่ซ้อนกันซึ่งคุณติดตั้งแอปเดสก์ท็อปและอื่น ๆ ที่แต่ละกลุ่มต้องการ โปรดทราบว่าแม้ว่าเครือข่ายเริ่มต้นสำหรับคอนเทนเนอร์หลักจะเป็น 10.0.3.x แต่คอนเทนเนอร์ที่ซ้อนอยู่จะเป็น 10.0.4.x โดยค่าเริ่มต้น (คุณสามารถเปลี่ยนแปลงได้หากคุณต้องการ)

ประโยชน์ที่ใหญ่ที่สุดที่ฉันเคยใช้กับ Nested LXC คืออะไร หากคุณ lxc-stop ที่เก็บหลักและ lxc-clone มัน .. คุณโคลนไม่เพียง แต่ต้นแบบ แต่ทุก sub-container ... นี้เป็นประโยชน์สำหรับการสำรองข้อมูลอย่างรวดเร็ว วิธีการนี้มีประโยชน์ถ้าคุณต้องการทำการโยกย้ายแบบสดด้วย LXC ด้วย CRIU เมื่อคุณย้ายหนึ่งในคอนเทนเนอร์หลักไปยังเครื่องอื่น ... คุณกำลังย้ายมันจริง ๆ และคอนเทนเนอร์ที่ซ้อนกันทั้งหมดเช่นกัน

สุดท้ายสำหรับตัวอย่างที่ยอดเยี่ยมของการทำรัง LXC ใช้ Stephane Graber และคนอื่น ๆ สร้างแบบจำลองสำหรับ "อินเทอร์เน็ต" โดยใช้ LXC, BPG & OSPF ทั้งหมดใน 1 คอนเทนเนอร์ LXC ภายในตู้คอนเทนเนอร์ LXC "master or parent" LXC นั้นมีตู้คอนเทนเนอร์ LXC ซ้อนกัน 512 ตู้แต่ละตู้ที่เรียกใช้ Quagga สำหรับการกำหนดเส้นทาง BGP / OSPF ร่วมกันกับ "โหนด" อินเทอร์เน็ต 512 รายการจำลองอินเทอร์เน็ต การใช้งานนี้ถูกใช้ในการประชุมความปลอดภัย NSEC 2014 สำหรับผู้เข้าร่วมประชุมทุกคนเพื่อทดสอบความปลอดภัยในอินเทอร์เน็ต

แหล่งที่มาสำหรับสิ่งนี้อยู่ใน Githug ที่: 2014 NSEC LXC simulator สำหรับรหัส github อินเทอร์เน็ต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.