ESXi Architecture
VMware의 심장 — 독자 마이크로커널 VMkernel의 내부 구조와 동작 원리
📌 이 글의 목적
ESXi는 VMware vSphere의 핵심 하이퍼바이저임. "VM을 실행한다"는 단순한 역할 이면에 VMkernel이라는 독자 마이크로커널이 CPU/메모리/I/O를 어떻게 관리하는지를 이해하면 성능 분석, 트러블슈팅, 아키텍처 비교의 기반이 됨.
이 글을 읽고 나면:
- VMkernel의 마이크로커널 설계와 Linux 커널과의 구조적 차이를 설명할 수 있음
- VMM/VMX 프로세스가 VM 실행에서 각각 어떤 역할을 하는지 이해할 수 있음
- ESXi의 부팅 과정과 Boot Bank 구조를 이해할 수 있음
- VIB 패키지와 HCL 기반 드라이버 모델을 설명할 수 있음
- KVM/QEMU 아키텍처와의 구조적 차이를 비교할 수 있음
1. VMkernel 아키텍처
1.1 VMkernel이란
VMkernel은 VMware가 자체 개발한 POSIX 호환 마이크로커널임. Linux 커널이 아니며, 범용 OS도 아님. 가상화에 최적화된 전용 커널임.
1.2 마이크로커널 설계
| 항목 | VMkernel (ESXi) | Linux 커널 (Proxmox) |
|---|---|---|
| 커널 유형 | 마이크로커널 | 모놀리식 커널 |
| 설계 목적 | 가상화 전용 | 범용 (서버/데스크톱/임베디드) |
| 설치 크기 | ~150MB | 수 GB (배포판 포함) |
| 드라이버 | VIB 기반 (HCL 제한) | 커널 모듈 (수만 개) |
| 공격 표면 | 좁음 (최소 서비스) | 넓음 (범용 OS 서비스 전체) |
| 유연성 | 제한적 (VMware 생태계) | 높음 (Linux 생태계 전체) |
| 패키지 관리 | VIB/이미지 프로파일 | apt/yum/dnf |
| 셸 | BusyBox 기반 (제한적) | 풀 Bash/Zsh |
핵심 트레이드오프:
- VMkernel은 가상화에 필요한 것만 포함하므로 오버헤드가 최소이고 보안 표면이 좁음
- 대신 범용 Linux처럼 아무 소프트웨어나 설치할 수 없고, HCL에 있는 하드웨어만 지원
1.3 VMkernel의 핵심 서브시스템
| 서브시스템 | 역할 | KVM 대응 |
|---|---|---|
| CPU 스케줄러 | vCPU를 물리 코어에 매핑/스케줄링 | Linux CFS |
| 메모리 관리자 | VM 메모리 할당, TPS, Ballooning, Compression, Swap | Linux mm + KSM |
| I/O 스택 | SCSI, NVMe, 네트워크 I/O 처리 | Linux 블록/네트워크 스택 |
| VMFS | 클러스터 파일시스템 | LVM/ZFS/Ceph |
| 네트워크 스택 | vSwitch, dvSwitch, VMkernel 포트 | Linux Bridge, OVS |
| 디바이스 드라이버 | HW 추상화 (VIB 형태) | Linux 커널 모듈 (.ko) |
2. VMM과 VMX — VM 실행 구조
ESXi에서 VM 하나를 실행하면 두 개의 핵심 컴포넌트가 관여함.
2.1 VMM (Virtual Machine Monitor)
VMM은 VMkernel 내부(커널 공간) 에서 동작하며:
- CPU 가상화를 직접 수행함 (VT-x의 VM Entry/Exit 처리)
- 메모리 가상화(EPT)를 관리함
- 인터럽트를 게스트에 전달함 (APICv)
- 성능에 가장 민감한 경로를 커널 수준에서 처리함
2.2 VMX 프로세스
VMX는 User World(사용자 공간) 에서 동작하는 프로세스임.
- VM별로 하나의 VMX 프로세스가 존재함
- I/O 에뮬레이션을 담당함 (가상 디스크, 네트워크, USB 등)
- 콘솔 접근(VNC/MKS)을 처리함
- 관리 작업(스냅샷, 마이그레이션 등)을 조율함
2.3 KVM/QEMU와의 대응
| ESXi | KVM/QEMU | 설명 |
|---|---|---|
| VMM | KVM 모듈 | 커널 공간에서 CPU/메모리 가상화 수행 |
| VMX | QEMU 프로세스 | 유저 공간에서 I/O 에뮬레이션 수행 |
| VMM + VMX | QEMU + KVM | 둘 다 커널/유저 공간 분업 구조 |
구조적으로 유사하지만 핵심 차이가 있음:
- ESXi: VMM이 VMkernel 전용 코드. 범용 OS 기능 없이 가상화만 수행
- KVM: Linux 커널 모듈. 범용 OS 위에서 동작하므로 Linux의 모든 기능을 활용 가능
- QEMU vs VMX: QEMU는 오픈소스로 커뮤니티가 장치 모델을 확장. VMX는 VMware 내부 구현
3. User World
3.1 User World란
User World는 ESXi에서 유저 공간 프로세스가 실행되는 환경임. Linux의 User Space에 대응하지만, 범용 OS 수준의 기능은 제공하지 않음.
| 프로세스 | 역할 |
|---|---|
| hostd | 호스트 관리 데몬. Host Client(웹 UI)의 백엔드 |
| vpxa | vCenter Agent. vCenter와 통신하여 명령을 수신/실행 |
| VMX | VM별 I/O 에뮬레이션 프로세스 |
| vobd | VMware Observation 데몬. 이벤트/알림 관리 |
| fdm | Fault Domain Manager. vSphere HA 에이전트 |
| DCUI | Direct Console UI. 물리 콘솔에서 보이는 설정 화면 |
| SSH 데몬 | 기본 비활성화. 디버깅/트러블슈팅 시 활성화 |
3.2 CIM(Common Information Model) 프로바이더
ESXi는 하드웨어 모니터링을 위해 CIM/WBEM 표준을 사용함. CIM 프로바이더가 User World에서 실행되어 서버 벤더(Dell, HP, Lenovo 등)의 하드웨어 상태를 수집함.
4. 부팅 구조
4.1 Boot Bank
ESXi는 이중화된 부팅 파티션(Boot Bank) 구조를 사용함.
| 파티션 | 역할 |
|---|---|
| Boot Bank 0/1 | ESXi 이미지 (이중화). 업데이트 시 비활성 뱅크에 새 이미지 설치, 부팅 시 전환 |
| State Partition | 호스트 설정 (/etc/vmware/ 등). 재부팅해도 유지됨 |
| Scratch Partition | 로그 저장. 없으면 RAM에 저장되어 재부팅 시 사라짐 |
| Coredump Partition | 커널 패닉 시 덤프 저장 |
| VMFS Datastore | 나머지 공간. VM 디스크 저장용 |
Boot Bank의 장점:
- 업데이트 실패 시 이전 뱅크로 자동 롤백 가능
- "업데이트가 잘못되어 부팅이 안 된다"는 상황을 방지
4.2 부팅 과정
4.3 부팅 모드
| 모드 | 설명 | 용도 |
|---|---|---|
| Stateful (기본) | 로컬 디스크에서 부팅. 설정이 디스크에 저장됨 | 일반적인 서버 |
| Stateless | PXE/네트워크 부팅. 이미지를 매번 다운로드 | 대규모 클러스터, 블레이드 |
| Auto Deploy | vCenter에서 이미지/호스트 프로파일을 푸시하여 자동 배포 | 수백 대 규모 배포 |
💡 Auto Deploy는 대규모 환경에서 강력함. 호스트가 부팅되면 vCenter에서 이미지와 설정을 자동으로 내려받아 설치함. Proxmox에는 이에 대응하는 기능이 없으며, PXE + Ansible 조합으로 유사하게 구현해야 함.
5. VIB과 이미지 프로파일
5.1 VIB (vSphere Installation Bundle)
VIB는 ESXi의 소프트웨어 패키지 단위임. Linux의 .deb/.rpm에 대응.
VIB 구조:
├── payload/ # 실제 파일 (드라이버, 설정 등)
├── descriptor.xml # 메타데이터 (이름, 버전, 의존성)
└── sig # 디지털 서명
| VIB 수준 | 설명 | 서명 주체 |
|---|---|---|
| VMwareCertified | VMware가 직접 인증 | VMware |
| VMwareAccepted | 파트너가 개발, VMware가 검증 | 파트너 + VMware 검증 |
| PartnerSupported | 파트너가 개발/지원 | 파트너 |
| CommunitySupported | 커뮤니티/개인 | 없을 수 있음 |
# ESXi에서 VIB 관리 (esxcli)
esxcli software vib list # 설치된 VIB 목록
esxcli software vib install -v <vib-url> # VIB 설치
esxcli software vib remove -n <vib-name> # VIB 제거
esxcli software profile get # 현재 이미지 프로파일
5.2 이미지 프로파일
이미지 프로파일은 VIB의 묶음임. ESXi 설치 ISO가 곧 이미지 프로파일.
Custom ISO: 서버 벤더(Dell, HP, Lenovo)는 자사 하드웨어에 맞는 드라이버 VIB를 포함한 커스텀 ISO를 제공함. 기본 VMware ISO보다 벤더 커스텀 ISO를 사용하는 것이 권장됨.
5.3 HCL (Hardware Compatibility List)
ESXi는 HCL에 등록된 하드웨어만 공식 지원함.
| 항목 | ESXi | Proxmox (Linux) |
|---|---|---|
| 지원 드라이버 수 | 수백 (HCL 기반) | 수만 (커널 내장) |
| 새 하드웨어 지원 | VIB 업데이트 필요 | 커널 업데이트로 자동 |
| 비 HCL 하드웨어 | 동작 불가능하거나 지원 거부 | 대부분 동작 |
| 드라이버 품질 | 높음 (인증 절차) | 다양함 (커뮤니티 포함) |
⚠️ ESXi 설치 전 반드시 HCL 확인. 특히 NIC와 스토리지 컨트롤러. HCL에 없으면 설치 자체가 안 되거나, 설치되어도 기술 지원을 받을 수 없음. VMware HCL
6. 관리 접근 경로
6.1 접근 경로 비교
| 접근 경로 | 용도 | 상시 사용 |
|---|---|---|
| DCUI | 초기 설정, 네트워크 복구, 비밀번호 리셋 | ❌ |
| SSH | 디버깅, esxcli 명령, 로그 확인 | ❌ (필요 시만) |
| Host Client | 단일 호스트 관리 (vCenter 없을 때) | ⚠️ |
| vSphere Client | 전체 인프라 관리 (vCenter 경유) | ✅ |
| REST/SOAP API | 자동화, 스크립팅 | ✅ |
| PowerCLI | PowerShell 기반 관리 | ✅ |
6.2 DCUI (Direct Console User Interface)
물리 서버의 모니터에 표시되는 텍스트 기반 관리 화면.
| 기능 | 설명 |
|---|---|
| 네트워크 설정 | 관리 네트워크 IP/게이트웨이/DNS 변경 |
| 재시작 | 관리 에이전트(hostd) 또는 전체 호스트 재시작 |
| 트러블슈팅 | ESXi Shell 활성화, SSH 활성화 |
| 비밀번호 | root 비밀번호 리셋 |
| 로그 보기 | 시스템 로그 확인 |
6.3 Lockdown Mode
Lockdown Mode를 활성화하면 DCUI와 SSH를 통한 직접 접근이 차단되고, vCenter를 통해서만 호스트를 관리할 수 있음.
| 모드 | DCUI | SSH | vCenter |
|---|---|---|---|
| 비활성화 (기본) | ✅ | ✅ (활성화 시) | ✅ |
| Normal Lockdown | ❌ | ❌ | ✅ |
| Strict Lockdown | ❌ | ❌ | ✅ (Exception User만) |
💡 프로덕션 환경에서는 Normal Lockdown Mode 활성화가 권장됨. 긴급 시 DCUI 접근이 필요하면 vCenter에서 일시적으로 해제 가능.
7. ESXi 로그 구조
ESXi의 주요 로그 파일:
| 로그 | 경로 | 내용 |
|---|---|---|
| vmkernel.log | /var/log/vmkernel.log | VMkernel 코어 로그 (가장 중요) |
| hostd.log | /var/log/hostd.log | 호스트 관리 데몬 로그 |
| vpxa.log | /var/log/vpxa.log | vCenter 에이전트 로그 |
| vobd.log | /var/log/vobd.log | 이벤트/알림 |
| fdm.log | /var/log/fdm.log | HA 에이전트 로그 |
| vmware.log | VM 디렉토리 내 | VM별 로그 |
| esxupdate.log | /var/log/esxupdate.log | 업데이트/패치 로그 |
# ESXi Shell에서 로그 확인
tail -f /var/log/vmkernel.log
# 특정 VM 로그
tail -f /vmfs/volumes/datastore1/my-vm/vmware.log
# 로그 번들 생성 (기술 지원용)
vm-support
8. KVM/Proxmox와의 아키텍처 비교
8.1 구조 비교
8.2 상세 비교
| 항목 | ESXi (VMkernel) | Proxmox (Linux + KVM) |
|---|---|---|
| 커널 | VMkernel (전용) | Linux (범용) + KVM 모듈 |
| VM 실행 | VMM(커널) + VMX(유저) | KVM(커널) + QEMU(유저) |
| CPU 가상화 | VT-x/AMD-V (동일) | VT-x/AMD-V (동일) |
| 메모리 가상화 | EPT/NPT (동일) | EPT/NPT (동일) |
| I/O 가상화 | VMX + PVSCSI/VMXNET3 | QEMU + VirtIO |
| 드라이버 | VIB (HCL 기반, 수백 개) | Linux 커널 모듈 (수만 개) |
| 설치 크기 | ~150MB | ~2GB (Debian + Proxmox) |
| 부팅 구조 | Boot Bank (이중화) | 표준 Linux 부팅 |
| 패키지 관리 | esxcli + VIB | apt + dpkg |
| 셸 | BusyBox (제한적) | 풀 Bash |
| 관리 경로 | DCUI, Host Client, vCenter | SSH, 웹 UI (노드 내장) |
| 자동 배포 | Auto Deploy | PXE + Ansible |
| 보안 | Lockdown Mode, Secure Boot | AppArmor, SELinux |
| 오버헤드 | 최소 (전용 커널) | 약간 더 큼 (범용 커널) |
8.3 핵심 트레이드오프 정리
ESXi의 장점:
- 전용 커널이라 오버헤드가 최소임
- 공격 표면이 좁아 보안 면에서 유리함
- Boot Bank 이중화로 업데이트 안전성이 높음
- Auto Deploy로 대규모 배포가 편리함
ESXi의 한계:
- HCL에 없는 하드웨어는 사용 불가능
- 디버깅/커스터마이즈가 제한적 (셸이 BusyBox 수준)
- 오픈소스가 아니라 내부 동작을 확인할 수 없음
- 독자 생태계에 종속됨
KVM/Proxmox의 장점:
- Linux 생태계의 모든 드라이버/도구 활용 가능
- 거의 모든 하드웨어에서 동작함
- 오픈소스라 내부 동작을 확인하고 수정할 수 있음
- 풀 셸/패키지 매니저로 자유로운 커스터마이즈
KVM/Proxmox의 한계:
- 범용 커널이라 불필요한 서비스가 포함됨
- 보안 표면이 넓음 (커널 취약점 영향 범위 큼)
- Auto Deploy 같은 대규모 자동 배포 기능이 없음
💡 성능 차이는 거의 없음. CPU/메모리 가상화는 둘 다 동일한 하드웨어 가속(VT-x, EPT)을 사용함. I/O 성능도 PVSCSI/VMXNET3 vs VirtIO가 비슷한 수준. 실질적 차이는 관리 도구, 생태계, 라이선스에서 나옴.
정리
ESXi는 VMkernel이라는 가상화 전용 마이크로커널 위에 구축된 하이퍼바이저임.
핵심 포인트:
- VMkernel — 전용 커널. Linux가 아님. 가상화에 최적화된 최소 커널
- VMM + VMX — 커널(CPU/메모리 가상화) + 유저(I/O 에뮬레이션) 분업. KVM+QEMU와 동일한 패턴
- Boot Bank — 이중화 부팅 파티션. 업데이트 실패 시 자동 롤백
- VIB — ESXi의 패키지 단위. HCL 기반 드라이버 모델로 호환 하드웨어가 제한됨
- Lockdown Mode — 직접 접근 차단. 프로덕션에서 권장되는 보안 설정
이 아키텍처를 이해하면 ESXi 트러블슈팅(로그 분석, VIB 관리), 보안 설정(Lockdown, Secure Boot), KVM과의 아키텍처 비교에 기반이 됨.
다음 글
→ #3 vCenter & 관리 아키텍처 — VCSA, SSO, RBAC, Enhanced Linked Mode
🔗 관련 문서
- VMware vSphere Overview — 전체 그림
- KVM & QEMU Architecture — Proxmox #2, 비교 대상
- VMware vSphere Series Index — 시리즈 목차