가상화 기술 – 컨테이너, 도커, 쿠버네티스 개념 정리

containers

가상화(Virtualization) 기술

한 대의 컴퓨터의 여러 개의 웹 서버를 띄우고 싶을 때, 각 서버가 컴퓨터 자원(CPU, 디스크, 네트워크 등)을 공유하면서 생기는 영향을 최소화해서 효율적으로 프로그램을 실행시키려면 어떻게 해야 할까요? 이럴 때 필요한 것이 가상화 기술입니다.

가상화 기술이란 물리적인 컴퓨팅 자원(CPU, 디스크, 네트워크 등)을 가상화하여 여러 개의 실행 환경이 컴퓨팅 자원을 효율적으로 공유할 수 있도록 하는 기술입니다. 하나의 컴퓨터에 여러 환경을 동시에 실행시켜도 각 실행 환경은 분리되어 있고, 독립적이기 때문에 서로의 존재를 모르게 격리된 채로 동작합니다. 이러한 가상화 기술 덕분에 하나의 가상화 된 환경에 떠있던 프로그램에 메모리 누수가 발생하여 다운되어도, 다른 환경에 떠 있는 프로그램은 영향을 받지 않고 정상적으로 동작할 수 있습니다. 또한 한 대의 컴퓨터에 있는 컴퓨터 자원을 필요에 따라 여러 개로 나눠서 사용할 수 있기 때문에 비용 절감에도 도움이 됩니다.

virtual machine and container

가상 머신(Virtual Machine)

일반적인 가상화 기술로 가상 머신을 꼽을 수 있는데요. VM을 사용하기 위해서는, Host OS(운영체제)가 설치된 컴퓨터(하드웨어, 인프라스트럭쳐)에 하이퍼바이저(Hypervisor)라는 소프트웨어를 설치하게 됩니다. 그리고 하이퍼바이저는 여러 개의 가상 머신(VM)을 생성하고 관리하는 역할을 합니다. 흔히 알려진 하이퍼바이저에는 VMware, VirtualBox 등이 있습니다.

그리고 각 가상 머신에는 Ubuntu, CentOS 등의 Guest OS가 설치되어 있습니다. 가상 머신에는 운영체제가 설치되어 있는 만큼 많은 컴퓨팅 리소스를 사용하기 때문에 실행하는데 많은 오버헤드가 발생하기도 합니다. 단순히 분리된 환경에서 프로그램(애플리케이션)을 여러개 실행하는 목적으로 VM을 사용하기에는 적합하지 않은 느낌이 있지요.

컨테이너(container)

이러한 용도를 위해 나타난 것이 컨테이너입니다. 컨테이너는 Guest OS를 설치하지 않고, Host OS/커널을 컨테이너들끼리 공유합니다. Host OS의 입장에서 컨테이너는 프로세스일 뿐입니다. 때문에 실행 환경은 분리하고, 각 컨테이너별로 할당한 CPU, 메모리, 디스크의 쿼터(Quota)를 관리하는 것이 컨테이너의 핵심 기술입니다.

컨테이너에 물건을 담듯이, 개발자는 애플리케이션에 필요한 언어, 라이브러리, 소스 코드를 한꺼번에 번들링해서 컨테이너로 만듭니다. 컨테이너는 ‘애플리케이션 가상화’라고 이해해도 무방하겠네요. 개발자는 컨테이너 기술 덕분에 손쉽게 애플리케이션 개발 환경을 준비하고, 배포하며 개발을 할 수 있게 되었습니다.

도커(Docker)

도커는 리눅스 컨테이너에 여러 가지 편리한 기능을 추가해서 컨테이너 기술을 좀 더 쉽게 사용할 수 있는 오픈소스 프로젝트입니다. 이와 비슷한 몇가지 종류의 컨테이너 도구가 있지만, 그 중 도커는 가장 일반적으로 사용되고 있습니다. 쿠버네티스와 같은 컨테이너 기술을 활용한 프로젝트들에서도 도커 컨테이너를 기준으로 개발되고 있기 때문에, 컨테이너 기술을 공부하고 싶다면 도커를 공부하는 것이 좋겠죠?

쿠버네티스(Kubernetes)

orchestra

이렇게 컨테이너화된 애플리케이션을 여러 개를 실행시켜 일을 시키고 싶다면, 일을 너무 열심히 하다가 다운된 애플리케이션을 관리하고 싶다면, 또 각 애플리케이션간 소통이 필요하다면, 어떻게 해야할까요? 지휘자의 지휘에 맞춰 여러가지 악기가 협주를 하는 오케스트라처럼 컨테이너 오케스트레이션을 가능하게 하는 플랫폼이 바로 쿠버네티스입니다. 할 일이 많아 애플리케이션이 여러 개 구동되야 할 때는 스케일 아웃(scale-out)하고, 일이 줄어들었을 때는 다시 숫자를 줄여 스케일 인(scale-in)하는 오토 스케일링(auto scaling)이 바로 이 쿠버네티스의 핵심 기능이라고도 할 수 있으니, 잘 기억해두면 좋겠습니다. 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *