2012-11-21 2 views
9

컨테이너를 만들지 않고 프로세스 그룹을 사용하는 자원 관리에 LXC를 사용할 수있는 방법이 있습니까? 나는 하드웨어 자원 관리에만 관심이있는 샌드 박스 내부에서 임의의 코드를 실행하는 서비스를 개발 중이다. 나는 어떤 chrooting도 원하지 않는다. 이 프로세스 그룹이 주 파일 시스템에 액세스하기를 원합니다.chroot가없는 LXC

나는 lxc가 가볍다 고 들었지만 모든 예제는 모든 lxc 프로세스에 대해 새로운 컨테이너 (즉 완전한 OS를 가진 dir)를 생성한다. 이 방법이 다른 VM 솔루션보다 훨씬 가볍지는 않습니다.

LXC를 사용하여 여러 프로세스 그룹을 제어하고 관리 할 수 ​​있습니다. 각 프로세스마다 별도의 컨테이너를 만들지 않아도됩니까?

답변

20

LXC는 모 놀리 식 시스템이 아닙니다. 이 도구는 다양한 방법으로 프로세스를 격리하는 데 사용할 수있는 커널 기능 모음과 이러한 모든 기능을 함께 사용하여 본격적인 컨테이너를 만드는 사용자 공간 도구입니다. 그러나 개별 기능은 LXC 없이도 독자적으로 사용할 수 있습니다. 또한 LXC는 chroot를 필요로하지 않으며, chroot를 지정해도 호스트 시스템의 디렉토리를 컨테이너에 바인드 마운트하여 호스트와 컨테이너 사이의 특정 디렉토리 트리를 공유 할 수 있습니다.

예를 들어 cgroup은 LXC에서 컨테이너에 대한 자원 제한을 설정하는 데 사용됩니다. 그러나 이들은 LXC 도구를 전혀 사용하지 않고 프로세스 그룹에 대한 자원 제한을 설정하는 데 사용할 수 있습니다. /sys/fd/cgroup/memory 또는 을 직접 조작하여 프로세스가 사용하도록 허용 된 메모리 또는 CPU의 양을 제한하는 cgroup에 넣을 수 있습니다. 또는 systemd을 사용하는 시스템에있는 경우 MemoryLimit=200M 또는 .service 파일의 특정 서비스에 대한 프로세스 그룹에 대한 메모리 제한을 제어 할 수 있습니다.

LXC를 사용하여 경량 자원 관리를 수행하려는 경우 chroot 사용 여부에 관계없이이를 수행 할 수 있습니다. LXC 컨테이너를 시작할 때 격리 할 리소스를 선택할 수 있습니다. 따라서 가상화 된 네트워크 만있는 컨테이너를 만들 수 있습니다. 또는 메모리 제한이 있지만 호스트와 다른 모든 것을 공유하는 컨테이너 일 수 있습니다. 분리 될 유일한 것은 컨테이너의 구성 파일에 지정된 것입니다. 예를 들어, lxc에는 네트워크를 격리하는 몇 가지 예제 컨테이너 정의가 함께 제공됩니다. 루트 파티션과 거의 모든 것을 호스트와 공유합니다. 여기가 어떤 네트워크 인터페이스가 없습니다 제외하고는 호스트 시스템과 동일한 컨테이너를 실행하는 방법은 다음과 같습니다

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

하면 일부 파일이 호스트와 공유 할 수 있지만 다른 사람이, 당신은 두 가지 선택이 원하는 경우를; 당신은 공유 루트 디렉토리를 사용할 수 있고, 컨테이너에서 다른 파일에 마운트 할 수 있습니다. 또는 chroot를 사용할 수 있지만 공유하려는 파일을 컨테이너에 마운트하십시오.

예를 들어 /home을 제외한 모든 것을 호스트와 공유하는 컨테이너의 구성은 다음과 같습니다.

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

을 아니면 완전히 다른 뿌리를 가지고 있지만, 여전히 /usr 같은 일부 디렉토리를 공유하려는 경우, 당신은 디렉토리에 몇 개의 디렉토리를 마운트에 결합 할 수 있으며, : 대신 컨테이너 내에서 /home 이상 /home/me/fake-home을 마운트에게-결합 그것을 파일 시스템의 루트로 사용하십시오.

많은 옵션이 있으므로 필요에 따라 하나의 구성 요소, 두 개 이상 또는 많은 LXC 지원을 격리 할 수 ​​있습니다.