Có thể khởi động container LXC bên trong container LXC không?


21

Có thể khởi động container LXC bên trong một container LXC khác không?


1
Bạn có thực sự có một lý do thực sự để làm điều này? Xin nhớ rằng các câu hỏi ở đây nên là về các vấn đề thực tế mà bạn gặp phải .
Zoredache

6
Tôi nghĩ rằng, lxc sẽ có thể đơn giản hóa việc di chuyển VM (và sao lưu + khôi phục nữa). Nhưng tôi không chắc về các trường hợp, khi không có quyền truy cập vào hệ điều hành máy chủ (ví dụ vps giá rẻ).
Mikhail

Câu trả lời:


45

Tôi sẽ xua tan một vài huyền thoại ở đây.

Đây chỉ là một ý tưởng tồi. Tôi xin lôi. - Jacob Mar 5 lúc 20:30

Tôi không thấy đây là một ý tưởng tồi. Nó thực sự chỉ là một cái chroot bên trong một cái chroot. Một mặt, nó có thể có thể làm giảm hiệu suất theo một cách không đáng kể (không có gì so với việc chạy VM bên trong VM). Mặt khác, nó có khả năng an toàn hơn (ví dụ như cách ly với hệ thống máy chủ gốc và các thành phần của nó).

Bạn có thực sự có một lý do thực sự để làm điều này? Xin nhớ rằng các câu hỏi ở đây nên là về các vấn đề thực tế mà bạn gặp phải. - Zoredache ngày 5 tháng 3 lúc 21:51

Tôi đồng ý 100% với bình luận sau của người đăng. Hơn nữa, tôi nghĩ thật an toàn khi cho rằng tất cả những người đăng câu hỏi lên đây có thể nghĩ rằng họ có lý do thực sự để làm [nó] ..

Tôi nghĩ rằng, lxc sẽ có thể đơn giản hóa việc di chuyển VM (và sao lưu + khôi phục nữa). Nhưng tôi không chắc về các trường hợp, khi không có quyền truy cập vào hệ điều hành máy chủ (ví dụ vps giá rẻ). - Mikhail 6 tháng 3 lúc 11:17

Tôi thực sự bắt gặp câu hỏi này hồi tháng 6 khi tôi lần đầu tiên tham gia LXC cho các dự án PaaS / IaaS và tôi đặc biệt quan tâm đến khả năng cho phép người dùng mô phỏng môi trường đám mây cho mục đích phát triển.

LXCece. Chúng ta quá sâu. - Tom O'Connor ngày 6 tháng 3 lúc 22:46

Tôi đã cười một chút khi đọc cái này, nhưng đó không phải là trường hợp nào cả :)

Dù sao, cuối cùng tôi cũng đã thiết lập môi trường VirtualBox với bản cài đặt Ubuntu 12.04 LTS Server Edition sau khi đọc tất cả những điều này, nghĩ rằng điều này là có thể 100%. Sau khi cài đặt LXC, tôi đã tạo một thùng chứa mới và cài đặt LXC bên trong thùng chứa với apt-get. Hầu hết quá trình cài đặt tiến triển tốt, nhưng cuối cùng lại xảy ra lỗi do sự cố với gói cgroup-lite, công việc mới bắt đầu không khởi động được sau khi gói được cài đặt.

Sau một chút tìm kiếm, tôi đã xem qua bài viết hay này tại stgraber.org (những điều tốt đẹp đang ẩn dưới phần "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

Việc cài đặt chính sách AppArmor đó và khởi động lại daemon đã thực hiện thủ thuật (mặc dù vậy, đừng quên thay đổi phạm vi mạng!). Trên thực tế, tôi nghĩ rằng đoạn trích cụ thể đó rất quan trọng đến nỗi tôi đã nhân đôi nó @ http://pastebin.com/JDFp6cTB chỉ trong trường hợp bài viết không hoạt động.

Sau đó, sudo /etc/init.d/cgroup-lite startđã thành công và nó được thuận buồm xuôi gió.

Vì vậy, vâng, có thể bắt đầu một container LXC bên trong một container LXC khác :)


1
Cấu hình này khá nhiều vô hiệu hóa bảo vệ AppArmor (bằng cách chạy container không được kiểm soát). AppArmor là "nhằm bảo vệ máy chủ khỏi sự lạm dụng vô tình của đặc quyền bên trong container." Cấu hình này là khá nhiều mở máy chủ lxc được khai thác bởi bộ chứa lxc lồng nhau của bạn. Máy chủ LXC lồng nhau cũng có thể không bảo vệ các thùng chứa của nó. Nói chung, vô hiệu hóa bảo vệ này là không nên.
Reece45

Có cách tiếp cận an toàn khả thi nào để chạy lxc bên trong lxc không?
Mascarpone

