InfoGrab
InfoGrab

Kubevirt로 가볍고 빠르게 VM 사용하기

Kubevirt로 가볍고 빠르게 VM 사용하기

JeffJeff
··13 min read
Kubevirt로 가볍고 빠르게 VM 사용하기

이 글은 제가 Cloud Native Korea Community Day 2024에서 발표한 "

" 내용을 바탕으로 작성했습니다.

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

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

Kubevirt 실무 도입 배경

expertLABS의 교재(왼쪽)와 코드 실습 환경 ‘워크스페이스’(오른쪽) 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 디스크 등이 있습니다.

Kubevirt 실무 적용 과정

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

맞춤형 운영 체제 만들기

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

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

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

저는 운영 체제를 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 전문가가 알려드립니다.

⚠️
해당 콘텐츠는 저작권법에 의하여 보호 받는 저작물로 기고자에게 저작권이 있습니다.
사전 동의 없이 2차 가공 및 영리적인 이용을 금하며, 온·오프라인에 무단 전재 또는 유포할 수 없습니다.
Jeff

Jeff

DevOps Engineer

DevOps 도입이 필요하신가요?

인포그랩 전문가가 맞춤 을 도와드립니다.

관련 글

Kubernetes 제대로 아는 DevOps 엔지니어를 구분하는 8가지 질문과 답변
DevOpsKubernetes

Kubernetes 제대로 아는 DevOps 엔지니어를 구분하는 8가지 질문과 답변

DevOps 엔지니어는 단순 개발을 넘어 운영·확장·자동화까지 포괄하는 Kubernetes 역량을 갖춰야 합니다. 면접, 자격증(CKA·CKAD·CKS) 시험, 고객 대응 상황에서 K8s 개념을 제대로 설명하면, DevOps 엔지니어로서 전문성을 입증할 수 있습니다. 이 글은 면접과 실무에서 자주 등장하는 K8s 핵심 질문 8가지와 모범 답변을 정리했습니다.

2025년 11월 26일

K9s로 더 빠르게, 효율적으로 Kubernetes 관리하기
k9sKubernetes

K9s로 더 빠르게, 효율적으로 Kubernetes 관리하기

K9s는 터미널 기반의 Kubernetes 클러스터 관리 도구입니다. 이 도구는 복잡한 CLI 작업을 단축키로 간편하게 처리합니다. 에어갭 환경에서도 강력한 기능을 제공하며, 실시간 모니터링과 Pod 로그 확인, 리소스 조회 등을 빠르게 수행할 수 있습니다. 이 글은 K9s 개요와 설치 방법, 주요 기능과 고급 기능 활용법을 다뤘습니다.

2025년 7월 23일

vCluster로 배우는 Kubernetes 클러스터 격리 실전 가이드
KubernetesContainer

vCluster로 배우는 Kubernetes 클러스터 격리 실전 가이드

vCluster는 기존에 구성된 Kubernetes 클러스터 안에 가상화된 경량 Kubernetes 클러스터를 생성하는 기술입니다. 이는 물리적 클러스터와 비슷한 수준의 격리 효과를 제공하고, 전체 관리 부담과 운영 비용도 크게 줄입니다. 이 글은 vCluster 환경을 실질적으로 운용하는 데 필요한 핵심 과정을 실습 예제와 함께 다뤘습니다.

2025년 4월 30일

인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!