OS 레벨의 가상화

OS-level virtualization

OS 레벨의 가상화는 운영체제(OS) 패러다임으로 커널이 컨테이너(LXC, Solaris 컨테이너, Docker, Podman), 존(Solaris 컨테이너), 가상 프라이빗 서버(OpenVZ), 파티션, 가상 환경(Virtual Environment), 가상 커널(DragonFly SDails)로 불리는 여러 격리된 사용자 공간 인스턴스를 존재시킬 수 있습니다.(무료BSD 감옥 또는 chroot 감옥).[1]이러한 인스턴스는 실행 중인 프로그램의 관점에서 실제 컴퓨터처럼 보일 수 있습니다.통상의 operating system상에서 동작하는 컴퓨터 프로그램은, 그 컴퓨터의 모든 자원(접속 디바이스, 파일, 폴더, 네트워크 공유, CPU 전력, 정량 가능한 하드웨어 기능)을 표시할 수 있습니다.그러나 컨테이너 내부에서 실행되는 프로그램은 컨테이너의 내용 및 컨테이너에 할당된 장치만 볼 수 있습니다.

Unix와 유사한 운영 체제에서는 이 기능은 현재 실행 중인 프로세스와 그 하위 프로세스의 겉보기 루트 폴더를 변경하는 표준 chroot 메커니즘의 고급 구현으로 볼 수 있습니다.커널은 격리 메커니즘 외에도 한 컨테이너의 활동이 다른 컨테이너에 미치는 영향을 제한하는 리소스 관리 기능을 제공하는 경우가 많습니다.Linux 컨테이너는 모두 Linux 커널(특히 Linux 네임스페이스cgroup)[2]에서 제공하는 가상화, 격리 및 리소스 관리 메커니즘을 기반으로 합니다.

컨테이너라는 용어는 일반적으로 OS 수준의 가상화 시스템을 가리킵니다만, Microsoft의 Hyper-V 컨테이너 등 호스트 OS와 다양한 수준으로 동작하는 완전한 가상 머신 환경을 가리킬 때 모호하게 사용되는 경우가 있습니다.

작동

퍼스널 컴퓨터의 통상적인 operating system에서는, 컴퓨터 프로그램이 시스템의 모든 자원을 확인할 수 있습니다(접근할 수 없는 경우도 있습니다).다음과 같은 것이 있습니다.

  1. CPU 및 네트워크 연결 등 사용할 수 있는 하드웨어 기능
  2. 파일, 폴더, 네트워크 공유 등 읽거나 쓸 수 있는 데이터
  3. 카메라, 프린터, 스캐너, 팩스 등 상호 작용할 수 있는 접속된 주변기기

운영체제는 어떤 프로그램이 리소스를 요구하는지 및 해당 리소스가 실행되는 컨텍스트에서 사용자 계정에 따라 이러한 리소스에 대한 액세스를 허용하거나 거부할 수 있습니다.운영체제는 컴퓨터 프로그램이 리소스를 열거할 때 열거 결과에 나타나지 않도록 이러한 리소스를 숨길 수도 있습니다.그럼에도 불구하고 프로그래밍 관점에서 컴퓨터 프로그램은 이러한 리소스와 상호 작용하며 운영체제는 상호 작용 행위를 관리해 왔습니다.

운영 체제 가상화 또는 컨테이너화를 사용하면 컨테이너 내에서 프로그램을 실행할 수 있으며, 이 컨테이너에는 이러한 리소스의 일부만 할당됩니다.컨테이너 내에서 실행되면 컴퓨터 전체를 볼 수 있는 프로그램은 할당된 리소스만 볼 수 있으며 사용 가능한 리소스만 볼 수 있습니다.각 운영 체제에는 여러 개의 컨테이너를 만들 수 있으며, 각 컨테이너에는 컴퓨터 리소스의 하위 집합이 할당됩니다.각 컨테이너에는 임의의 수의 컴퓨터 프로그램이 포함될 수 있습니다.이러한 프로그램은 동시에 실행되거나 개별적으로 실행될 수 있으며 서로 상호 작용할 수도 있습니다.

컨테이너화는 애플리케이션 가상화와 유사합니다.후자의 경우 격리된 컨테이너에 하나의 컴퓨터 프로그램만 배치되며 격리된 프로그램은 파일 시스템에만 적용됩니다.

사용하다

운영체제 수준의 가상화는 가상 호스팅 환경에서 일반적으로 사용되며, 상호 신뢰성이 떨어지는 다수의 사용자에게 한정된 하드웨어 리소스를 안전하게 할당하는 데 유용합니다.또, 시스템 관리자는, 다른 호스트의 서비스를 1대의 서버상의 컨테이너로 이동시켜, 서버 하드웨어를 통합하는 경우에도 사용할 수 있습니다.

기타 일반적인 시나리오로는 보안 향상, 하드웨어 독립성 및 리소스 관리 기능 추가를 위해 여러 프로그램을 별도의 컨테이너로 분리하는 것이 있습니다.단, chroot 메커니즘의 사용에 의해 제공되는 개선된 보안은 결코 [3]완벽하지 않습니다.라이브 마이그레이션이 가능한 운영 체제 수준의 가상화 구현은 클러스터 내 노드 간 컨테이너의 동적 로드 밸런싱에도 사용할 수 있습니다.

오버헤드

운영체제 수준의 가상화는 보통 완전 가상화보다 오버헤드가 적습니다.이는 OS 수준의 가상 파티션에 있는 프로그램이 운영체제의 일반 시스템 콜인터페이스를 사용하기 때문에 완전 가상화와 마찬가지로 중간 가상 머신에서 에뮬레이션 또는 실행할 필요가 없기 때문입니다.QEMU(Hyper-V) 및 반가상화(: Xen 또는 사용자 모드 Linux)입니다.이러한 형태의 가상화에서는 효율적인 퍼포먼스를 위해 하드웨어 지원이 필요하지 않습니다.

유연성

운영 체제 수준의 가상화는 호스트 운영 체제와 다른 게스트 커널 또는 다른 게스트 운영 체제를 호스팅할 수 없으므로 다른 가상화 방식만큼 유연하지 않습니다.예를 들어 Linux의 경우 배포는 다르지만 윈도우즈와 같은 다른 운영 체제는 호스팅할 수 없습니다.가변입력시스템시스템을사용하는운영체제는가상화아키텍처내에서의제한이있습니다.클라우드 서버 릴레이 분석을 포함한 적응 방법은 이러한 애플리케이션 [4]내에서 OS 수준의 가상 환경을 유지합니다.

Solaris는 브랜드 존 기능을 통해 위에서 설명한 제한을 부분적으로 극복합니다. 기능을 통해 Solaris 10 호스트에서 이전 버전의 Solaris 8 또는9를 에뮬레이트하는 컨테이너 내에서 환경을 실행할 수 있습니다.Linux 브랜드 존('lx' 브랜드 존이라고도 함)은 x86 기반의 Solaris 시스템에서도 사용할 수 있습니다.Linux 어플리케이션의 완전한 사용자 공간과 실행을 지원합니다.또한 Solaris는 Red Hat Enterprise Linux 3.x 또는 CentOS 3.x Linux 디스트리뷰션을 "lx"[5][6] 존 내에 설치하기 위해 필요한 유틸리티를 제공합니다.그러나 2010년에는 Linux 브랜드 존이 Solaris에서 삭제되었고 2014년에는 32비트 Linux [7]커널을 지원하는 오픈 소스 Solaris 포크인 Illumos에 다시 도입되었습니다.

보관소

실장에 따라서는, 파일 레벨의 Copy-on-Write(CoW) 메카니즘이 제공됩니다.(일반적으로 표준 파일 시스템은 파티션 간에 공유되며 파일을 변경하는 파티션은 자동으로 자체 복사본을 생성합니다.)이는 전체 시스템 Virtualizer에서 일반적으로 사용되는 블록 레벨 쓰기 복사 방식보다 백업하기가 쉽고 공간 효율적이며 캐시하기가 쉽습니다.그러나 전체 시스템 버추얼라이저는 비네이티브 파일 시스템과 연계하여 전체 시스템 상태의 스냅샷을 만들고 롤백할 수 있습니다.

실장