10
Trường hợp sử dụng trong thế giới thực: Tôi có một container LXC chạy jenkins và tôi muốn jenkins có thể chạy các container LXC trước khi thực hiện các bài kiểm tra tích hợp. Các lựa chọn thay thế: chạy jenkins bên ngoài LXC hoặc tạo các thùng chứa LXC trên máy chủ thông qua ssh (xấu xí).
Giovanni Toraldo

13

Với Ubuntu 14.04 (đáng tin cậy), bạn chỉ cần thêm phần sau vào cấu hình bộ chứa chính:

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

tham khảo: https://help.ubfox.com/lts/serverguide/lxc.html#lxc-basic-usage (tìm kiếm "lồng nhau)

Đảm bảo rằng bạn đã cấu hình mạng trước khi khởi động để tránh tạm dừng lâu trước khi màn hình đăng nhập xuất hiện!

HTH


1
Hoạt động hoàn hảo - cảm ơn bạn! Đối với những người dùng như tôi, những người có thể chưa có cấu hình bộ chứa cha mẹ để đặt các dòng trên, thêm một tệp ~/.config/lxc/default.conftrong tài khoản của người dùng tạo bộ chứa và thêm hai dòng đó vào nó hoạt động tốt.
Brandon Rhodes

Trở lại năm 2017! Gần đây tôi phải thiết lập docker bên trong lxc cho một ứng dụng "Enterprise-y" - hoạt động tốt nhưng đừng hỏi ...
Lester Cheung

1

Ngoài ra ... bạn có biết bây giờ bạn có thể cài đặt TẤT CẢ Openstack vào một thùng chứa LXC không. Mỗi "dịch vụ" của Openstack (nova, swift, v.v.) sau đó đều được cài đặt vào các thùng chứa lxc "lồng nhau" bên trong thùng chứa "chính / phụ huynh".

Mất một lúc để cài đặt mọi thứ nhưng khi hoàn tất, bạn có một môi trường OpenStack thử nghiệm tuyệt vời trên máy tính xách tay hoặc máy tính để bàn để thử nghiệm.

Nếu bạn muốn dừng OpenStack, bạn chỉ cần dừng lxc-container container chính / cha để khởi động lại Openstack.

xem: Hướng dẫn cài đặt đơn Openstack


1

Có, bạn có thể thực hiện các container LXC lồng nhau và mặc dù nhận xét đầu tiên, vẫn có những trường hợp và trường hợp sử dụng trong đó các container Nested chắc chắn hữu ích. Xem blog LXC gồm 10 phần của Stephane Graber nhưng cụ thể là phần Container Nesting -

Series 10 phần của Stephane Graber trên LXC

trường hợp sử dụng: Giả sử bạn muốn có một môi trường LXC nhiều bên thuê. Tạo 1 thùng chứa chính cho mỗi người hoặc tổ chức, đảm bảo bật Nesting bằng cách thêm 2 cmds vào tệp cấu hình bộ chứa LXC. Tiếp theo trong mỗi thùng chứa Master, hãy tạo các thùng chứa phụ lồng nhau của bạn, nơi bạn cài đặt các ứng dụng, máy tính để bàn, vv mà mỗi nhóm yêu cầu. LƯU Ý rằng mặc dù mạng mặc định cho các thùng chứa Master sẽ là 10.0.3.x, các thùng chứa lồng nhau sẽ là 10.0.4.x theo mặc định (bạn có thể thay đổi nếu cần).

Ưu điểm lớn nhất tôi đã sử dụng Nested LXC là gì? Nếu bạn lxc dừng container Master và lxc-clone nó .. bạn không chỉ sao chép Master mà tất cả các container phụ ... điều này rất tiện cho việc sao lưu nhanh. Cách tiếp cận này cũng hữu ích nếu bạn muốn thực hiện di chuyển trực tiếp LXC với CRIU. Khi bạn di chuyển một trong các thùng chứa Master sang Máy khác ... bạn thực sự đang di chuyển nó và tất cả các container được lồng vào nhau.

Cuối cùng, để có một ví dụ thú vị về lồng nhau LXC, hãy sử dụng Stephane Graber và những người khác đã xây dựng một trình giả lập cho "Internet" bằng cách sử dụng LXC, BPG & OSPF tất cả trong 1 container LXC. Bên trong thùng chứa LXC "chính hoặc cha mẹ" 1 LXC đó có 512 thùng chứa LXC lồng nhau, mỗi thùng chứa Quagga đang chạy để định tuyến BGP / OSPF. Cùng nhau, 512 "nút" Internet mô phỏng Internet. Việc triển khai này đã được sử dụng tại hội nghị bảo mật NSEC 2014 cho tất cả những người tham dự để thử nghiệm bảo mật trên Internet.

Nguồn cho việc này là trên Githug tại: Trình giả lập NSEC LXC 2014 cho mã github Internet

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.