2022. 1. 14. 23:35ㆍDevOps/Docker & kubernetes
컨테이너 기술을 왜 기업들이 주목하게 되었는가?를 알아보기 위해서는 먼저 기존 생태계가 어떻게 형성되어 있고 진화하고 있는지를 알아봐야한다. 서비스 배포에 있어서는 총 4가지의 방법이 있는데 아래의 그림을 먼저 살펴보도록 하자. 전통적인 3가지의 방법에 대한 그림이다.
Traditional Deployment
일반적으로 서버 어플리케이션을 운용하는 방법으로는 서버 어플리케이션을 운용하는 방법으로 생각한다. 한개의 서버(HD/OS)에 의존성(Libs & Framworks)을 설치하고 그 위에 App이나 cord 등을 실행함으로 동작하곤 했다.
하지만 서비스가 점점 커지고, 종류가 다양화 되었다고 가정해 보자. 이때 각각 app이 가지는 의존성이 전부다 같을 수 도 있지만 대부분의 경우 그렇지 않을 것 이다. 이것은 업무의 효율성 감소를 유발시키며 App의 확장성도 낮아지게 되는 결과가 나타나게 되었다.
개발자들은 이것을 방지하기 위해 App를 sandbox(app을 독립된 공간에서 사용할 수 있도록 하는 것)하는것을 추구하게 되었다.
Virtualized Deployment
그 결과 가상화 라는 방법이 나타나게 되었는데 우리가 흔히 알고 있는 vmwere와 같은 것들이다. 가상머신은 운영체제 간에 Hypervisor를 통해 GuestOS를 만들어 사용하게 되었다.
컴퓨터 안의 컴퓨터를 실행하는 개념이다. 장점으로는 각각의 환경이 보장되기에 서로 침범되거나 작업으로 인해 손상되는 일이 없다. 하지만 오버헤드가 크게 발생할 수 있으며 Host의 pc 보다는 성능이 낮을 수 밖게 없다. 이것을 해결하기 위해 비용의 증가가 나타나게 되었는데, 부채, 지출 등을 늘리고 싶어하는 회사는 없을 것 이다.
그 결과 컨테이너 라는 방식이 나타나게 되었는데...
Container Deployment
기본적으로 Host운영체제에 GuestOS를 커널공유를 통해서 사용한다. 가상머신을 따로 실행하지 않기 때문에 성능면에서 host와 유사한 성능을 발휘할 수 있다. 이런 환경을 바탕으로 하여 컨테이너를 형성하며 실행하는데, 특징으로는 이 컨테이너 안에는 바이너리와 라이브러리와 같은 필수적인 의존성만을 투입해 둔다.
그렇기 때문에 경량화가 장점이 되며, 오버해드가 굉장히 작다. 그렇기에 가상머신에 비해 월등히 성능이 높다. 또다른 운영체제를 띄울 필요 없이 하나의 소스에서 독립된 환경에서 만들 수 있기에 비용절감, 확장성 증가 등과 같은 효율성 증가가 대두 되었다.
즉 단순 성능을 비교하자면 다음과 같은 도식이 나타나게 된다.
Traditional Deployment >= Container Deployment > Virtualized Deployment
Kubernetes Deployment
Container Orchestration라고도 한다. 기본적으로 Container 엔진은 서버 1대에서 동작하며 스케쥴링과 같은 관리 등을 하는 소프트웨어다. 그런데 여러 서버에서 컨테이너를 어떻게 잘 스케쥴링하며 관리할 것인지에 대해 고민하는 것 이라고 할 수 있다.
즉 기존의 Container Deployment는 1서버 1Container, Kubernetes는 多서버 多컨테이너 배포 관리를 한다고 보면 된다.
'DevOps > Docker & kubernetes' 카테고리의 다른 글
Docker Network 구조 (0) | 2022.01.18 |
---|---|
Docker 기본 개념 part.2 (Entrypoint, 환경변수, 실행 명령어) (0) | 2022.01.17 |
Docker 기본 개념 part.1 (container의 life cycle) (0) | 2022.01.16 |
Docker images와 Container (0) | 2022.01.16 |
Ubuntu 에서 Docker설치하기 (0) | 2022.01.16 |