2012-11-21 26 views
9

Có cách nào để sử dụng LXC để quản lý tài nguyên bằng cách sử dụng các nhóm quy trình mà không cần tạo vùng chứa không? Tôi đang làm việc trên một dịch vụ chạy mã tùy ý bên trong một sandbox, mà tôi chỉ quan tâm đến quản lý tài nguyên phần cứng. Tôi không muốn chroot; Tôi chỉ muốn các nhóm quá trình này có quyền truy cập vào hệ thống tệp chính.LXC không có chroot

Tôi được thông báo rằng lxc là trọng lượng nhẹ, nhưng tất cả các ví dụ mà tôi thấy tạo vùng chứa mới (tức là một thư mục có hệ điều hành đầy đủ) cho mọi quy trình lxc. Tôi không thực sự thấy cách này nhẹ hơn nhiều so với bất kỳ giải pháp VM nào khác.

Vì vậy, có cách nào để LXC có thể được sử dụng để kiểm soát và quản lý nhiều nhóm quy trình, mà không tạo các vùng chứa riêng biệt cho từng và mỗi nhóm trong số chúng?

Trả lời

20

LXC không phải là hệ thống nguyên khối. Đó là một tập hợp các tính năng hạt nhân có thể được sử dụng để cô lập các quy trình theo nhiều cách khác nhau và một công cụ không gian người dùng để sử dụng tất cả các tính năng này cùng nhau để tạo các thùng chứa chính thức. Nhưng các tính năng riêng lẻ vẫn có thể sử dụng được mà không có LXC. Hơn nữa, LXC không yêu cầu chroot, và ngay cả khi bạn cho nó một chroot, bạn có thể gắn kết các thư mục từ hệ thống máy chủ vào thùng chứa, chia sẻ những cây thư mục cụ thể giữa máy chủ và vùng chứa.

Ví dụ, các nhóm cgroup được LXC sử dụng để đặt giới hạn tài nguyên trên vùng chứa. Nhưng chúng có thể được sử dụng để thiết lập giới hạn tài nguyên trên các nhóm quy trình mà không cần sử dụng các công cụ LXC. Bạn có thể thao tác trực tiếp /sys/fd/cgroup/memory hoặc để đặt quá trình vào các nhóm giới hạn số lượng bộ nhớ hoặc CPU mà chúng được phép sử dụng. Hoặc nếu bạn đang sử dụng hệ thống sử dụng systemd, bạn có thể kiểm soát giới hạn bộ nhớ cho một nhóm quy trình bằng cách sử dụng MemoryLimit=200M hoặc các loại tương tự trong tệp .service cho một dịch vụ nhất định.

Nếu bạn muốn sử dụng LXC để quản lý tài nguyên nhẹ, bạn có thể làm điều đó có hoặc không có chroot. Khi bắt đầu một thùng chứa LXC, bạn có thể chọn tài nguyên nào bạn muốn tách biệt; để bạn có thể tạo vùng chứa chỉ với mạng ảo hóa và không có gì khác; hoặc một vùng chứa chỉ giới hạn bộ nhớ, nhưng chia sẻ mọi thứ khác với máy chủ lưu trữ. Những thứ duy nhất sẽ bị cô lập là những thứ được chỉ định trong tệp cấu hình cho vùng chứa của bạn. Ví dụ: lxc các tàu có một số định nghĩa vùng chứa mẫu ví dụ chỉ tách mạng; họ chia sẻ một phân vùng gốc và hầu hết mọi thứ khác với máy chủ lưu trữ. Dưới đây là cách chạy một vùng chứa giống hệt với hệ thống máy chủ ngoại trừ nó không có giao diện mạng:

sudo lxc-execute -n foo -f /usr/share/doc/lxc/examples/lxc-no-netns.conf /bin/bash 

Nếu bạn muốn một số tệp được chia sẻ với máy chủ, nhưng không muốn chia sẻ với bạn, bạn có hai lựa chọn; bạn có thể sử dụng thư mục gốc được chia sẻ và gắn kết các tệp mà bạn muốn khác nhau trong vùng chứa; hoặc bạn có thể sử dụng chroot, nhưng gắn kết các tệp mà bạn muốn chia sẻ trong vùng chứa.

Ví dụ: đây là cấu hình cho vùng chứa chia sẻ mọi thứ với máy chủ ngoại trừ /home; nó thay vì ràng buộc gắn kết /home/me/fake-home qua /home trong container:

lxc.mount.entry = /home/me/fake-home /home none rw,bind 0 0 

Hoặc nếu bạn muốn có một gốc hoàn toàn khác nhau, nhưng vẫn chia sẻ một số thư mục như /usr, bạn có thể ràng buộc gắn kết một vài thư mục vào một thư mục, và sử dụng nó như là gốc của hệ thống tập tin.

Vì vậy, bạn có nhiều tùy chọn và có thể chọn cách ly chỉ một thành phần, nhiều hơn một hoặc nhiều như LXC hỗ trợ, tùy thuộc vào nhu cầu của bạn.