LXC 컨테이너 내에서 LXC 컨테이너를 시작할 수 있습니까?


21

다른 LXC 컨테이너 내에서 LXC 컨테이너를 시작할 수 있습니까?


1
실제로이 작업을 수행 할 실제적인 이유가 있습니까? 여기의 질문은 실제 겪고있는 문제 에 관한 것이어야합니다 .
Zoredache

6
lxc는 VM 마이그레이션을 단순화하고 백업 + 복구도 가능해야한다고 생각합니다. 그러나 호스트 OS에 액세스 할 수없는 경우 (예 : 저렴한 vps)에 대해서는 확실하지 않습니다.
Mikhail

답변:


45

나는 여기서 몇 가지 신화를 없애려고합니다.

이것은 단지 나쁜 생각입니다. 죄송 해요. – 야곱 3 월 5 일 20:30

이것이 어떻게 나쁜 생각인지 알지 못합니다. 그것은 실제로 chroot 안의 chroot 일뿐입니다. 한편으로는 무시할 수있는 방식으로 성능을 저하시킬 수 있습니다 (VM 내에서 VM을 실행하는 것과 비교할 때 아무것도 없음). 반면에 더 안전 할 가능성이 높습니다 (예 : 루트 호스트 시스템 및 구성 요소에서 더 격리 됨).

실제로이 작업을 수행 할 실제적인 이유가 있습니까? 여기의 질문은 실제 직면 한 문제에 대한 것이어야합니다. – Zoredache 3 월 5 일 21:52

포스터의 다음 의견에 100 % 동의합니다. 또한, 여기에 질문을 올리는 모든 사람은 그들이해야 할 실제 이유가 있다고 생각한다고 생각하는 것이 안전하다고 생각합니다.

lxc는 VM 마이그레이션을 단순화하고 백업 + 복구도 가능해야한다고 생각합니다. 그러나 호스트 OS에 액세스 할 수없는 경우 (예 : 저렴한 vps)에 대해서는 확실하지 않습니다. – 11 월 17 일 미하일 3 월 6 일

실제로 PaaS / IaaS 프로젝트를 위해 LXC에 처음 뛰어 들었을 때 6 월에이 질문을 다시 접하게되었으며, 특히 사용자가 개발 목적으로 클라우드 환경을 에뮬레이트 할 수있는 능력에 관심이있었습니다.

LXCeption. 우리는 너무 깊다. – 톰 오코너 3 월 6 일 22:46

나는 이것을 읽었을 때 약간 웃었다. 그러나 전혀 그렇지 않다. :)

어쨌든, 나는이 모든 것을 읽은 후 Ubuntu 12.04 LTS Server Edition의 재고 설치로 VirtualBox 환경을 설정했으며 이것이 100 % 가능하다고 생각했습니다. LXC를 설치 한 후 새 컨테이너를 만들고 컨테이너 안에 apt-get을 사용하여 LXC를 설치했습니다. 대부분의 설치가 잘 진행되었지만 패키지를 설치 한 후 시작 작업이 시작되지 않은 cgroup-lite 패키지의 문제로 인해 결국 오류가 발생했습니다.

약간의 검색을 한 후 stgraber.org 에서이 훌륭한 기사를 보았습니다 ( 좋은 내용 은 "컨테이너 중첩"섹션 아래에 숨겨져 있습니다).

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 정책을 설치하고 데몬을 다시 시작하면 트릭이 이루어졌습니다 (네트워크 범위를 변경하는 것을 잊지 마십시오!). 사실, 나는 특정 조각 내가 그것을 @ 미러링하는 것이 매우 중요하다고 생각 http://pastebin.com/JDFp6cTB을 기사 이제까지 오프라인 단지의 경우.

그 후, sudo /etc/init.d/cgroup-lite start성공했고 그것은 원활한 항해였습니다.

따라서 다른 LXC 컨테이너 내에서 LXC 컨테이너를 시작할 수 있습니다 :)


1
이 구성은 컨테이너를 무제한으로 실행하여 AppArmor 보호를 거의 비활성화합니다. AppArmor는 "컨테이너 내부의 우발적 인 권한 오용으로부터 호스트를 보호하기위한 것입니다." 이 구성은 중첩 된 lxc 컨테이너에 의해 악용 될 lxc 호스트를 거의 개방하고 있습니다. 중첩 된 LXC 호스트는 컨테이너를 보호하지 못할 수도 있습니다. 일반적으로이 보호 기능을 비활성화하지 마십시오.
Reece45

