이 글은 제가 Cloud Native Korea Community Day 2024에서 발표한 "VDI는 이제 그만! Kubevirt로 가볍고 빠른 VM 사용하기" 내용을 바탕으로 작성했습니다.

Kubevirt는 클라우드 네이티브 환경에서 VM(가상 머신)을 효율적으로 관리하는 혁신 기술입니다. 이는 Kubernetes에서 VM을 실행하는 기술로, 전통적인 가상화 방식과 컨테이너 오케스트레이션 장점을 결합했습니다.

클라우드 네이티브 환경에서 Kubevirt를 활용하면 VM 관리 방식을 크게 개선할 수 있습니다. 이는 기존 VDI(가상 데스크톱 인프라) 솔루션 한계를 극복하고 가상화 환경을 효율적으로 구축하는 데 도움이 됩니다. 이 글에서는 Kubervirt의 아키텍처, 실무 도입 배경과 적용 사례를 소개하겠습니다.

Kubevirt 실무 도입 배경

expertLABS의 교재(왼쪽)와 코드 실습 환경 ‘워크스페이스’(오른쪽) | 인포그랩 GitLab
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 구성 요소

2024-10-23-kubevirt-1 | 인포그랩 GitLab

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

2024-10-23-kubevirt-2 | 인포그랩 GitLab

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 디스크 등이 있습니다.

Kubevirt 실무 적용 과정

저는 expertLABS의 실습 환경을 구축하는 데 Kubevirt를 다음과 같이 활용했습니다.

맞춤형 운영 체제 만들기

저는 Kubevirt가 expertLABS의 실습 환경을 동적으로 생성하도록 설정했습니다. 이제 저는 ‘어떤 운영 체제를 사용할지’만 결정하면 됐는데요. 운영 체제에 필요한 여러 프로그램을 미리 설치해 사용했고요. disk-image-builder를 활용해 맞춤형 운영 체제를 쉽게 만들 수 있었습니다.

이 주제는 매우 광범위하므로, 다음 블로그에서 자세히 다루겠습니다.

VM 생성 파이프라인 구축하기

2024-10-23-kubevirt-3 | 인포그랩 GitLab

저는 운영 체제를 disk-image-builder로 만들고, Kubevirt로 배포하기로 했습니다. 모든 설정은 YAML 파일로 선언되기에 Git으로 관리할 수 있죠. GitLab에서 VM 사양을 업데이트하고 커밋하면, 곧바로 Kubernetes에 적용되는 파이프라인을 구축할 수 있었습니다.

저는 이러한 파이프라인으로 VM 생성 프로세스를 자동화하고 일관성 있게 관리할 수 있었습니다. 그 결과, expertLABS의 실습 환경을 신속하게 배포하고, 업데이트할 수 있었고요. 교육 내용 변경, 코스와 수강생 맞춤형 실습 환경과 같은 다양한 요구사항을 expertLABS의 실습 환경에 빠르게 반영했습니다. 이 방식은 인프라를 코드로 관리하는 DevOps 철학과 부합해 의미 있었습니다.

맺음말

저는 Kubevirt를 활용해 VM을 관리하면서 expertLABS의 실습 환경을 획기적으로 개선했습니다. 이러한 접근 방식은 셀프 학습 환경을 구축하는 데도 적용할 수 있는데요. Kubevirt와 같은 오픈 소스 기술을 활용하면 모든 사용자가 유사한 시스템을 구축할 수 있죠. 개인 학습자부터 대규모 교육 기관까지 누구나 이 기술로 ‘자기만의 맞춤형 가상 학습 환경’을 만들 수 있습니다.

Kubernetes는 클라우드 네이티브 애플리케이션의 배포, 확장, 관리를 자동화하는 강력한 플랫폼입니다. Kubevirt를 사용하면 이러한 Kubernetes의 장점을 VM 관리에도 적용할 수 있습니다. 이는 클라우드 네이티브 환경에서 전통적인 워크로드와 컨테이너화된 워크로드를 함께 유연하게 운영하는 데 도움이 됩니다. 여러분도 Kubevirt로 VM을 실속있게 관리하며, Kubernetes의 강점을 십분 누리시길 바랍니다.

지금 이 기술이 더 궁금하세요? 인포그랩의 DevOps 전문가가 알려드립니다.