안녕하세요? 클라우드의 차세대 트렌드 기술인 쿠버네티스와 컨테이너를 처음 접하는 분들을 위해 간략하고 쉬운 개념 설명을 준비했습니다. 컨테이너와 쿠버네티스를 사용하는 목적을 중점으로 소개 드리겠습니다.

컨테이너란 무엇인가?

사전적 의미로 컨테이너는 어떤 물체를 격리하는 공간을 뜻합니다. 클라우드에서 컨테이너는 어떤 의미를 가질까요? 컨테이너는 애플리케이션과 애플리케이션을 구동하는 환경을 격리한 공간을 뜻합니다. 컨테이너 기술은 약 10여 년 전에 리눅스에 내장된 기술로 소개되었으며, 현재는 차세대 트렌드 기술로 주목받으며 클라우드 서비스 환경에 적용되고 있습니다.

왜 컨테이너인가?

ㄱ. 가상머신과 컨테이너의 차이점
가상머신 서버에서는 하이퍼바이저로 하드웨어를 가상화하고, 그 위에 Guest OS가 설치된 가상 머신들을 구동시켰습니다. 반면에 컨테이너 서버는 운영체제 레벨에서 CPU, RAM, Disk, Network 등의 자원을 격리하여 컨테이너에 할당하기 때문에 게스트 OS가 따로 필요 없습니다

container

1) 효율성
기업환경에서는 안정적인 운영을 위해, 1개의 가상머신(VM, Virtual Machine)에 1개의 서비스를 구동하는 것이 권장됩니다. 이의 경우 가상머신의 모든 자원을 사용하는 것이 아니기 때문에 성능적 오버헤드가 발생합니다. 반면 컨테이너의 경우, OS 커널을 공유하기 때문에 자원을 필요한 만큼 효율적으로 사용할 수 있습니다.

2) 신속성
사용자의 서비스 요청량이 증가함에 따라, 기업에서는 가상머신이나 컨테이너를 추가적으로 배포합니다. 가상머신의 크기는 최소 몇 GB이지만, 컨테이너의 경우 Guest OS가 없어 MB단위의 크기를 가집니다. 결과적으로 가상머신은 배포하는데 수 분에서 수십 분의 시간이 소요되지만, 컨테이너는 배포에 소요되는 시간이 수 초에 불과합니다.

3) 라이센스 비용 절감
가상화 서버의 경우 가상머신의 개수만큼 Guest OS의 라이센스 비용이 발생합니다. 반면에 컨테이너 서버의 경우 Host OS 1대의 라이센스 비용만 발생합니다. 만약 서버의 수가 많아진다면 비용의 차이도 기하급수적으로 증가할 것입니다.

4) 안정성
가상머신의 경우 정확히 할당된 자원 내에서 가상머신이 운영되기 때문에, 컨테이너에 비해 안정적으로 운영할 수 있습니다. 반면에 컨테이너들은 OS 커널을 공유하기 때문에, 하나의 컨테이너가 무리하게 자원을 사용하게 될 수 있습니다. 자원 할당량을 사전에 지정시켜줄 수 있지만, 만약 이런 상황이 발생하면 컨테이너에 장애가 발생합니다. 이런 컨테이너의 문제는 뒤에 등장할 쿠버네티스로 해결할 수 있습니다.

ㄴ. 개발 환경 이전 솔루션
주로 애플리케이션을 개발할 때는 개인 환경에서 개발을 하고, 통합 환경에서 코드를 통합합니다. 그 다음 테스트 환경을 거쳐 실제 운영 환경으로 이전하게 됩니다. 이렇게 수차례 환경을 이전하다 보면 소프트웨어의 버전이나 서버 설정의 차이로 인해 다양한 장애가 발생하기도 합니다. 이때, 컨테이너에 애플리케이션과 애플리케이션을 구동하는 환경을 그대로 담아서 환경을 이전하면, 장애 걱정 없이 신속하고 안정적으로 환경을 이전할 수 있습니다.


ㄷ. 마이크로 서비스화 솔루션

기업에서는 애플리케이션을 배포할 때 오랜 시간이 소요되거나, 작은 부분을 수정했을 뿐인데 애플리케이션 전체에 문제가 발생하는 것을 경험합니다. 이는 애플리케이션이 거대한 덩어리처럼 구성되어있기 때문인데, 이런 애플리케이션을 기능별로 나누어 변경과 조합이 가능하게 한 것을 마이크로 서비스(Micro Service)라고 합니다. 마이크로 서비스를 컨테이너로 구성하면 애플리케이션을 기능 혹은 서비스 단위로 신속하게 배포할 수 있습니다. 또한, 컨테이너는 독립적인 구조이기 때문에, 하나의 변경 사항이 다른 기능들에 영향을 미치지 않습니다.

monolith

쿠버네티스란 무엇인가?

앞서, 컨테이너를 사용하면 서버의 자원을 효율적으로 사용할 수 있다고 말씀드렸습니다. 하지만 컨테이너가 너무 많아진다면 어떻게 될까요? 관리와 운영이 어려워지고, 오히려 효율성이 떨어지게됩니다. 이 문제를 해결해주는 툴이 쿠버네티스(Kubernetes)입니다. 쿠버네티스는 컨테이너 오케스트레이션 플랫폼 중 하나로, 구글이 자사 서비스를 위해 개발했던 Borg에서 얻은 운영 노하우를 오픈소스로 공개한 것 입니다.

