Kubevirt를 활용한 VM 및 컨테이너 통합 관리 프로젝트 1 / 개요
1. 프로젝트 문제 정의
컨테이너와 쿠버네티스를 활용하는 기업들이 늘어나고 있다. 그렇지만 대부분의 엔터프라이즈 환경에서는 VM 클러스터 구성을 많이 사용하고 있고, 가상화 환경에 맞추어진 개발프로세스와 이에 관련된 대부분의 워크로드를 당장 컨테이너 기반으로 전환하는 것은 현실적으로 어려운 일이다. 또한 시스템을 구성하는 모든 서비스를 컨테이너화할 수도 없다.
컨테이너는 보안적으로도 취약한 면이 있다. 컨테이너는 호스트OS의 통제된 영역을 사용하지만, 많은 컨테이너들이 동일한 운영체제 커널을 공유하기 때문이다. 가상머신처럼 철저하게 분리되어 있지 않기 때문에 보안이나 안정성 측면에서 문제가 발생할 수도 있다. 컨테이너 기반의 도커나 쿠버네티스의 경우 결함이 발생하여도 정상적으로 실행 할 수 있는 안전장치가 있지만, 이것도 어디까지나 동일 호스트 위에서 이루어지기 때문에, 잘못된 스케줄링이나 예기치 못한 컨테이너간의 충돌 등으로 시스템 장애를 유발하기도 한다.
따라서 서비스 일부는 컨테이너로, 일부는 VM으로 운영해야 하는 상황이 불가피하다. 그런데 그렇게 되면 시스템을 배포하고 운영하기 위해 컨테이너용 관리 도구와 VM용 관리 도구, 이렇게 두 가지 이상의 도구를 병용해야 해서 운영이 복잡해진다.
2. 프로젝트 목적
DevOps는 소프트웨어 개발과 정보기술 전문 운영자 간의 소통과 협업을 강조하고 SW제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.
기존 개발과 운영의 차이는 시스템에 문제가 생겼을 경우 개발측은 빠른 수정을 원하고 운영측은 안정적인 서비스를 제공하기에 업데이트로 인한 변화 및 서버다운, 버그 등의 불안정한 문제와 같은 리스크를 기피한다.
이러한 문제는 클라우드의 등장으로 개발과 운영의 경계가 허물어지면서 해결되었고, 결국 클라우드로 인해 DevOps가 구체적으로 실현될 수 있었다. 또한 컨테이너 기반의 효율적인 시스템 출현을 촉발시켰고, 이는 다시 기존의 클라우드를 과거보다 진일보 시키는 결과를 만들어냈다.
클라우드로 서버의 세팅과 관리가 자유로워지면서 기존 레거시 환경의 기업들은 클라우드 전환으로 PaaS를 눈여겨보자. PaaS는 애플리케이션 실행에 필요한 복잡한 환경을 구성하고 유지하는 데 큰 부담을 가지지 않고 애플리케이션 개발에 더 집중할 수 있게 구성되었으며 개발된 애플리케이션을 보다 빠르고 유연하게 배포하고 서비스할 수 있다. 이러한 장점들 때문에 PaaS는 DevOps에 적합한 솔루션으로 각광받고 있다.
이처럼 클라우드 네이티브 환경으로 전환하려면 쿠버네티스가 필수적이다. 하지만 기존 레거시 가상화환경에서 PaaS로 전환하는 것은 현실적으로 매우 어려운 일이다.
그 이유는 기존의 아키텍처를 완전히 무시하고 새롭게 구축해야하기 때문이다. 엔터프라이즈 시스템은 서버의 대수도 굉장히 많고, 서버 하나하나의 특성을 고려하여 PaaS에 맞게 새롭게 설계하는 과정에서 많은 인력이 필요하고, 아키텍처가 효율적으로 동작하는지를 검증하는 데에도 많은 시간이 소요된다. 이처럼 엄청난 비용이 발생하기 때문에 PaaS로 넘어가는 것은 결코 쉬운 일이 아니다. 대한항공 같은 대기업의 경우만 해도 전체 시스템 옮기는 데 3년이 걸렸고, 큰 규모의 기업들 대부분이 3-5년 걸린다고 하는데, 중소기업이 감당하기에는 쉽지 않은 문제이다. 따라서 기존의 VM으로 운영되는 시스템의 아키텍처를 어느 정도 선까지 유지하면서 PaaS로 이동하는 솔루션이 필요하다.
VM 클러스터 시스템에서 쿠버네티스로의 과도기에서, 이를 효율적으로 전환하는 방법으로서 kubevirt를 제시하려 한다.