컨테이너 기술의 발전
일단 서버에서 어플리케이션이 어떻게 구동되는지 패러다임을 간단히 살펴보고 여기에서 컨테이너 기술인 Docker와 Kubernetes가 어떻게 활용되는지 살펴보도록 하겠습니다.
Traditional Deployment
보통 Operating System & Hardware가 하나의 서버라고 할 수 있을겁니다. 그리고 여기에다 라이브러리와 프레임워크를 다운하게 되고, 그 위에서 애플리케이션 로직 코드를 받게 됩니다. 여기까지 볼때는 큰 문제점을 느낄 수 없을겁니다. 다만 한 서버 내에서 구동하는 어플리케이션의 종류가 어려대가 될 경우, 아래와 같이 어플리케이션간의 의존성이 생기게 되고, 여기에서는 다른 버전의 라이브러리를 설치하기 위해서는 Tricky한 방법이 사용되어야 하므로, 어플리케이션의 확장성과 효율성이 확 떨어지게 됩니다.
그래서 이 문제를 해결하기 위해 이 하나의 어플리케이션을 샌드박싱 해야겠다는 생각을 기본적으로 하게 됩니다!. 샌드박싱 하게되면 다른 어플리케이션이 침범하지 못하도록 방지하는 기능을 할 수 있게 됩니다.
그리고 이를 해결하기 위해 가상화 방법을 고안해 내게 됩니다.
Virutalized Deployment
가상 머신은 운영체제 위에, Hypervisor를 통해서 동작하게 됩니다. 이 컴포넌트를 통해서 Guest OS라는 것을 만들게 됩니다. GuestOS는 Hypervisor를 통해서 컴퓨터 한 대를 애뮬레이션 하는 거라고 보시면 됩니다. 컴퓨터가 동작하기 위해서는 CPU / RAM / HDD등 많은 장비들이 필요합니다. 하지만 Hypervisor는 HostOS의 이 장비들을 프로그램 형식으로 GuestOS에 제공하여 장비들을 가상으로 제공하게 됩니다. 말 그대로 컴퓨터 안에 컴퓨터를 실행한다고 보시면 됩니다.
만약 App1을 GuestOS에 하나 띄운다면 하나의 어플리케이션을 샌드박싱 한 것이라고 보시면 됩니다. 이렇게 되.면 당연히 확장성도 위와는 다르게 많이 늘어나게 될 것입니다. 다양한 GuestOS를 띄우면 되니까요
이 GuestOS간에는 서로 영향을 주지 않기도 하죠. 다만 여기서 큰 단점은 위에서 말한 CPU / RAM / HDD를 시뮬레이션 하기에 너무 많은 오버헤드가 발생하게 됩니다. 그리고 기존의 장비보다 성능이 괜찮을리가 없습니다. 따라서 성능도 매우 떨어지게 됩니다. 업무의 확장성과 효율성은 챙길 수 있게 되지만, 성능이 떨어지고 오버헤드 ( 비용 )이 많이 증가하게 됩니다.
그리고 이 문제점을 해결화기 위해서 앞으로 우리가 알아볼 Container Deployment가 등장하게 됩니다.
Container Deployment
컨테이너 배포에서는 HostOS위에 GuestOS를 띄우지 않습니다. 하지만 Container를 띄우는데, 이가 GuestOS처럼 동작은 하게 됩니다. GuestOS ( Container ) < ---- > HostOS간의 커널을 공유하게 됩니다. 따라서 예상하셨겠지만 공유하기 떄문에 시스템적인 부분은 HostOS와 공유하게 되고, HostOS의 커널 위에서 SandBoxing된 여러 기술들을 통해서 구현하게 됩니다 ( chroot, ...기술을 통해서 )
이를 통해서 아하나의 Container1이 생성되고 이 위애허 애플리케이션 배포와 실행에 필요한 App Binary와 Lib의존성이 들어가게 되서 굉장히 경량화 되고 오버헤드도 위와는 다르게 줄어들게 됩니다. 그리고 가상머신보다 성능도 당연히 높아지게 됩니다.
이렇게 되면 독립된 환경에서 서로다른 Container를 띄울 수 있게 되니까 성능 감소도 적고 비용도 조금들고, 확장성도 좋고 하다보니까 업계에서 주목하게 됩니다.
그리고 이 컨테이너 기술중에 가장 유명한 것이 Docker입니다. 그리고 다음으로는 Kubernetes로 넘어가게 됩니다.
Kubernetes Deployment
Kubernetes는 Container Orchestration프로그램이라고 보시면 됩니다. Docker는 말 그대로 컨테이너를 만드는 컨테이너 엔진입니다. 이는 서버 한 대에서 동작하게 됩니다. Docker는 서버 한대에서 동작하게 됩니다. 서버 한대에서 컨테이너들을 잘 스케쥴링 하는데 사용된다면, Kubernetes는 여러 서버들에 대해서 컨테이너들을 어떻게 스케쥴링하고 어떻게 관리할 것인지에 대한 기술이 됩니다.
그리고 쿠버네티스 1.2v까지는 Docker가 메이저한 컨테이너 RunTime이 됩니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ Docker && Kubernetes ] - 도커 컨테이너 다루기 & 컨테이너 라이프사이클 (0) | 2022.08.27 |
---|---|
[ Docker && Kubernetes ] - 도커 이미지와 컨테이너 (0) | 2022.08.27 |
[ DevOps ] - (테라폼을 이용한 인프라 관리) 실습 AWS VPC에 OpenVPN구성 (1) | 2022.08.03 |
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 워크스페이스 디렉토리 구성 전략 (0) | 2022.08.03 |
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 Provisioner와 EC2 Userdata (0) | 2022.08.03 |