메커니즘 운영 체제 면허증. 이후 또는 그 사이에 적극적으로 개발됨 특징들
파일 시스템 분리 기입 시 복사 디스크 할당량 I/O 환율 제한 메모리 제한 CPU 쿼터 네트워크 분리 네스트된 가상화 파티션 체크포인트 및 라이브 마이그레이션 루트 권한 분리
뿌리째 대부분의 UNIX 계열 운영 체제 운영 체제에 따라 다름 1982 부분적[a] 아니요. 아니요. 아니요. 아니요. 아니요. 아니요. 네. 아니요. 아니요.
도커 Linux,[9] FreeBSD,[10] Windows x64 (Pro, Enterprise, Education)[11] macOS[12] Apache 라이센스 2.0 2013 네. 네. 직접 아님 있음(1.10 이후) 네. 네. 네. 네. CRIU를 사용한 실험 모드만 [1] 있음(1.10 이후)
Linux-V서버
(보안 컨텍스트)
Linux, Windows Server 2016 GNU GPLv2 2001 네. 네. 네. 네, 그렇습니다[b]. 네. 네. 부분적[c] ? 아니요. 부분적[d]
lmctfy 리눅스 Apache 라이센스 2.0 2013–2015 네. 네. 네. 네, 그렇습니다[b]. 네. 네. 부분적[c] ? 아니요. 부분적[d]
LXC 리눅스 GNU GPLv2 2008 네, 그렇습니다[14]. 네. 부분적[e] 부분적[f] 네. 네. 네. 네. 네. 네, 그렇습니다[14].
특이점 리눅스 BSD 라이선스 2015년[15] 네, 그렇습니다[16]. 네. 네. 아니요. 아니요. 아니요. 아니요. 아니요. 아니요. 네, 그렇습니다[17].
오픈VZ 리눅스 GNU GPLv2 2005 네. 네, 그렇습니다[18]. 네. 네, 그렇습니다[g]. 네. 네. 네, 그렇습니다[h]. 부분적[i] 네. 네, 그렇습니다[j].
비르투오조 Linux, Windows 트라이얼웨어 2000년[22] 네. 네. 네. 네, 그렇습니다[k]. 네. 네. 네, 그렇습니다[h]. 부분적[l] 네. 네.
Solaris 컨테이너(존) 일루미노(OpenSolaris),
솔라리스
CDDL,
독자 사양
2004 네. 있음(ZFS) 네. 부분적[m] 네. 네. 네, 그렇습니다[n][25][26]. 부분적[o] 부분적[p][q] 네, 그렇습니다[r].
프리BSD 감옥 FreeBSD, DragonFly BSD BSD 라이선스 2000년[28] 네. 있음(ZFS) 네, 그렇습니다[s]. 네. 네, 그렇습니다[29]. 네. 네, 그렇습니다[30]. 네. 부분적[31][32] 네, 그렇습니다[33].
커널 DragonFly BSD BSD 라이선스 2006년[34] 네, 그렇습니다[35]. 네, 그렇습니다[35]. ? 네, 그렇습니다[36]. 네, 그렇습니다[36]. 네, 그렇습니다[37]. ? ? 네.
시스템 파일 OpenBSD, NetBSD BSD 라이선스 2006–2009 네. 아니요. 아니요. 아니요. 아니요. 아니요. 네. 아니요. 아니요. ?
WPAR AIX 상업의 독점 소프트웨어 2007 네. 아니요. 네. 네. 네. 네. 네, 그렇습니다[t]. 아니요. 네, 그렇습니다[39]. ?
iCore 가상 계정 윈도 XP 프리웨어 2008 네. 아니요. 네. 아니요. 아니요. 아니요. 아니요. ? 아니요. ?
샌드박스 창문들 GNU GPLv3 2004 네. 네. 부분적 아니요. 아니요. 아니요. 부분적 아니요. 아니요. 네.
systemd-nspawn 리눅스 GNU LGPLv2.1+ 2010 네. 네. 네, 그렇습니다[40][41]. 네, 그렇습니다[40][41]. 네, 그렇습니다[40][41]. 네, 그렇습니다[40][41]. 네. ? ? 네.
터보 창문들 프리미움 2012 네. 아니요. 아니요. 아니요. 아니요. 아니요. 네. 아니요. 아니요. 네.
rkt 리눅스 Apache 라이센스 2.0 2014[42]~2018년 네. 네. 네. 네. 네. 네. 네. ? ? 네.

위 목록에 없는 Linux 컨테이너:

  • LXD, Canonical이 개발[43] LXC 주변 대체 래퍼
  • Podman,[44] 도커의 드롭인 대체품
  • Charlie cloud, HPC 시스템에서[45] 사용되는 컨테이너 도구 세트
  • Kata 컨테이너 마이크로VM[46] 플랫폼
  • Bottlerocket은 Amazon Web Services가 가상 머신 또는 베어 메탈[47] 호스트에서 컨테이너를 실행하기 위해 특별히 구축한 Linux 기반 오픈 소스 운영 체제입니다.

「 」를 참조해 주세요.

