도커와 쿠버네티스 비교 예시
- 컨테이너를 하나만 띄워서 사용해야지! => 도커
- 0월 0시에, 100개의 컨테이너를 자동으로 생성해야지! => 쿠버네티스
- 즉, 도커는 ’이미지를, 컨테이너에 띄우고 실행하는 기술’이고
- 쿠버네티스는 '도커를 관리하는 툴'이라고 생각하시면 됩니다.
- 따라서, 도커는 '한 개의 컨테이너를 관리’하는 데 최적화 되어있고,
- 쿠버네티스는 '여러 개의 컨테이너를, 서비스 단위로 관리’하는 데 최적화 되어있습니다.
도커란?
- 도커는 '컨테이너 기반의 오픈소스 가상화 플랫폼' 입니다.
- 그렇다면, 컨테이너란 무엇일까요?
- 컨테이너는, ‘애플리케이션’과 ‘애플리케이션을 구동하는 환경’을, ‘Host OS’ 로부터 격리한 공간을 의미합니다.
- 컨테이너는 보통 마이크로서비스로 사용됩니다.
- 마이크로서비스란, 거대한 어플리케이션을 기능별로 나누어, 변경/조합이 가능하게 서비스를 의미하며,
- 컨테이너를 사용하면, 하나의 큰 어플을 서비스 단위로 잘라 빠르게 배포할 수 있기 때문에, 마이크로서비스라고 설명됩니다.
- 또한, 각각 분리해서 사용하므로, 개별 변경사항이 분리된 다른 기능들에 영향을 미치지 않습니다.
기존의 가상머신(VM)과 컨테이너의 차이점
- 기존의 가상머신(VM) 서버
- [Server → Host OS → Hypervisor → 각각의 Guest OS 가 설치된 VM 구동] (그림에는 VM 의 Host OS 가 빠져있습니다.)
- 장점
- Host OS 가 Window 여도, Guest OS 로 Linux 를 사용할 수 있습니다.
- 보안적으로, Guest OS 가 뚫렸을 경우, 다른 Guest OS 와 Host OS 가 완벽하게 분리되어 있기 때문에, 각각의 VM 에 피해가 가지 않습니다.
- 단점
- VM 마다 무거운 Guest OS 를 띄우기 때문에, Container 에 비해 속도가 느립니다.
- 장점
- [Server → Host OS → Hypervisor → 각각의 Guest OS 가 설치된 VM 구동] (그림에는 VM 의 Host OS 가 빠져있습니다.)
- 컨테이너 서버
- [Server → Host OS → Docker Engine → Container 구동]
- 장점
- 하나의 Host OS 를 공유하기 때문에, Container 별로 무거운 OS 를 띄우지 않아, Container 의 속도가 훨씬 빠릅니다.
- 단점
- Host OS 가 Window 라면, Guest OS 로 Linux 를 사용할 수 없습니다.
- 보안적으로, Container 가 뚫렸을 경우, 다른 Container 와 Host OS 가 위험해질 수 있습니다.
- 장점
- [Server → Host OS → Docker Engine → Container 구동]
- 자세한 차이점은 아래 링크를 통해 확인하실 수 있습니다.
컨테이너는 독립적이고, 동적입니다.
- 만약, 당신의 java 앱이 인기가 많아지면, 트래픽에 따라 jave 컨테이너의 수를 늘리고 줄일 수 있습니다.
- 즉, docker 덕분에, 매번 새로운 서비스를 만들 때마다 새로운 서비스를 설정할 필요가 없는 것입니다.
- 또한, 하나의 서버에서 각기 다른 환경의 컨테이너를 설정할 수 있고,
- 이 컨테이너들은 각각 분리, 독립되어 있기 때문에 더욱 효율적입니다.
쿠버네티스란?
- 쿠버네티스는 '컨테이너 오케스트레이션 툴' 입니다.
- 오케스트레이션이란?
- 컨테이너 역시 그 수가 많아지게 되면, 관리와 운영에 있어서 어려움이 따릅니다.
- 컨테이너 오케스트레이션은, 이러한 다수의 컨테이너 실행을 관리 및 조율하는 시스템입니다.
- 오케스트레이션 엔진을 통해, 컨테이너의 생성과 소멸, 시작 및 중단 시점 제어, 스케줄링, 로드 밸런싱, 클러스터링 등
- 컨테이너로 어플리케이션을 구성하는 모든 과정을 관리할 수 있습니다.
- 다른 컨테이너 오케스트레이션 툴로는 '도커 스웜', 'ECS', 'Nomad'등이 있습니다.
- 쿠버네티스 특징
- 자동화된 복구(self-healing)
- 컨테이너들을 모니터링하며, 컨테이너 중 하나라도 죽으면 쿠버네티스는 그것을 빠르게 재시작 시킵니다.
- 로드 밸런싱(Load balancing)
- 만약 1만명의 유저가 접속하지만, 당신의 웹/앱은 준비가 되지 않았을 경우
- 쿠버네티스는 해당 웹사이트의 니즈를 수용할 수 있도록
- 자동으로 새로운 컨테이너들을 만들 수 있습니다.
- 또한, 니즈가 줄어들면 컨테이너의 숫자를, 지정해둔 최소 숫자로 자동으로 조절합니다.
- 이전에는 수동으로 했던 작업들을 쿠버네티스가 자동으로 도와주는 것입니다.
- 무중단(Fault tolerance-FT) 서비스
- 기업에서는, 서버 업데이트를 위해서 사용자들이 잠든 새벽 시간을 활용하거나, 긴급 점검의 형태로 서비스를 일시 중단해왔습니다.
- 하지만, 쿠버네티스는 점진적 업데이트를 제공하기 때문에, 서비스를 중단하지 않고도 애플리케이션을 업데이트할 수 있습니다.
- 호환성(Vendor Lock In 해결)
- 고객이 A사의 클라우드를 사용하다가 I사의 클라우드로 환경을 이전하고 싶을 때,
- 서로 다른 업체(Vendor)의 클라우드 제품 간에 호환 문제가 발생하여 이전하기 어려운 상황을 Vendor Lock In 이라고 합니다.
- 쿠버네티스는 도커 컨테이너를 기반으로 하는 오픈소스이기 때문에, 사용자들이 특정 업체에 종속되지 않고 클라우드의 환경들을 이전할 수 있습니다.
- 또한, 한 번 쿠버네티스를 익히면 provider 회사에 상관없이 공통된 마이크로서비스 아키텍쳐 개발이 가능합니다.
- 자동화된 복구(self-healing)
요약
- 도커와 쿠버네티스는 상황마다 다르게 사용됩니다.
- 한 개의 컨테이너만 사용한다면 쿠버네티스는 필요 없습니다.
- 쿠버네티스는 많은 컨테이너 관리에 유용합니다.