검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 시스템
참조 원문 : LXC vs. OpenVZ

  LXC(Linux Containers)는 리눅스의 컨테이너 기반 기상화의 새로운 주력 솔루션입니다. 아직 기능이 완벽하지 않고, 여전히 많은 사람들이 기존의 메인이던 OpenVZ을 사용하고 있지만 OpenVZ은 사실상 3.x 커널이 더 이상 지원하지 않기 때문에 지금 상태로는 그 생명이 끝나가고 있다고 할 수 있습니다. 이 글에서는 컨테이너 기반 가상화 솔루션의 차이를 비교해보겠습니다. 약간 옛날 데이터라 우분투 12.04가 기준입니다. 참고로 LXC를 가장 잘 지원하는 배포판이 우분투입니다.

                                                                                     OpenVZ                     LXC

리눅스 커널에 포함                                                        X                              O

메모리 사용률 제한 기능                                               O                              O

커널 메모리 제한 기능                                                   O                              X

CPU 사용률 제한 기능                                                  O                              O

디스크 공간 사용량 제한 기능                                      O                        부분/꼼수

디스크 IO 제한 기능                                                       X                              O

체크포인팅                                                                      O                              X

라이브 마이그레이션                                                     O                          X/꼼수

컨테이너 락다운(보안)                                                  O                            부분


리눅스 커널에 포함
  OpenVZ와 달리 LXC는 리눅스 커널에 포함되어 있습니다. 다만 OpenVZ도 커널의 많은 기능을 사용하긴 합니다. LXC는 커스텀 커널을 빌드할 필요가 없기 때문에 설치가 훨씬 쉽습니다. 단, 레드햇이나 수세 계열의 경우 미리 만들어진 OpenVZ 커널 이미지를 다운로드하여 사용할 수 있습니다. 주의할 점은 상당히 오래된 커널을 이용해 만든 OpenVZ 커널 이미지만 있다는 것입니다. 앞서 나왔던 설명처럼 최신 커널을 지원하지 않습니다.

  참고로 OpenVZ는 현재 대부분의 유저스페이스 유틸리티들을 LXC 기반으로 포팅하고 있기 때문에 향후에는 성능이 향상될 것입니다. vzctl 4.3은 OpenVZ가 아닌 컨테이너도 지원하며 CRIU를 통해 라이브 마이그레이션도 가능할 것이라고 합니다.


메모리 사용률 제한 기능
  둘 다 가능합니다. LXC에선 게스트의 사용 메모리를 조정하기 위해 VM-s 설정 파일에서 2개의 cgroup 설정을 사용합니다. 가장 중요한 설정은 메모리를 위한 lxc.cgroup.memory.limit_in_bytes과 스왑을 위한 lxc.cgroup.memory.memsw.limit_in_bytes입니다. 사용하는 커널 버전에 따라 다른 설정이 있을 수도 있습니다. /sys/fs/cgroup/memory/lxc/your-vm-name을 통해 설정 상태를 확인할 수 있습니다.


커널 메모리 제한
  애플리케이션이 커널을 이용하는 동안 커널 메모리를 사용할 수 있습니다. OpenVZ를 사용할 때는 VE 당 이 메모리의 사용을 제한할 수 있습니다.


CPU 사용률 제한
  둘 모두 자신의 CPU 사용률을 제한할 수 있습니다. CPU 대역폭은 지정한 한도 내에서 공유하여 사용하도록 제한됩니다. lxc.cgroup.cpu.shares 설정 값을 조정하여 VM의 CPU 사용량을 설정할 수 있으며, lxc.cgroup.cpuset.cpus로 CPU 코어를 제한할 수 있습니다.


디스크 공간 사용량 제한
  리눅스에서는 디스크 쿼터를 핵심기능으로 두고 있지 않기 때문에 LXC에선 디스크 쿼터를 지원하지 않습니다. VM을 LVM 볼륨에 넣어서 제한을 둘 수 있지만 IO 성능에 제한을 받게 됩니다.


디스크 IO 제한
  IO가 많이 필요한 애플리케이션을 다수 사용할 때는 디스크 IO를 제한하는 기능이 매우 중요합니다. OpenVZ에는 이 기능이 없지만 그것의 상용 버전인 Virtuzzo에는 있습니다. LXC는 lxc.cgroup.blkio이라는 cgroup을 통해 이 기능을 사용할 수 있으며 자세한 건 /sys/fs/cgroup/blkio/lxc에서 볼 수 있습니다.


체크포인팅
  전통적인 최대 절전 모드와 유사한 기능입니다. VM의 상태가 파일로 저장되며 다시 불러올 수 있습니다. 이 기능은 lxc-checkpoint라는 명령어를 통해 사용할 수 있게 될 예정이지만 원문이 작성된 시점(2013년 1월)에서는 구현되지 않았었습니다.


라이브 마이그레이션
  VM을 중단하지 않고 물리적으로 다른 호스트에 넘기는 기능입니다. 그러므로 메모리 내용도 새로운 호스트로 옮길 수 있어야 합니다. OpenVZ는 이미 꽤 오래 전부터 이 기능을 가지고 있었지만 LXC는 아직도 지원하고 있지 않습니다. 정식으로 지원되는 방법은 아니지만 유저스페이스를 이용한 라이브 마이그레이션을 구현하기 위한 프로젝트인 CRIU를 사용하면 가능하긴 합니다.


컨테이너 락다운(보안)
  가상화에서 격리는 중요한 요소입니다. OpenVZ는 이 기능이 잘 구현되어 있지만 LXC는 아직 완벽하지 않습니다. 심지어 우분투에서 AppArmor가 활성화되어 있는 상황에서도 게스트에서 dmesg에 접근할 수 있으며 /proc/kcore와 /proc/sysrq-trigger에도 접근할 수 있어 게스트 VM의 root 사용자가 호스트 머신을 쉽게 리스타트할 수 있습니다. 원문이 작성된 시점에서는 우분투 13.04에서 이 문제가 개선될 계획이었는데 위키에 관련 내용이 업데이트되지 않아서 어떻게 됐는지 모르겠습니다.



결론
  LXC가 유동성에 있어선 좋은 선택이 될 수 있을지 몰라도 위에서 볼 수 있듯이 외부 VM을 호스팅하기엔 아직 부적절한 점이 많습니다. 따라서 그런 종류의 사업에 사용하기엔 좀 더 기다려야 할 필요가 있습니다.


2013/07/25 21:25 2013/07/25 21:25