메모들

  1. ^ 루트 사용자는 chroot에서 쉽게 탈출할 수 있습니다.Chroot는 보안 [8]메커니즘으로 사용해서는 안 됩니다.
  2. ^ a b CFQ 스케줄러를 사용하면 게스트별로 별도의 큐가 있습니다.
  3. ^ a b 네트워킹은 가상화가 아닌 분리를 기반으로 합니다.
  4. ^ a b 컨테이너 내에서 총 14개의 사용자 기능이 안전한 것으로 간주됩니다.나머지는 해당 컨테이너 내의 프로세스에 부여될 수 없습니다.이 프로세스가 [13]해당 컨테이너 외부의 것에 잠재적으로 간섭할 수 있습니다.
  5. ^ 컨테이너당 디스크 할당량은 LVM의 도움을 받아 각 컨테이너에 개별 파티션을 사용하거나 기본 호스트 파일 시스템이 btrfs인 경우 자동으로 btrfs 하위 볼륨이 사용됩니다.
  6. ^ Btrfs 사용 시 I/O 환율 제한이 지원됩니다.
  7. ^ Linux 커널 2.6.18-028stable021 이후 사용 가능.구현은 CFQ Disk I/O 스케줄러를 기반으로 하지만 2단계 스키마이기 때문에 I/O 우선순위는 프로세스별이 아니라 [19]컨테이너별입니다.
  8. ^ a b 각 컨테이너에는 고유한 IP 주소, 방화벽 규칙, 라우팅 테이블 등을 가질 수 있습니다.루트 베이스, 브리지 베이스, 및 실제의 Network Device(NIC; 네트워크 디바이스)를 컨테이너에 할당하는 등, 3개의 다른 네트워킹 방식이 가능합니다.
  9. ^ 도커 컨테이너는 OpenVZ [20]컨테이너 내에서 실행할 수 있습니다.
  10. ^ 각 컨테이너는 다른 [21]컨테이너에 영향을 주지 않고 루트 액세스 권한을 가질 수 있습니다.
  11. ^ 버전 4.0, 2008년1월부터 이용 가능합니다.
  12. ^ 도커 컨테이너는 Virtuozo [23]컨테이너 내에서 실행할 수 있습니다.
  13. ^ [24], 일루미네이션으로
  14. ^ 자세한 내용은 OpenSolaris 네트워크 가상화리소스 제어를 참조하십시오.
  15. ^ 최상위 레벨이 KVM 존(일루모스) 또는 kz 존(Oracle)인 경우에만 해당됩니다.
  16. ^ Solaris 11.3 베타 이후 Solaris 커널 존에서는 라이브 마이그레이션을 사용할 수 있습니다.
  17. ^ 콜드 이행(셧다운-이동-재시작)이 구현됩니다.
  18. ^ 비글로벌존은 제한되기 때문에 기능 제한 접근법에 의해 다른 존에 영향을 주지 않을 수 있습니다.글로벌 존이 비글로벌존을 [27]관리할 수 있습니다.
  19. ^ "허용"을 확인합니다.FreeB의 "Quotas" 옵션 및 "Jails and File Systems" 섹션을 참조하십시오.자세한 내용은 SD 감옥 사람 페이지를 참조하십시오.
  20. ^ TL [38]02 이후 이용 가능.

