가상화

Nested virtualisation란 무엇인가요?

정의

Nested virtualisation lets a virtual machine itself run virtual machines, by exposing the processor virtualisation extensions to the guest. It is required for Proxmox VE, VM-based CI jobs and some Docker configurations. Many providers disable it, which is the usual reason those workloads fail elsewhere.

Nested virtualisation가 중요한 이유

Proxmox VE、VM 기반 CI 작업 및 일부 Docker 구성에 필요합니다. 많은 공급자가 이를 비활성화하며, 이것이 해당 워크로드가 다른 곳에서 실패하는 일반적인 이유입니다.

Nested virtualisation 실제 적용

중첩 가상화를 실행할 때 KVM 게스트 내부에서 하이퍼바이저를 부팅하고 호스트 CPU의 가상화 확장을 통과시킵니다. 게스트에서 /proc/cpuinfo에서 svm 또는 vmx 플래그를 확인합니다. 이 플래그가 없으면 내부 하이퍼바이저는 소프트웨어 에뮬레이션으로 대체되어 성능이 한 자릿수 이상 저하될 수 있습니다. 이러한 플래그를 얻으려면 일반 모델이 아닌 'host' CPU 유형을 활성화해야 할 수도 있습니다. 잘못 설정하면 Proxmox 또는 CI 워크로드가 크롤링됩니다.

Nested virtualisation에 대한 사람들의 오해

사람들은 중첩 가상화가 Windows와 같은 전체 OS를 VM에서 실행하는 데에만 중요하다고 가정합니다. 수정 사항: Docker의 기본 오버레이 네트워킹과 특정 커널 모듈도 중단시키며, 이는 게스트 내부의 가상화 기능에 의존하기 때문입니다. 따라서 VM을 실행할 의도가 없더라도 중첩을 비활성화한 제공업체에서는 컨테이너 워크로드가 실패할 수 있습니다.

Nested virtualisation — 일반적인 질문

중첩 VM 안에서 Docker를 실행할 수 있나요?

예, 이것이 사람들이 중첩 가상화가 필요한 가장 일반적인 이유입니다. Docker의 기본 브리지 네트워킹은 CPU 가상화 확장이 노출되지 않으면 다르게 작동할 수 있는 iptables 및 커널 모듈을 사용합니다. 우리 KVM 플랜에는 중첩 가상화가 포함되어 있어 Docker 컨테이너가 예상대로 실행됩니다.

중첩 가상화가 활성화되었는지 어떻게 확인하나요?

VM 내부에서 grep -E '(svm|vmx)' /proc/cpuinfo를 실행하세요. 플래그가 보이면 중첩이 가능한 것입니다. 그렇지 않으면 하이퍼바이저가 이를 노출하지 않는 것이며, 일반적으로 제공업체가 비활성화했음을 의미합니다.

Nested virtualisation가 등장하는 곳

가상화에서 더 보기

KVM
KVM은 Linux 커널에 내장된 완전한 하드웨어 가상화로, 각 게스트에 자체 커널과 다른 테넌트로부터 하드웨어 강제 격리를 제공합니다.
OpenVZ
OpenVZ는 모든 인스턴스가 호스트 커널을 공유하는 컨테이너 기반 가상화로, 게스트는 커널 모듈을 로드하거나 다른 운영 체제를 실행할 수 없습니다.
LXC
LXC는 커널을 공유하면서 네임스페이스와 cgroups로 프로세스를 격리하는 Linux 네이티브 컨테이너화입니다.
하이퍼바이저
하이퍼바이저는 가상 머신을 생성하고 실행하며 물리적 CPU, 메모리 및 IO를 그들 사이에 할당하는 소프트웨어 계층입니다.
vCPU
vCPU는 게스트에게 제공되는 가상 프로세서로, 물리적 코어 또는 스레드의 스케줄링 시간을 기반으로 합니다.
cloud-init
cloud-init는 플랫폼에서 제공하는 메타데이터를 사용하여 가상 머신을 첫 부팅 시 구성하는 표준 메커니즘입니다.