가상 머신의 4대 핵심 요소
이번 강의에서는 가상 머신을 구성하는 4가지 핵심 요소에 대해서 살펴보도록 하겠습니다. 4가지 핵심 요소는 CPU, 메모리, 스토리지 그리고 네트워킹이 포함됩니다.
우리는 ESXi 호스트가 이러한 다양한 리소스를 가상 머신에게 어떻게 제공하는지 배우게 될 것입니다. 또한, 하나의 ESXi 호스트에 몇 개의 가상 머신을 배치해야 하는지 결정할 때 고려해야 할 사항들에 대해서도 생각해 볼 것입니다. 그렇다면 가상 머신들에게 실제로 얼마만큼의 리소스가 필요할까요?
1. 첫번째 핵심 요소: CPU
우리가 첫 번째로 공부할 요소는 CPU입니다. 가상 머신은 프로세서가 필요합니다. 즉, CPU의 처리 능력(Horsepower)이 필요합니다.
가상 머신을 생성할 때, 가상 머신에 서로 다른 수의 가상 CPU(vCPU)를 할당하여 생성할 수 있습니다.

- 예를 들어, 다이어그램에 있는 첫 번째 가상 머신은 총 4개의 가상 CPU를 가질 수 있습니다. 이것이 의미하는 바는, 기본적으로 이 가상 머신이 4개의 물리적 프로세서에 접근할 수 있는 권한을 가진다는 것입니다. 즉, 4개의 물리적 프로세서를 끌어다 쓸 수 있는 잠재력이 있다는 뜻입니다.
- 반면, 다른 가상 머신에는 가상 CPU를 2개만 줄 수도 있습니다. 이 가상 머신에게 2개의 가상 CPU를 준다는 것은, 이 VM이 2개의 물리적 프로세서를 활용할 수 있는 잠재력을 갖게 된다는 뜻입니다.
이처럼 서로 다른 가상 머신에 서로 다른 수의 가상 CPU를 구성할 수 있으며, 이들은 물리적 프로세서를 공유할 수 있습니다. 예를 들어, 첫 번째 VM이 첫 번째 물리적 프로세서를 사용하고, 두 번째 물리적 프로세서도 사용할 수 있습니다. 그리고 다른 가상 머신도 이 프로세서들을 사용할 수 있습니다.
본질적으로 동일한 CPU를 사용하는 가상 머신들은 CPU를 교대로(take turns) 사용하게 됩니다. 그들은 물리적 리소스를 공유하며, 하이퍼바이저가 이 모든 과정이 어떻게 일어날지를 처리합니다.
고려 사항: 적정 VM 수 산정
이 환경을 설정할 때 우리가 생각해야 할 것 중 하나는 “이 ESXi 호스트에서 실제로 몇 개의 가상 머신을 실행해야 하는가?”입니다.
가상화가 리소스를 매우 효율적으로 사용하도록 도와주는 것은 맞지만, 만약 하나의 호스트에 너무 많은 가상 머신을 집어넣어 과도한 CPU를 요구하게 되면, 사용 가능한 CPU 리소스가 부족해지기 시작할 것입니다.
- 그러면 가상 머신은 성능 저하를 겪게 됩니다. 너무 많은 VM이 한 호스트에서 실행 중이기 때문에 물리적 호스트가 제공할 수 없는 CPU 리소스를 기다리느라 성능이 떨어지는 것입니다.
- 그렇다고 한 호스트에 너무 적은 수의 VM을 실행하는 것도 원치 않습니다. CPU 리소스들이 아무것도 안 하고 놀고 있는 상태를 원치 않기 때문입니다. 그것은 제가 투자한 리소스를 낭비하는 셈이니까요.
따라서 우리의 목표는 각 호스트에서 적정량(Right amount)의 VM을 실행하여, 성능 저하를 일으키지 않으면서도 호스트의 리소스를 최대한 활용하는 것입니다.
2. 두 번째 핵심 요소: 메모리(Memory)
메모리 가상화로 기본 개념의 CPU의 가상화와 매우 비슷합니다.
이 경우, 여기에 12개의 VM이 있다고 가정해 봅시다. 그리고 각 가상 머신에 4GB의 메모리를 할당한다고 칩시다. 다 합치면 총 48GB가 될 것이고, 이 설정은 괜찮아 보입니다.

