이 글은 제가 Cloud Native Korea Community Day 2024에서 발표한 "VDI는 이제 그만! Kubevirt로 가볍고 빠른 VM 사용하기" 내용을 바탕으로 작성했습니다.
Kubevirt는 클라우드 네이티브 환경에서 VM(가상 머신)을 효율적으로 관리하는 혁신 기술입니다. 이는 Kubernetes에서 VM을 실행하는 기술로, 전통적인 가상화 방식과 컨테이너 오케스트레이션 장점을 결합했습니다.
클라우드 네이티브 환경에서 Kubevirt를 활용하면 VM 관리 방식을 크게 개선할 수 있습니다. 이는 기존 VDI(가상 데스크톱 인프라) 솔루션 한계를 극복하고 가상화 환경을 효율적으로 구축하는 데 도움이 됩니다. 이 글에서는 Kubervirt의 아키텍처, 실무 도입 배경과 적용 사례를 소개하겠습니다.
Kubevirt 실무 도입 배경
expertLABS의 교재(왼쪽)와 코드 실습 환경 ‘워크스페이스’(오른쪽)저는 DevOps 엔지니어로서 인포그랩 DevOps 학습 솔루션인 expertLABS의 기술 난제를 해결하고 서비스를 지속적으로 개선하고 있습니다. expertLABS는 DevOps 엔지니어가 DevOps 필수 기술셋을 빠르게 학습하고 실무 과제를 원활히 해결하도록 만든 서비스입니다. expertLABS는 ‘DevOps를 직접 체험하며 배우는 게 가장 효과적’이라는 인포그랩 지향점에 따라 실습 중심의 콘텐츠에 특화됐습니다.
워크스페이스*는 expertLABS의 실습 학습 효과를 극대화한 대표 기능입니다. 워크스페이스는 IDE와 CLI 터미널이 있는 코드 실습 환경인데요. 이는 AWS 기반 Docker/Kubernetes 환경의 인프라를 갖췄고요. 기업 내부 환경과 동일한 실습 환경으로 구성됐습니다. 따라서 수강생이 학습을 위해 따로 실습 환경을 준비할 필요가 없죠**. 인포그랩은 네트워크, 인프라 기술력과 노하우를 발휘해 워크스페이스를 구축했습니다.
저는 워크스페이스에 expertLABS 코스(강의)별로 실습 환경을 구축하는데요. 코스마다 서로 다른 실습 환경이 필요해 효과적인 환경 구축 방법을 항상 고민합니다. 예를 들어, 저는 Docker 코스에서는 Docker가, Git 코스에서는 Git이 설치된 실습 환경을 미리 구축해 코스별 수강생에게 제공해야 하고요. 또 강사와 소스 코드 공유, 과제 채점 기능을 구현해야 합니다.
코스별로 특화됐으며, 기능이 다양한 실습 환경을 구축하는 과정은 쉽지 않습니다. 저는 코스와 수강 생 개개인에게 맞춤형 실습 환경을 즉시 제공할 방법을 고민하다가 Kubevirt를 알게 됐는데요. 이를 expertLABS 실습 환경 구축에 적용했더니 매우 효과적이었습니다.
*워크스페이스 사용 방법: expertLABS 사이트의 화면 왼쪽 교재에서 코드 예제 복사→화면 오른쪽 터미널에 복사한 코드 붙여 넣기→코드 실행
**워크스페이스를 사용하면, expertLABS 사이트에서 화면 전환 없이 학습 내용을 즉시 실습할 수 있음
Kubevirt란?
Kubevirt는 Kubernetes 위에 작동하는 VM 관리 애드온(add-on)입니다. VMWare나 VirtualBox처럼 VM을 생성하지만, 이를 Kubernetes 환경에서 운영합니다. 다른 Kubernetes 리소스와 마찬가지로, manifest YAML 파일을 작성하고 kubectl apply
명령으로 배포할 수 있죠.
Kubevirt 구성 요소
Kubevirt는 다음 요소로 이뤄졌습니다.
- CRDs (Custom Resource Definitions)
- VMI(Virtual Machine Instance): 가상 머신의 실제 스펙을 정의합니다. Pod와 1:1로 대응합니다.
- VM(Virtual Machine): Pod와 Deployment 관계처럼 VMI를 추상화해 관리합니다.
- virt-api-server: VMI를 제어(시작, 중지 등)하기 위한 API 서버입니다.
- virt-controller: VMI를 모니터링하고 관련 Pod의 라이프사이클을 관리합니다.
- virt-handler: 각 서버에 배포돼 VMI 변경을 감지하고 명령을 실행합니다.
- virt-launcher: VMI 컨테이너 내부에서 KVM과 QEMU로 실제 VM을 생성합니다.
Kubevirt의 자세한 동작 원리가 궁금하시면 https://arthurchiao.art/blog/kubevirt-create-vm/을 참고하세요.
Virtual Machine Manifest
Kubevirt는 ‘Virtual Machine’이라는 커스텀 리소스를 사용해 VM을 만들고 관리합니다. 이 리소스로 VM의 모든 걸 한 번에 설정할 수 있죠. CPU, 메모리는 물론이고 네트워크와 저장소까지 세세하게 조절할 수 있습니다.
expertLABS의 실습 환경을 만들 때, 저는 운영 체제를 ‘containerDisk’라는 특별한 형태로 준비했습니다. 이 containerDisk는 VM에 virtio 디스크로 연결되는데요. VM이 켜질 때 이 디스크를 메인 디스크로 사용해 운영 체제를 실행합니다. 덕분에 VM을 빨리 시작할 수 있고, 자원도 효율적으로 사용할 수 있답니다.
KubeVirt VM Manifest 스펙 살펴보기
KubeVirt VM Manifest의 스펙은 다음과 같습니다. 이 매니페스트는 VM 구성을 정의하는 핵심 요소로 이뤄졌습니다. 각 부분이 VM의 특정 측면을 제어하므로, 이를 이해하는 게 VM을 효과적으로 관리하는 데 필수적이죠.
- running: VM의 초기 실행 상태를 지정합니다.
true
로 설정하면 VM이 생성과 동시에 실행됩니다. - template:
- metadata: 템플릿의 메타데이터를 포함합니다.
- spec:
-
domain: VM의 하드웨어 구성을 정의합니다.
- cpu: CPU 코어 수를 지정합니다.
- devices: 디스크와 네트워크 인터페이스를 정의합니다.
-
disks: 디스크 장치를 정의하며, 각 디스크는 버스 타입과 이름이 있습니다.
-
interfaces: 네트워크 인터페이스를 정의하며, 주로
masquerade
모드를 사용합니다.
-
-
resources:
- requests: 필요한 리소스를 정의하며, 메모리 요구량 등을 포함합니다.
-
volumes: VM에 연결될 볼륨을 정의합니다. 예를 들어, 컨테이너 디스크나 클라우드-init 디스크 등이 있습니다.
-