왜 쿠버네티스인가?

1. 무중단(Fault tolerance-FT) 서비스 제공
때때로 서비스를 받는 사용자들은, 서비스 개선을 위해 서버점검 중이라는 안내문을 보게 됩니다. 기업에서는 서버 업데이트를 위해서 사용자들이 잠든 새벽 시간을 활용하거나, 긴급 점검의 형태로 서비스를 일시 중단해왔습니다. 하지만, 쿠버네티스는 점진적 업데이트를 제공하기 때문에 서비스를 중단하지 않고도 서버를 업데이트할 수 있습니다. 또한, 쿠버네티스는 자가 회복(Self Healing) 기능을 가지고 있어, 특정 컨테이너에 갑작스러운 장애가 발생하더라도 곧바로 복제 컨테이너를 생성해서 서비스를 유지할 수 있습니다.

2. Vendor Lock In 해결.
고객이 A사의 클라우드를 사용하다가 I사의 클라우드로 환경을 이전하고 싶을 때, 제품 간에 호환 문제가 발생하여 이전하기 어려운 상황을 Vendor Lock In이라고 합니다. 쿠버네티스는 도커 컨테이너 기반의 오픈소스이기 때문에, 사용자는 특정 업체에 종속되지 않고 클라우드를 이전할 수 있습니다.


Q&A

1. 컨테이너로 개발 환경을 세팅할 수 있다던데, 가상머신은 그런 방법이 없나요?
Vagrant는 가상머신을 쉽게 생성하고 관리하게 하는 서비스입니다. 하이퍼바이저에 논리적인 가상 하드웨어 머신을 생성한 다음, 가상머신에 OS를 설치하고 일일이 모든 설정을 해야 하는 기존의 VM가상화 작업을, 단 몇 줄의 명령어로 처리할 수 있는 서비스입니다. 굳이 컨테이너와 vagrant의 비교를 하자면, 신속하게 여러 컨테이너를 생성하고 반복적인 테스트를 하기에는 컨테이너를 사용하는 것이 적합 합니다. Vagrant는 Guest OS를 포함한 안정적인 가상 공간을 조금 더 신속하게 만들기에 적합합니다.

2. 테라폼은 무엇인가요?
테라폼(terraform)은 다양한 클라우드에 가상머신을 배포하는 인프라 프로비저닝 도구입니다. Infrastructure as a Code의 개념으로 클라우드의 자원을 코드화해서, 코드로 쉽게 Cloud 자원을 생성, 변경 및 삭제를 하게 해줍니다.

3. 컨테이너 오케스트레이션이 무엇인가요?
쉽게 말하자면, 여러개의 컨테이너를 편리하게 관리해주는 작업을 뜻합니다. 그리고 실제로는 스케줄링, 클러스터링, 서비스 디스커버리, 로깅 및 모니터링을 수행합니다.

스케줄링: 컨테이너를 비교적 가장 여유로운 노드에 자동 배치합니다. 작업 노드가 죽으면 실행 중이던 컨테이너를 다른 노드에 옮겨주는 역할도 수행합니다.
클러스터링: 여러 개의 노드를 묶어 하나처럼 사용할 수 있습니다. 즉 모든 컨테이너가 내부통신을 할 수 있습니다.
서비스 디스커버리: 컨테이너가 자동으로 배치되기 때문에 어디에 배치되었는지 찾는 임무를 수행합니다.
로깅 및 모니터링: 로그를 관리하고 직접 또는 다른 툴을 사용해 보여줄 수 있습니다.

4. 쿠버네티스가 FT(Fault Tolerance)를 제공한다고 했는데, HA(High availability)랑은 어떤 차이가 있나요?
FT는 무중단 서비스로 작은 장애에도 동작이 멈추지 않고 서비스가 지속되는 것을 말합니다. 쿠버네티스는 특정 컨테이너가 죽었을때, 즉각 복제 컨테이너를 생성해서 서비스를 유지합니다. 하지만 컨테이너가 죽은 순간의 몇 초 동안은 서비스에 장애가 발생할 수 있습니다. 이를 대비해, 쿠버네티스는 동일한 서비스를 제공하는 컨테이너를 이중, 삼중으로 만들어 HA(고가용성)을 유지할 수 있습니다.

5. Docker file을 사용하다보면 Linux위에 Centos나 Ubuntu를 깔기도 하던데, 그러면 Guest OS를 설치하는 게 아닌가요?
아닙니다. Host OS가 Linux고 컨테이너의 Base Image를 Centos로 구동하게 되면, Linux와 Centos의 다른 부분(diff)만 따로 패키징 하는 것입니다. 결과적으로 Guest OS가 생기는 것이 아니기 때문에 훨씬 가볍습니다.


참고문헌

쿠버네티스 아키텍처: https://developer.ibm.com/kr/cloud/2017/07/29/kubernetes-cloud-private/
컨테이너: http://bongbonge.tistory.com/entry/컨테이너-기술에-대한-이해
오케스트레이션: https://subicura.com/2017/02/25/container-orchestration-with-docker-swarm.html
Vagrant: http://bcho.tistory.com/806

토론 참가

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.