레퍼런스

  1. ^ Hogg, Scott (2014-05-26). "Software Containers: Used More Frequently than Most Realize". Network World. Network World, Inc. Retrieved 2015-07-09. There are many other OS-level virtualization systems such as: Linux OpenVZ, Linux-VServer, FreeBSD Jails, AIX Workload Partitions (WPARs), HP-UX Containers (SRP), Solaris Containers, among others.
  2. ^ Rami, Rosen. "Namespaces and Cgroups, the basis of Linux Containers" (PDF). Retrieved 18 August 2016.
  3. ^ Korff, Yanek; Hope, Paco; Potter, Bruce (2005). Mastering FreeBSD and OpenBSD Security. O'Reilly Series. O'Reilly Media, Inc. p. 59. ISBN 0596006268.
  4. ^ Huang, D (2015). "Experiences in using OS-level virtualization for block I/O". Proceedings of the 10th Parallel Data Storage Workshop: 13–18. doi:10.1145/2834976.2834982. ISBN 9781450340083. S2CID 3867190.
  5. ^ "System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones, Chapter 16: Introduction to Solaris Zones". Oracle Corporation. 2010. Retrieved 2014-09-02.
  6. ^ "System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones, Chapter 31: About Branded Zones and the Linux Branded Zone". Oracle Corporation. 2010. Retrieved 2014-09-02.
  7. ^ Bryan Cantrill (2014-09-28). "The dream is alive! Running Linux containers on an illumos kernel". slideshare.net. Retrieved 2014-10-10.
  8. ^ "3.5. Limiting your program's environment". freebsd.org.
  9. ^ "Docker drops LXC as default execution environment". InfoQ.
  10. ^ "Docker comes to FreeBSD". FreeBSDNews.com. July 9, 2015.
  11. ^ "Get started with Docker for Windows". Docker. 10 September 2021.
  12. ^ "Get started with Docker Desktop for Mac". Docker Documentation. December 6, 2019.
  13. ^ "Paper - Linux-VServer". linux-vserver.org.
  14. ^ a b Graber, Stéphane (1 January 2014). "LXC 1.0: Security features [6/10]". Retrieved 12 February 2014. LXC now has support for user namespaces. [...] LXC is no longer running as root so even if an attacker manages to escape the container, he'd find himself having the privileges of a regular user on the host
  15. ^ "Sylabs Brings Singularity Containers into Commercial HPC TOP500 Supercomputer Sites". www.top500.org.
  16. ^ "Redirecting…". www.sylabs.io. 14 March 2018.
  17. ^ Kurtzer, Gregory M.; Sochat, Vanessa; Bauer, Michael W. (May 11, 2017). "Singularity: Scientific containers for mobility of compute". PLOS ONE. 12 (5): e0177459. Bibcode:2017PLoSO..1277459K. doi:10.1371/journal.pone.0177459. PMC 5426675. PMID 28494014.
  18. ^ Bronnikov, Sergey. "Comparison on OpenVZ wiki page". OpenVZ Wiki. OpenVZ. Retrieved 28 December 2018.
  19. ^ "I/O priorities for containers". OpenVZ Virtuozzo Containers Wiki.
  20. ^ "Docker inside CT".
  21. ^ "Container". OpenVZ Virtuozzo Containers Wiki.
  22. ^ "Initial public prerelease of Virtuozzo (named ASPcomplete at that time)".
  23. ^ "Parallels Virtuozzo Now Provides Native Support for Docker".
  24. ^ Pijewski, Bill. "Our ZFS I/O Throttle".
  25. ^ 네트워크 가상화자원 제어(Crossbow) FAQ 2008-06-01 웨이백 머신에 아카이브된
  26. ^ "Managing Network Virtualization and Network Resources in Oracle® Solaris 11.2". docs.oracle.com.
  27. ^ Oracle Solaris 11.1 관리, Oracle Solaris Zones, Oracle Solaris 10 Zones 및 Resource Management E29024.pdf, 페이지 356~360.아카이브 내에서 사용할 수 있습니다.
  28. ^ "Contain your enthusiasm - Part Two: Jails, Zones, OpenVZ, and LXC". Jails were first introduced in FreeBSD 4.0 in 2000
  29. ^ "Hierarchical_Resource_Limits - FreeBSD Wiki". Wiki.freebsd.org. 2012-10-27. Retrieved 2014-01-15.
  30. ^ "Implementing a Clonable Network Stack in the FreeBSD Kernel" (PDF). usenix.org. 2003-06-13.
  31. ^ "VPS for FreeBSD". Retrieved 2016-02-20.
  32. ^ "[Announcement] VPS // OS Virtualization // alpha release". Retrieved 2016-02-20.
  33. ^ "3.5. Limiting your program's environment". Freebsd.org. Retrieved 2014-01-15.
  34. ^ Matthew Dillon (2006). "sys/vkernel.h". BSD Cross Reference. DragonFly BSD.
  35. ^ a b "vkd(4) — Virtual Kernel Disc". DragonFly BSD. treats the disk image as copy-on-write.
  36. ^ a b Sascha Wildner (2007-01-08). "vkernel, vcd, vkd, vke — virtual kernel architecture". DragonFly Miscellaneous Information Manual. DragonFly BSD.
  37. ^ "vke(4) — Virtual Kernel Ethernet". DragonFly BSD.
  38. ^ "IBM Fix pack information for: WPAR Network Isolation - United States". ibm.com. 21 July 2011.
  39. ^ "Live Application Mobility in AIX 6.1". www.ibm.com. June 3, 2008.
  40. ^ a b c d "systemd-nspawn". www.freedesktop.org.
  41. ^ a b c d "2.3. Modifying Control Groups Red Hat Enterprise Linux 7". Red Hat Customer Portal.
  42. ^ Polvi, Alex. "CoreOS is building a container runtime, rkt". CoreOS Blog. Archived from the original on 2019-04-01. Retrieved 12 March 2019.
  43. ^ "LXD". linuxcontainers.org. Retrieved 2021-02-11.
  44. ^ Podman퓨즈 오버레이프가 포함된 루트리스 컨테이너, CERN 워크숍, 2019-06-04
  45. ^ "Overview — Charliecloud 0.25 documentation". Retrieved 4 October 2020.
  46. ^ "Home". katacontainers.io.
  47. ^ "Bottlerocket is a Linux-based operating system purpose-built to run containers".

외부 링크