btrfs에서 LXC 컨테이너를 처리하는 올바른 방법


11

lxc가 설치된 하나의 서버와 기본 img로 사용되는 lxc 컨테이너가 있다고 가정 해 봅시다 /var/lib/lxc/ubuntu_base. 간단하게하기 위해 기본 img를 복사 한 후 구성 변경을 잊어 버리자.

어떤 사람들 은 새로운 컨테이너를 만들기 위해 서브 볼륨과 스냅 샷을 사용하라고 제안하지만, 비슷한 결과로 cp --reflink를 쉽게 수행 할 수 있습니다.

그렇다면 여러 컨테이너를 관리하는 적절한 방법은 무엇입니까?

  • 스냅 샷

이 방법이 가장 좋지만 lxc-destroy와 같은 명령은 디렉토리를 삭제할 수 없으므로 작동하지 않습니다.

btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • reflink를 가진 cp

이 또는 스냅 샷간에 성능 차이가 있는지 확실하지 않습니다.

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • 또는 내가 모르는 다른 더 좋은 방법이 있습니까?

편집하다:

나는 reflink 옵션을 본 적이 한 가지는 다른 사람이 실행중인 경우 때문에, 기본 컨테이너를 삭제할 수있다 /proc및이 /dev참조가 항상 동일 SE, 장착 및 변경되지 않습니다. 그러나 coppied 컨테이너를 모두 종료하면 도움이 될 것 같습니다.


btrfs 스냅 샷 기능을 사용하여 새 컨테이너를 만들었으며 잘 작동합니다 (꽤 빠른 프로비저닝 등). 그러나 btrfs에는 서브 볼륨 당 페이지 캐시가 있으므로 스냅 샷을 사용하는 것이 디스크 공간 효율적이지만 스냅 샷을 사용하면 실제로 동일한 바이너리의 메모리에 여러 복사본이 생성 될 수 있습니다.
David Goodwin

답변:


2

나는 Ubuntu LTS 14에 있고 다음을 처음으로 실행했으며 매력처럼 작동했습니다.

lxc-stop -n ubuntu_base
lxc-clone -o ubuntu_base -n ubuntu_base_c1 -s
lxc-start -n ubuntu_base_c1 -d # make changes if needed
lxc-stop -n ubuntu_base_c1
lxc-snapshot -n ubuntu_base_c1

백업 저장소가 btrfs 인 경우 lxc-clone과 함께 -s를 사용하면 스냅 샷이 생성됩니다 (귀하의 경우).

새로운 클론 / 스냅 샷 확인

lxc-ls -f
btrfs subvolume list /var/lib/lxc

희망이 도움이됩니다!


1
당신이 필요로하는 요즘 지정할 수 있습니다 btrfs를 실행할 때 백업 저장소 등을 LXC 만들 거나 LXC - 복제가 당신에게 줄 것이다 overlayfs을 대신.
Lester Cheung

새로운 "가벼운"컨테이너를 만들려면 -s옵션 덕분에 첫 번째 두 줄이 충분하고 (lxc-stop 및 lxc-clone) 마지막 세 줄 (lxc_start, lxc_stop, lxc_snapshot)은 미래의 컨테이너 진화를 관리하는 도우미 프로세스. 맞습니까?
lalebarde

3

lxc에 btrfs 하위 볼륨을 사용하려면에 옵션 user_subvol_rm_allowed을 추가해야 합니다 /etc/fstab. 하나의 fstab 파일에서 추출한 예 :

UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0

이 옵션을 사용하면 root가 아닌 subvol을 일반 사용자 만 제거 할 수 있습니다. 이 기능은 스냅 샷이 btrfs 하위 볼륨에있을 때 lxc에서 사용됩니다.


3

기본 이미지의 크기에 따라 달라집니다. 아마도 새로운 컨테이너를 lxc로 만들고 Salt / Puppet 등을 사용하여 컨테이너를 프로비저닝 하고 비교적 큰 컨테이너 (예 : 도구가 많이 설치되고 구성된 dev 컨테이너)에 lxc-clone 만 제공 합니다.

참고 LXC - 복제가 원본과 동일한 백업 저장소를 사용합니다. 하위 볼륨을 사용하려면 "-B btrfs"로 컨테이너를 작성해야합니다. 예를 들면 다음과 같습니다.

lxc-create -B btrfs -n mycontainer -t ubuntu

그런 다음 다음을 사용하여 복제하십시오.

lxc-clone -s mycontainer mynewcontainer

zfs를 사용하여 컨테이너를 저장 --zfsroot하는 경우 lxc-create에 추가 옵션이 있으므로 기본 "tank"이외의 zpool을 선택할 수 있습니다. 예를 들면 다음과 같습니다.

lxc-create -B zfs --zfsroot=data/lxc

공유하고 즐기십시오!


나는 BTRFS와 함께 데비안 wheezy에 있습니다. 옵션 -B btrfs이 기본적으로 사용되는 것 같습니다. 데비안이 BTRFS로 설정되어 있다고 가정합니다. 실제로이 옵션을 사용하지 않고 첫 번째 컨테이너 (32 비트 데비안 wheezy)를 만들고 하위 볼륨을 만들었습니다.
lalebarde

@lalebarde 아마 -B best행동에 있지만 알기에 좋습니다!
Lester Cheung
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.