[에스넷시스템 부트캠프] TIL Day 24 - KVM, QEMU, 클라우드 기초 용어
1. KVM 기본 이론
1) KVM (Kernel-based Virtual Machine)
- KVM은 리눅스 커널을 하이퍼바이저로 전환하는 가상화 인프라
- 서버에 직접 하이퍼바이저를 설치하는 방
- 2007년부터 Linux 커널 메인라인에 포함되었으며, 완전한 가상화(Full Virtualization)를 지원
- VM은 Linux 프로세스로 동작하며, 커널 스케줄러의 제어를 받음
- Linux 커널 기능을 그대로 활용 (메모리 관리, 스케줄링, 보안 등)
- x86 가상화 확장 기능(Intel VT-x, AMD-V)이 있는 CPU에서 동작
- MAC(Mandatory Access Control) 정책 적용 가능 (ex. SELinux)
- VM도 리눅스 프로레스처럼 관리되어 기존 리눅스 도구로 모니터링 가능
- 모든 Linux 지원 스토리지 사용 가능 (로컬 디스크, NAS, iSCSI, LVM 등)
- 공유 파일 시스템 지원 -> VM 이미지를 여러 호스트에서 공유 가능
- 다양한 플랫폼(FreeBSD, illumos 등)에 포팅 가능
- VM을 서비스 중단 없이 다른 물리 호스트로 이동 가능
=> 가상화 기능을 리눅스 OS 자체가 제공하고 있으며, 이를 통해 가상 머신을 구동하고 제어한다.
💡포팅(porting)이란?
다른 운영체제에서도 KVM 기능을 사용할 수 있도록 수정해 적용한 것을 말한다.
2) 하이퍼바이저
하이퍼바이저는 프로세서, 메모리, 스토리지와 같은 컴퓨팅 리소스를 풀링하여 가상머신에 재할당하는 소프트웨어이다. 이 기술을 통해 여러 VM을 생성하여 단일 물리 머신에서 실행하는 가상화가 실현될 수 있다.
하이퍼바이저 종류
시스템 | 하이퍼바이저 |
Linux | KVM |
Windows | Hyper-V |
VMware | VMkernel |
Xen | Xen Hypervisor |
3) 가상화의 분류
- Type-1 : 네이티브 또는 베어 메탈 하이퍼바이저
- 호스트의 하드웨어에서 직접 실행되어 하드웨어를 제어하고 게스트 운영 체제를 관리
- 하이퍼바이저가 OS에 종속되지 않고 하드웨어 바로 위에 설치되는 구조
- 오픈소스에서 주로 해당 타입 이용
- ex) Hyper-V, Xen, VMware ESXi 등
- Type-2 : 호스팅 하이퍼바이저
- 기존 운영체제에서 실행됨
- 호스트 운영체제에서 게스트 운영 체제를 추상화하여 호스트와 상호 작용할 수 있는 격리된 시스템을 효과적으로 생성
- ex) KVM, QEMU, VirtualBox, VMware Workstation 등
4) 가상화 하는 방법
- 전가상화 (Full Virtualization)
- 가상 머신이 구동할 OS나 드라이버에 특별한 수정을 하지 않고 그대로 사용
- 하이퍼바이저가 중간에서 운영체제마다 다른 명령어를 해석해서 하드웨어로 보냄
- 하이퍼바이저가 하는 일이 많아서 성능이 떨어짐
- 반가상화 (Para Virtualization)
- 전가상화의 성능 저하를 보완하고자 나온 방법으로 수정된 OS나 드라이버를 사용
- 하이퍼바이저가 명령어를 해석하지 않고 이미 해석된 명령어를 실어 나르기만 함
- 성능이 보장되는 장점이 있지만 해석된 명령어를 만들기 위해 커널 코드를 수정해야 함
💡 DOM
부팅 이후에 온라인 상태에서 얻은 자원들을 추가하고 삭제하는 기능이다. KVM은 라이브러리를 통해서 올라오기 때문에 장치가 올라온 뒤에는 장치 추가나 삭제가 어렵다는 단점이 있다.
5) QEMU (Quick EMUlator)
QEMU는 CPU, 디스크, 네트워크 등 다양한 하드웨어를 소프트웨어로 구현하여 가상 머신을 실행할 수 있도록 해주는 오픈소스 에뮬레이터 겸 가상화 도구이다.
하드웨어를 가상화하고 하나의 명령어 세트를 다른 명령어 세트로 변환해주는 Dynamic Binary Translation (DBT) 기법을 통해 다양한 아키텍처 위에서 OS 및 프로그램을 돌릴 수 있다.
KVM은 CPU와 메모리 가상화를 위한 하드웨어 가속 기능을 제공하고 QEMU는 하드웨어 에뮬레이션을 담당해 둘이 함께 사용해야 실제 사용할 수 있는 성능의 가상 환경을 구축할 수 있다.
[사용자 명령]
└─ libvirt / virsh / virt-manager / oVirt / OpenStack
↓
[QEMU]
└─ VM 구성 및 하드웨어 에뮬레이션
↓
[KVM]
└─ CPU 및 메모리 가속 (하드웨어 가상화)
↓
[Linux Kernel & Host Hardware]
- libvirtd : QEMU/KVM을 자동으로 제어하고 VM을 관리하는 데몬
- oVirt : libvirt를 기반으로 하는 Red Hat 계열 가상화 관리 도구 (웹 UI)
- OpenStack : 대규모 클라우드 인프라 관리용 플랫폼. oVirt보다 강력함
💡가상화 vs 애뮬레이션
가상화는 같은 하드웨어를 사용하는 OS를 가상 머신에서 구동하기 위해 하이퍼바이저를 통해 커널 번역, 자원 분배 등의 기능을 제공하는 것이고, 에뮬레이션은 하드웨어를 소프트웨어적으로 구현해 특정 실행 환경을 제공하는 것이다.
6) 가상화 디스크 방식
방식 | 디바이스 이름 | 특징 | 장점 | 비고 |
SCSI | /dev/sdX | 전통적인 SCSI 방식 대부분의 OS에서 기본 지원 가상화 환경에 최적화되어 있지 않아 성능이 낮음 |
범용성 | 느림 |
virtio-blk | /dev/vdX | KVM/QEMU에서 제공하는 가상화 전용 블록 인터페이스 구조가 단순해 빠르지만 병렬 처리 지원 X |
빠름 (단순 구조) | 대규모 I/O에 비효율 |
virtio-scsi | /dev/sdX | SCSI 인터페이스를 virtio로 가속 멀티큐, hot-plug, TRIM, pass-through 등 고급 기능 지원 대규모 VM 운영 환경이나 클러스터 환경에 추천 |
가장 빠름, 멀티큐 지원 | 고급 기능 필요할 때 적합 |
💡virtio-scsi 특징
- 멀티큐 : 디스크에 대한 입출력 큐를 여러 개로 분산하여 처리하는 방식으로 병렬 I/O 성능 향상
- Hot-plug : 시스템 재부팅 없이 VM에 디스크나 장치 추가/제거 가능
- TRIM : 파일 시스템에서 삭제된 블록 정보를 스토리지에 알려주는 기능으로 SSD 환경에서 유휴 블록 정리를 도와 성능 유지 및 수명 연장
- Pass-through : 물리 장치를 VM에 직접 연결하는 방식으로 VM이 해당 장치를 실제처럼 사용
2. 서비스 개념으로 분류하는 클라우드
- IaaS (Infrastructure as a Service)
- 가상화된 인프라 자원(서버, 스토리지, 네트워크 등)을 제공
- 사용자가 직접 OS 설치, 네트워크 설정, 보안 구성 등 인프라 구성에 책임이 있음
- ex) AWS EC2, Microsoft Azure VM, Google Compute Engine 등
- PaaS (Platform as a Service)
- 앱 실행을 위한 개발 환경(OS, 런타임, DB 등)을 제공
- OS/미들웨어는 클라우드 제공자가 관리하기 때문에 코드만 배포하면 됨
- ex) AWS Elastic Beanstalk, Heroku, Google App Engine 등
- SaaS (Software as a Service)
- 완성된 소프트웨어를 웹 기반으로 제공
- 사용자는 앱만 사용하고 설치나 유지보수가 불필요
- ex) Gmail, Google Docs, Dropbox, Salesforce 등
- FaaS (Function as a Service)
- 필요한 시점에 필요한 만큼의 코드(함수)를 실행하고, 실행된 만큼만 비용을 지불하는 클라우드 서비스 모델
- 사용자는 서버를 관리하지 않고 이벤트 기반으로 함수 단위 코드만 작성
- 클라우드 플랫폼이 자동으로 인프라 생성, 실행, 스케일링, 종료까지 처리
- 서버 프로세스를 지속적으로 띄워둘 필요가 없음 -> 완전한 서버리스
- ex) AWS Lambda, Azure Functions, GCP Cloud Functions, Oracle Function 등
3. 클라우드 기본 용어
- Virtual Machine
- 물리 서버를 소프트웨어 형태로 구현한 것으로, 하나의 하드웨어에서 여러 VM을 동시에 실행할 수 있음
- Host OS
- 물리 머신에 설치된 운영체제로, 가상화를 지원하기 위해 사용됨
- Guest OS
- 가상 머신 내부에 설치된 운영체제. Host OS 위에서 독립적으로 동작
- Public Cloud
- 클라우드 서비스 제공자가 인프라를 소유·운영하고, 사용자는 인터넷을 통해 사용료를 내고 리소스를 사용하는 형태. 서비스가 외부에 공개됨
- Private Cloud
- 기업 내부에서 자체적으로 클라우드 환경을 구축하여 사용하는 비공개 형태. 초기 장비 구매 비용은 있지만 운영비용은 비교적 낮음
- Multi Cloud
- 둘 이상의 Public Cloud를 동시에 사용하는 환경. 장애 대응성과 유연성은 높지만 비용이 많이 듦
- Hybrid Cloud
- Public Cloud와 Private Cloud를 함께 사용하여 필요한 리소스를 유동적으로 분배하는 방식. 데이터 분산 활용에 용이
- Region
- 클라우드 데이터 센터의 물리적 위치 단위. "사이트"와 유사한 개념
- Bare Metal
- OS나 소프트웨어가 깔려있지 않은 순수 하드웨어. 하이퍼바이저를 직접 설치하여 사용하는 베어메탈 가상화 환경도 포함
- 깡통서버, 하드웨어 형태로 구성되는 서버를 의미. 비슷한 의미로 headless server
- Virtual Private Server (VPS)
- 하나의 물리 서버를 여러 사용자와 공유하지만, 각자에게 독립된 서버 환경을 제공하는 가상화 방식
- On-Premise
- 외부 클라우드가 아닌, 기업이 자체 보유한 물리 서버에 직접 소프트웨어를 설치해 운영하는 방식
- Read Replica
- 읽기 전용 DB 복제본으로, 데이터베이스 부하 분산과 백업을 목적으로 사용됨
- Contents Delivery Network (CDN)
- 지리적으로 분산된 서버를 통해 사용자에게 더 가까운 위치에서 콘텐츠를 전달해주는 기술. 웹 속도 향상에 사용
- Identity and Access Management (IAM)
- 사용자 계정과 권한을 정책 기반으로 자동 관리해주는 인증·인가 시스템.
- Cloud Service Provider
- 클라우드 인프라, 플랫폼, 소프트웨어를 제공하는 기업 (예: AWS, Azure, GCP 등).
- Marketplace
- 클라우드 상에서 VM 이미지나 SaaS 애플리케이션 등을 미리 구성해놓고 판매하는 플랫폼.
- Container
- OS 자원을 공유하면서도 격리된 환경에서 애플리케이션을 실행하는 단위. VM보다 가볍고 빠름
- 가상화가 아니라 좀 더 프로세스단위로 쪼개어 사용하는 기술 lxc로 출발
- Docker
- 가장 널리 사용되는 컨테이너 엔진. 애플리케이션을 손쉽게 패키징, 배포, 실행할 수 있도록 함
- 지금은 OCI 표준을 따르느라 RHEL에서는 podman을 사용
- Auto Scaling
- 트래픽 변화에 따라 서버 자원을 자동으로 확장하거나 축소해주는 기능. 클라우드의 핵심 장점 중 하나
- scale up
- 단독 서버 자체의 성능을 스펙업
- 단순하게 서버 자체의 스펙을 올리는 것이기 때문에 한계점이 금방 드러나고 HA와 같은 고급기능을 사용하기 힘듬.
- scale out
- 동일한 스펙의 서버를 여러개 병렬 구성
- 클러스터링을 통해 작업을 나누어 처리
- Health Check
- 연결되어 있는 상대서버가 살아있는지 죽어있는지를 확인하는 기능. 고급구성으로 가게 되면 각 서버의 모든 상태를 확인
✍️ 하루 회고
오늘 수업에서는 KVM과 QEMU에 대해 배웠지만 설명만으로는 개념이 다소 모호하게 느껴졌다. 그래서 수업 이후에 따로 자료를 찾아보며 개념을 정리해보았다.
KVM은 리눅스 커널을 하이퍼바이저로 만들어주는 가상화 인프라이고, QEMU는 가상 머신의 하드웨어를 소프트웨어적으로 구현해주는 에뮬레이터라는 점을 알게 되었다. 이 둘은 함께 사용될 때 비로소 성능과 기능을 모두 만족시키는 가상화 환경을 만들 수 있다는 것이 핵심이었다.
libvirt나 virt-manager와 같은 관리 도구는 아직 개념이 조금 어렵게 느껴져 간단하게만 살펴보았다. 추후 시간이 된다면 이 부분도 더 깊이 있게 정리해보고자 한다.