- LXC คืออะไร
- มีประโยชน์อย่างไร?
- ความแตกต่างระหว่าง LXC และการจำลองเสมือนทั่วไปคืออะไร
คำตอบ:
หากโดย "Plain English" คุณหมายถึงคนที่ไม่มีเทคนิคความแตกต่างนั้นไม่สามารถอธิบายได้อย่างง่ายดาย ผมนั้นดีเกินกว่าที่จะแตกโดยไม่ได้รับการพิจารณาอย่างรอบคอบ
หากโดย "ธรรมดาภาษาอังกฤษ" คุณหมายถึงประเภทการจัดการที่พูดคุยกับผู้คนด้านเทคนิคและอย่างน้อยก็มีความเข้าใจในหัวข้อทางเทคนิคที่ผ่านฉันส่ง verbage ต่อไปนี้:
มันเป็นรูปแบบที่แตกต่างของ virtualization
ถ้าคุณดูที่ VMWare ESXi นั่นคือไฮเปอร์ไวเซอร์ที่ใช้งานสิ่งที่เรียกว่าการจำลองเสมือนแบบเต็ม มีเลเยอร์เล็ก ๆ ระหว่างระบบเสมือนจริงที่ทำงานอยู่ด้านบนของฮาร์ดแวร์ มีการจำลองเสมือนสำหรับฮาร์ดแวร์แบบเต็มรูปแบบโดยที่ระบบปฏิบัติการที่ทำงานในเครื่องเสมือนนั้นเป็นอิสระอย่างเต็มที่จากไฮเปอร์ไวเซอร์เองและนำเสนอพร้อมกับฮาร์ดแวร์ทั้งหมดที่คาดหวัง
ก้าวไปอีกขั้นและดูบางอย่างเช่น VMWare Player, Workstation, ESX (ไม่ใช่ ESXi) หรือ VMWare Server และคุณมีระบบปฏิบัติการเต็มรูปแบบที่ให้บริการบทบาทไฮเปอร์ไวเซอร์ อย่างไรก็ตามเครื่องเสมือนยังคงมีฮาร์ดแวร์เสมือนมากมาย
อีกวิธีคือการทำเวอร์ชวลไลเซชันซึ่ง Xen ตามมาค่อนข้างนาน ในรูปแบบของการจำลองเสมือนนี้ระบบปฏิบัติการของแขกรับทราบว่ามีการทำเสมือนจริงและได้รับการแก้ไขให้ทำงานในสภาพแวดล้อมนั้น บางครั้งความต้องการทั้งหมดนี้เป็นไดรเวอร์สำหรับการจำลองเสมือนแบบพิเศษ ในบางครั้งจำเป็นต้องทำการเปลี่ยนแปลงเคอร์เนลทันที
LXC หรือ Linux Containers เป็นอีกก้าวหนึ่ง ในกรณีนี้มีการทำงานหลายกรณีของระบบปฏิบัติการที่แน่นอนเดียวกัน เคอร์เนลอาจเหมือนกัน แต่ผู้ใช้หลายคนกำลังทำงานสำหรับแต่ละคอนเทนเนอร์ระบบปฏิบัติการ แต่ละคอนเทนเนอร์อาจมีหรือไม่มีระบบไฟล์ที่แตกต่างกัน
ภาชนะบรรจุเสนอวิธีในการแยกการรักษาความปลอดภัยที่แข็งแกร่งระหว่างกระบวนการในลักษณะที่ไม่พร้อมใช้งานในระบบที่มีพื้นที่ผู้ใช้เดียวกัน ระบบปฏิบัติการที่คล้าย Unix นั้นมี 'chroot jail' มาระยะหนึ่งแล้ว แต่มันก็ไม่ได้แยกกระบวนการหรือความสามารถในการ จำกัด ทรัพยากรที่ใช้ในกระบวนการในคุก ด้วยการทำให้กระบวนการการใช้ทรัพยากรเช่นนั้นเป็นคอนเทนเนอร์สามารถถูก จำกัด สามารถกำหนดที่อยู่ IP แบบแยกให้กับพวกเขาได้และช่องโหว่ด้านความปลอดภัยที่ใช้ประโยชน์จากช่องว่างของผู้ใช้นั้นจะอยู่ในส่วนที่เหลือของระบบ
คุณจะใช้ LXC กับ virtualization ประเภทอื่นที่ไหน มันขึ้นอยู่กับ แต่ LXC ควรให้การลงโทษเสมือนน้อยลงกว่าวิธีการเสริมพลังแบบอื่น ๆ เพราะมันเป็นเคอร์เนลเดียวกันที่ไกล่เกลี่ยการเรียก userpace ทั้งหมดแทนที่จะเป็นไฮเปอร์ไวเซอร์ที่แกล้งทำเป็นฮาร์ดแวร์ให้กับภาพ OS คาดหวังว่าจะพูดคุยกับฮาร์ดแวร์ทางกายภาพ ดังนั้นหากคุณมีการประมวลผลจำนวนมากที่ต้องการระบบปฏิบัติการรุ่นเดียวกันและสามารถรีบูทได้ในเวลาเดียวกันสำหรับการอัพเดต LXC สามารถมอบวิธีที่ประหยัดต้นทุนในการดำเนินการทั้งหมดอย่างปลอดภัยและด้วยการจัดการทรัพยากร
LXC เป็นวิธีการแยกระบบ / กระบวนการที่เคอร์เนล ระบบถูกล็อคใน "คอนเทนเนอร์" เพื่อที่จะไม่สามารถโต้ตอบกับสิ่งใดนอกคอนเทนเนอร์นั้นได้ ดังนั้นชื่อ Linux Containers
มันอาจมีประโยชน์สำหรับหลาย ๆ สิ่งซึ่งหนึ่งในนั้นก็คือการแยกบริการที่ทำงานอยู่บนเครื่องออก หากหนึ่งในบริการเหล่านี้ถูกบุกรุกระบบโฮสต์ (รวมถึงบริการอื่น ๆ ที่ทำงานใน LXC ของตนเอง) จะไม่ได้รับผลกระทบ มันยังสามารถใช้เป็นวิธีใบ้เพื่อให้ผู้ใช้แต่ละคนสามารถเข้าถึงระบบของตนเองได้โดยไม่ต้องกังวลว่าพวกเขาจะต้องโต้ตอบกัน
การจำลองเสมือน "ทั่วไป" อื่น ๆ ส่วนใหญ่กำหนดค่าใช้จ่ายทรัพยากรจำนวนมากเนื่องจากจำเป็นต้องจำลองอุปกรณ์ฮาร์ดแวร์ LXC ไม่ต้องการการจำลองใด ๆ สำหรับอุปกรณ์ฮาร์ดแวร์เนื่องจาก LXC แต่ละตัวจะถูก จำกัด / ไม่สามารถเข้าถึงฮาร์ดแวร์ได้โดยตรง แต่ละระบบจะ "ทำงาน" บนโฮสต์ แต่ไม่สามารถส่งผลกระทบต่อสิ่งใดนอกคอนเทนเนอร์ การทำเวอร์ชวลไลเซชันประเภทนี้เรียกว่าการทำเวอร์ชวลไลเซชันระดับ OS (google it) ซึ่งหมายถึงค่าใช้จ่ายน้อยมาก / ไม่มีอยู่จริงสำหรับการใช้งาน Linux Container ดังนั้นคุณสามารถมี LXC หลายร้อยเครื่องในเครื่องที่กำหนด แต่คุณจะหมดทรัพยากรอย่างรวดเร็วโดยใช้ซอฟต์แวร์เครื่องเสมือน "ธรรมดา"
จริงๆแล้วฉันคุ้นเคยกับLinux-Vserver มากแต่ทฤษฎีก็เหมือนกันมาก
วิธีที่ง่ายที่สุดในการทำความเข้าใจคือการเรียนรู้สิ่งที่ chroot ทำ chroot ช่วยให้คุณ "ลงชื่อเข้าใช้" โฟลเดอร์ของระบบเหมือนยูนิกซ์ราวกับว่ามันเป็นระบบเต็มรูปแบบในสิทธิของตนเอง ในคำอื่น ๆ :
ถ้าคุณมี:
/
/boot
/etc
/home
...
เป็นต้นจากนั้นคุณสามารถเพิ่มไดเรกทอรี some_new_install:
/
/some_new_install
/boot
/etc
/home
/usr
...
/boot
/etc
/home
/usr
...
และลงชื่อเข้าใช้ / some_new_install จากนั้น / some_new_install / etc เป็นใหม่ / etc และ / etc ต้นฉบับถูกซ่อนอยู่และ (ส่วนใหญ่) ไม่สามารถเข้าถึงได้ / usr / bin อาจแตกต่างจากต้นฉบับด้วยโปรแกรมที่แตกต่างกัน MySQL อาจเป็นโปรแกรมเดียวกันใน / usr / bin / mysql แต่มีข้อมูลต่างกันใน / var / lib / mysql
ระบบไฟล์ถูกทำเสมือนจริง คุณแยกระบบไฟล์ดั้งเดิมของคุณแล้วแบ่งปันทรัพยากรแยกทรัพยากรเหล่านั้นออกจากทรัพยากรเสมือนจริงอื่น ๆ
อันนี้สวยมาก แทนที่จะเรียกใช้สำเนาเสมือนจริงใหม่ทั้งหมดของยูนิกซ์เพียงแค่เรียกใช้โปรแกรมพิเศษหนึ่งโปรแกรมคุณสามารถข้ามไปยังระบบไฟล์เสมือนและเรียกใช้บนเคอร์เนลเดียวกันไลบรารีเดียวกัน (ถ้าคุณใช้ symlink) ฯลฯ มันมีประสิทธิภาพมากกว่า เช่น Xen หรือ VirtualBox
ปัญหาคือว่าถ้าหนึ่งในโปรแกรมเหล่านั้นพูดว่า MySQL ไปถั่วและเริ่มใช้ซีพียูของคุณทั้งหมดและการแลกเปลี่ยนบนดิสก์ก็จะยังคงส่งผลกระทบต่อส่วนที่เหลือของเครื่องเพราะระบบไฟล์เท่านั้น virtualized ไม่ใช่ซีพียู หรือประสิทธิภาพของดิสก์พื้นฐาน ที่อยู่ IP และพอร์ตไม่ได้ถูกจำลองเสมือนดังนั้นหากสองโปรแกรมส่งข้อมูลบนเครือข่ายพวกเขาจะทำเช่นนั้นจาก IP เดียวกันอาจก่อให้เกิดความขัดแย้ง เช่นเดียวกันหาก mysql สองชุดพยายามฟังพอร์ตหนึ่งชุดที่สองจะล้มเหลวเนื่องจากพอร์ตนั้นใช้งานอยู่
LXC แก้ปัญหานี้ด้วยการจำลองเสมือนจริงไม่เพียง แต่ระบบไฟล์ แต่ยังรวมถึงเครือข่าย ips / พอร์ต / อินเตอร์เฟส, CPU, การใช้หน่วยความจำและอื่น ๆ
LXC ไม่ค่อยปลอดภัยเท่ากับเครื่องเสมือนจริง แต่โดยทั่วไปมันเป็นโซลูชั่นที่เหนือกว่า ท้ายที่สุดระบบปฏิบัติการทั้งหมดเกี่ยวกับการแบ่งปันทรัพยากรอย่างปลอดภัย ส่วนใหญ่แล้วมันโง่ที่จะเรียกใช้ระบบปฏิบัติการหลายระบบเพื่อทำเช่นนั้น - เราเพียงแค่ต้องการระบบปฏิบัติการที่ดีกว่าโดยมีการแยกระบบที่ดีกว่า นั่นคือสิ่งที่ LXC และเครื่องมือที่คล้ายกันมอบให้