[Youtube] VDI 는 이제 그만! Kubevirt 로 가볍고 빠른 VM 사용하기
https://insight.infograb.net/blog/2024/10/23/kubevirt/
https://chaaaaewoncode.tistory.com/67
https://arthurchiao.art/blog/kubevirt-create-vm/ (자세한 원리)
정의
Kubernetes 환경에서 가상 머신(Virtual Machine, VM)을 관리하기 위한 오픈소스
주요 특징들
- kubernetes위에 올리는거라 pod 관리와 비슷하게 auto scaling, self healing 등을 적용 가능하다.
- VirtualMachine이라는 kind로 yaml 파일로 관리할 수 있기 때문에 VM자체를 GitOps로 관리가능하다.
- diskimage-builder라는 걸 이용하면 Dockerfile을 통해 VM을 만들 수 있다. → GitOps 이점 !
- kubevirt manager라는 걸 이용하면 VM들을 하나의 web ui에서 관리 가능하고 콘솔창으로 VM에 접속 가능하다.
아키텍처

- CRDs (Custom Resource Definitions)
- VMI(Virtual Machine Instance): 가상 머신의 실제 스펙을 정의한다. Pod와 1:1로 대응한다.
- vmi preset에 대한 요소
- Memory
- CPU
- Storage
- Networking
- VM(Virtual Machine): Pod와 Deployment 관계처럼 VMI를 추상화해 관리한다.
- virt-api-server: VMI를 제어(시작, 중지 등)하기 위한 API 서버
- virt-controller: VMI를 모니터링하고 관련 Pod의 라이프사이클을 관리
- Kubernetes API Server에 새로운 VM 개체 생성 요청이 오면, VM이 실행될 Pod를 생성한다.
- virt-handler(DaemonSet): 각 서버에 배포돼 VMI 변경을 감지하고 명령을 실행
- VM 개체의 변경 사항을 감시하고, 필요한 모든 상태를 충족하도록 VM을 변경하는 작업을 수행한다.
- VM 사양을 참조해 VM의 Pod에서 libvirtd와 통신해 해당 Domain 생성을 알린다.
- VM 개체가 삭제되면 삭제를 감지하고 도메인을 끈다.
- virt-launcher: VMI 컨테이너 내부에서 KVM과 QEMU로 실제 VM을 생성
- VM Process가 사용할 cgroup과 namespace를 제공하는 역할을 한다.
- virt-handler가 VM의 CRD 개체를 virt-launcher에 전달하여 VM을 시작하도록 virt-launcher에 신호를 보낸다.
- virt-launcher는 컨테이너 내의 local libvirtd instance를 사용하여 VM을 시작한다.
- virt-launcher는 VM 프로세스를 모니터링하고 VM이 종료되면 종료한다.
- libvirtd
- libvirtd 인스턴스는 모든 VM Pod에 있으며, virt-launcher는 libvirtd를 사용해 VM Process의 lifecycle를 관리한다.