lxc 내부에서 lxc를 실행하기위한 안전한 접근 방법이 있습니까?
Mascarpone

10
실제 사용 사례 : jenkins를 실행하는 LXC 컨테이너가 있으며 통합 테스트를 실행하기 전에 jenkins가 LXC 컨테이너를 실행할 수 있기를 원합니다. 대안 : LXC 외부에서 jenkins를 실행하거나 ssh (못생긴)를 통해 호스트에서 LXC 컨테이너를 만듭니다.
Giovanni Toraldo

13

Ubuntu 14.04 (trusty)를 사용하면 상위 컨테이너 구성에 다음을 간단히 추가 할 수 있습니다.

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

2017 년으로 돌아 왔습니다! 최근에 "enterprise-y"앱을 위해 lxc 내부에 도커를 설정해야합니다. 잘 작동하지만 묻지 않습니다 ...
Lester Cheung

1

또한 ... 이제 모든 Openstack을 단일 LXC 컨테이너에 설치할 수 있다는 것을 알고 계셨습니까? 각 Openstack "서비스"(nova, swift 등)는 모두 "마스터 / 부모"컨테이너 내부의 "중첩 된"lxc 컨테이너에 설치됩니다.

모든 것을 설치하는 데 시간이 걸리지 만 완료되면 랩톱이나 데스크탑에서 테스트 할 OpenStack 환경을 테스트해야합니다.

OpenStack을 중지하려면 마스터 / 부모 컨테이너를 lxc-stop 중지하여 Openstack을 다시 시작하십시오.

참조 : Openstack Single Installer 지침


1

예, 중첩 LXC 컨테이너를 수행 할 수 있으며 첫 번째 의견에도 불구하고 중첩 컨테이너가 확실히 유용한 시간과 사용 사례가 있습니다. Stephane Graber의 10 부 LXC 블로그 (특히 컨테이너 중첩-섹션)를 참조하십시오.

LXC에 관한 Stephane Graber의 10 부 시리즈

유스 케이스 : 멀티 테넌트 LXC 환경을 원한다고 가정하십시오. LXC 컨테이너 구성 파일에 2 개의 cmd를 추가하여 각 개인 또는 조직에 대해 1 개의 마스터 컨테이너를 만듭니다. 다음으로 각 마스터 컨테이너에서 각 그룹에 필요한 앱, 데스크톱 등을 설치할 중첩 된 하위 컨테이너를 만듭니다. 마스터 컨테이너의 기본 네트워크는 10.0.3.x이지만 중첩 컨테이너는 기본적으로 10.0.4.x입니다 (필요한 경우 변경할 수 있음).

Nested LXC를 사용했을 때 가장 큰 장점은 무엇입니까 ? 마스터 컨테이너를 lxc-stop하고 lxc-clone하면 마스터뿐만 아니라 모든 하위 컨테이너를 복제 할 수 있습니다. 이는 빠른 백업에 유용합니다. 이 방법은 CRIU를 사용하여 LXC 라이브 마이그레이션을 수행하려는 경우에도 유용합니다. 마스터 컨테이너 중 하나를 다른 시스템으로 마이그레이션하면 실제로 해당 컨테이너와 모든 중첩 된 컨테이너도 마이그레이션됩니다.

마지막으로 LXC 중첩의 멋진 예를 위해 Stephane Graber 등이 LXC, BPG 및 OSPF를 모두 사용하여 1 개의 LXC 컨테이너에 "인터넷"용 시뮬레이터를 구축했습니다. 1 개의 LXC "마스터 또는 부모"LXC 컨테이너 안에는 BGP / OSPF 라우팅을 위해 Quagga를 실행하는 512 개의 중첩 된 LXC 컨테이너가 있습니다. 512 개의 인터넷 "노드"가 함께 인터넷을 시뮬레이션합니다. 이 구현은 모든 참석자가 인터넷에서 보안을 실험하기 위해 2014 NSEC 보안 컨퍼런스에서 사용되었습니다.

이 소스는 Githug에 있습니다 : 인터넷 github 코드를위한 2014 NSEC LXC 시뮬레이터

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.