하지만 실제 물리적 호스트 자체에는 32GB의 물리적 메모리만 있다고 가정해 봅시다.
이것은 제가 실제로 제공할 수 있는 것보다 더 많은 것을 약속하고 있는 셈입니다. (오버서브스크립션) 모든 VM에 할당된 가상 메모리를 다 더하면 실제 제가 가진 물리적 메모리보다 더 큰 상황을 만들고 있는 것입니다.
다시 말하지만, 대부분의 경우 이것은 잘 작동할 것입니다. 왜냐하면 아마도 모든 가상 머신이 항상 자신의 모든 메모리를 필요로 하지는 않을 것이기 때문입니다. 가상머신들은 호스트의 32GB의 물리 메모리를 슬기롭게 공유할 수 있고, 가상머신 각각이 운용하는 소프트웨어가 너무 과도하게 동작하지 않는다면(너무 심하게 오버서브스크립션 하지 않는다면) 잘 작동할 것입니다.
그리고 가상 머신들이 작업을 수행하기 위해 실제 메모리가 필요해짐에 따라, 하이퍼바이저는 호스트의 실제 물리적 메모리 위에 가상 머신들이 사용할 개별 메모리 페이지(Pages of Memory)를 매핑(Mapping)해 줄 것입니다. 이렇게 해서 메모리는 모든 가상 머신에 걸쳐 효과적으로 공유됩니다.
3. 세번째 핵심 요소: 네트워크 처리량 (Network Throughput)
지금까지 CPU와 메모리, 두 가지 핵심요소를 다뤘습니다. 세 번째 요소는 네트워크 처리량입니다.
가상 네트워킹 부분은 CPU나 메모리 부분보다 조금 더 복잡합니다. 왜냐하면 여기에는 “vSphere 표준 스위치(vSphere Standard Switch)”라고 불리는 새로운 구성 요소가 등장하기 때문입니다. 일단 지금은 그냥 가상 스위치(Virtual Switch)라고 부릅시다. 우리는 실제로 가상 스위치를 생성해야 합니다. 앞서 말씀드렸듯이, VM은 물리 컴퓨터가 작동하는 방식과 매우 유사하게 작동합니다. 그래서 가상머신 생성시, 물리 컴퓨터와 마찬가지로 네트워크 연결이 필요합니다.
vSphere Standard Switch(vSS)는 ESXi 호스트 내부에 존재하는 L2 스위치이다.
기본적으로 제가 할 일은 이 가상 머신의 포트에서 제가 만든 가상 스위치로 가상의 네트워크 연결(Virtual Connection)을 생성하는 것입니다.
참고로, 이 가상 스위치에 연결된 모든 VM들은 서로 통신할 수 있습니다.
- 이 VM들은 경우에 따라 트래픽이 ESXi 호스트 밖으로 나갈 필요가 없다면, 가상 스위치를 통해 서로 통신할 수 있습니다.
- 하지만 대부분의 물리 컴퓨터처럼 외부 네트워크와 통신해야 한다면, 그 트래픽은 당연히 (현실의) 물리적 네트워크를 타고 이동(Traverse)해야 합니다.
가상 스위치가 제공하는 또 다른 기능이 바로 이것입니다. 외부 세계와의 연결성을 제공하는 물리적 네트워크 어댑터(NIC)에 대한 액세스를 제공하는 것입니다.
4. 네 번째 핵심 요소: 스토리지 (Storage)
이제 네 번째 핵심요소를 설명하겠습니다. 가상 네트워킹과 매우 유사한 스토리지 가상화입니다.
가상 머신은 가상 디스크를 갖게 됩니다. 가상 머신은 우리가 게스트 운영 체제(Guest Operating System)라고 부르는 것을 갖습니다. Windows나 Linux 같은 운영 체제가 가상 머신에 설치될 것입니다. 운영 체제를 설치하려면 설치할 스토리지 용량이 필요합니다. 이 부분은 나중에 훨씬 더 깊이 있게 다룰 것입니다. 하지만 가상 머신이 스토리지 활동(Activity)을 발생시킬 때, 그 활동은 운영 체제에서 SCSI(스카시) 명령어 형태로 나오게 됩니다.
- 이 SCSI 명령어들은 하이퍼바이저에 의해 수신됩니다.
- 그리고 적절한 스토리지 장치로 리디렉션(전달)됩니다.
잠재적으로 하이퍼바이저는 다양한 유형의 스토리지에 대한 액세스를 제공할 수 있습니다. 파이버 채널(Fibre Channel)이나 iSCSI 스토리지 어레이일 수도 있고, NFS일 수도 있으며, ESXi 호스트 내부의 로컬 스토리지일 수도 있습니다.