본문 바로가기
독서/AWS 구조와 서비스

4. 컨테이너의 구조와 특징 이해

by Thinking 2023. 12. 8.

 컨테이너는 어떤 응용 프로그램을 실행할지 미리 정의해둔 파일을 바탕으로 실행된다. 이것을 컨테이너 이미지라고 한다. 컨테이너의 가장 큰 특징 중 하나는 가상화에 비해 가볍고 빠르다는 것이다. 컨테이너에 포함된 것이 적기 때문이다. 가상 서버를 기동한다면 OS, 미들웨어, 응용 프로그램 등이 필요하다. 따라서 가상 서버 이미지에는 이러한 파일이 모두 포함된다. 반면 컨테이너는 응용 프로그램 프로세스만 시작된다. 컨테이너 이미지도 기본적으로 응용 프로그램을 실행하기 위한 의존성 패키지만 포함되므로 가상 서버에 비해 가볍다.

가상 서버는 일반 서버와 마찬가지로 OS -> 미들웨어 -> 응용 프로그램이 실행되지만, 컨테이너는 직접 응용 프로그램을 실행한다. 처리 역시 OS에 대한 오버헤드가 없는 만큼 가상 서버보다 빠르다. 

 

VM - 응용 프로그램 처리는 하이퍼 바이저를 통해 호스트 서버 자원을 이용해 수행한다. 경유하는 것이 많은 만큼 오버헤드가 생긴다.

컨테이너 - 응용 프로그램은 컨테이너 런타임을 통해 호스트 서버 자원을 이용해 실행한다. 

 

 온프레미스나 EC2와 같은 '서버'에서라면 개발 환경과 상용 환경의 의존성 환경을 맞춰야 하며, 개발자의 PC에도 동일한 라이브러리를 설치해 동작을 확인해야 하지만 컨테이너에서는 이런 작업이 풀필요하다. 주의할 점은 컨테이너는 기본적으로 '완성된 이미지'이므로 컨테이너가 종료되면 안에 저장된 내용이 사라진다. 따라서 컨테이너가 실행될 호스트 서버의 디렉터리를 마운해서 작업 내용을 저장하는 등의 처리를 해야한다.

 

 컨테이너를 이용해 실제 서비스를 운영할 때 각 기능을 여러 컨테이너로 분리해 여러 컨테이너를 하나의 시스템처럼 유기적으로 결합해 사용하는 경우가 많다. 이때 컨테이너를 모두 따로 관리하려고 하면 관리 부하가 굉장히 높아진다. 하지만 컨테이너 오케스트레이션 도구를 이용하면 이러한 관리를 자동화해 운영 부하를 줄일 수 있다

 

*하이퍼바이저는 가상머신을 생성하고 구동하는 소프트웨어입니다. 가상 머신 모니터라고도 불리는 하이퍼바이저는 하이퍼바이저 운영체제와 가상 머신의 리소스를 분리해 VM의 생성과 관리를 지원합니다. 하이퍼바이저로 사용되는 물리 하드웨어를 호스트라고 하며, 리소스를 사용하는 여러 VM을 게스트라고 합니다.

 

 

ECS로 누리는 컨테이너의 장점

AWS에서 컨테이너 시스템을 구축하는 경우 일반적으로 Amazon Elastic Container Service(ECS) 와 Amazon Elastic Kubernetes Service(EKS)라는 두 가지 서비스 중에서 선택할 수 있다. 두 서비스의 차이점은 컨테이너 오케스트레이션 기능ㅇ을 AWS가 담당하느냐, 쿠버네티스가 담당하느냐다.

 

ECS는 AWS의 관리형 컨테이너 오케스트레이션 서비스다. 컨테이너 오케스트레이션 도구를 구축하고 관리하기 위해서는 상당한 시간과 노력이 들지만, 이 부분을 AWS에 모두 맡길 수 있다. 그리고 Amazon Elastic Container Registry(ECR)라는 컨테이너 이미지 레지스트리 서비스도 제공한다. 이를 이용하면 사용자 정의된 컨테이너 이미지를 AWS에서 관리할 수 있고 ECS에도 쉽게 배포할 수 있다.

ECS : 컨테이너 배포, 상태 모니터링, 스케줄링 관리, 작업 정의를 기반으로 설정된 컨테이너의 상태와 수를 유지한다.

태스크 정의 : 컨테이너 이밎, 실행 수와 같은 태스크 설정을 정의

노드 : 컨테이너를 실행하는 서버, ECS의 경우 EC2 인스턴스 또는 Fargate를 선택할 수 있다. ECS에서 기동하는 컨테이너는 테스크라는 개념으로 정의된다.

ECR : 컨테이너 이미지를 관리하는 레지스트리. 빌드한 사용자 정의 이미지를 관리하고 ECS로 배포 가능하다.

 

EC2는 EC2 인스턴스 내에서 실행되는 컨테이너 런타임에서 컨테이너를 실행하는 타입이다. 이 경우 사용자가 컨테이너 런타임이 설치된 서버(EC2 인스턴스)를 관리해야한다.

 

반대로 Fargate는 AWS에서 관리하는 서버에서 컨테이너를 실행한다. Fargate는 컨테이너 런타임, OS 버전업과 같은 서버 관리를 AWS에서 하므로 사용자는 컨테이너 이미지만 관리하면 된다. 서버의 컨테이너 런타임, OS와 같은 버전은 플랫폼 버전(PV)으로 관리되므로 Fargate를 실행할 때 이 PV를 지정해야 한다.

 

쿠버네티스 구성 요소

1) 컨트롤 플레인 : pod의 스케줄링이나 상태 감시, 스케일링 지시 등을 수행하는 구성요소, AWS에서 관리하므로 노드나 고가용성 고려 X

2) 노드 플레인 : 응용 프로그램이 포함된 pod를 실제로 움직이는 환경. 실행 단위가 되는 컨테이너의 집합이다.

3) 노드 : EC2 Or Fargate 선택이 가능하고, EC2를 선택하면 관리 노드 그룹을 사용해 노드 플레인 단위로 AMI 업데이트 등 조작 가능.

 

 

서버 지식 없이 사용할 수 있는 서비스 5개

EC2나 ECS, EKS는 구축의 자유도가 높고 익숙해지면 어떤 시스템이라도 구축할 수 있다. 하지만 서버 지식 없이 자신이 만든 응용 프로그램을 바로 실행해보는 정도의 간단한 시스템을 바로 구축해보고 싶은 사용자를 위해 적절한 구성을 즉시 제공하는 컴퓨팅 서비스도 제공한다.

 

1) AWS Lightsail

AWS Lightsail은 일반적으로 자주 사용되는 구성의 가상 서버를 쉽고 빠르게 구축하기 위한 서비스다. 알기 쉬운 아이콘과 설명으로 구축 화면이 표시되고 순서대로 클릭해 가는 것만으로 간단히 지정한 소프트웨어가 설치된 가상 서버를 생성할 수 있다. 서비스 자체는 단순하지만 여러 인스턴스를 만들면 자동으로 LB을 지원하거나 SSL/TLS 인증서를 통한 통신 암호화도 대응하는 등 기본적인 기능은 제대로 준비돼 있다.

-> 지정된 미들웨어를 설치한 가상 서버를 제공한다. 응용 프로그램의 프로그램 배포나 세부 설정은 사용자가 수행한다.

 

2) AWS Elastic Beanstalk

AWS Elastic Beanstalk은Java, .NET, PHP, Python, Ruby, Go, Docker와 같은 주요 언어나 환경에서 개발된 응용 프로그램을 배포하기 위한 실행환경을 자동으로 만들어주는 서비스이다. 플랫폼을 지정해 응용 프로그램 코드를 업로드하면 EC2, RDS, S3와 같은 AWS자원이 자동으로 구축되고 응용 프로그램이 배포된다.

-> EC2나 RDS를 사용해 지정한 미들웨어를 동작시킬 실행 환경을 구축한다. 응용 프로그램 배포까지 Beanstalk이 진행한다.

 

배포 방법은 3가지가 존재한다.

[1] ALL at once -> 모든 인스턴스의 응용 프로그램을 한 번에 교체하는 방식, 교체 중에는 서비스가 중지된다.

[2] 롤링 방식 -> 각 인스턴스의 응용 프로그램을 순서대로 교체하는 방식, 교체 중인 인스턴스만 서비스가 정지되므로 전체적으로는 서비스를 계속 제공할 수 있다.

[3] 불변 방식 -> 새로운 응용 프로그램을 배포한 인스턴스를 만든 뒤 기존 인스턴스를 삭제하는 방식이 있다.

 

3) AWS App Runner

AWS App Runner는 컨테이너화 된 응용 프로그램을 손쉽게 배포하는 서비스다. 컨테이너 이미지를 지정하고 서비스 포트나 Auto Scaling 같은 몇 가지 설정만으로 컨테이너를 Fargate에 배포할 수 있다.

-> 지정된 컨테이너가 Fargate에서 실행된다. LB나 Auto Scaling 기능도 자동으로 실행한다.

 

4) AWS Batch

AWS Batch는 지정된 프로그램을 EC2나 Fargate에서 실행하는 서비스다. Lambda와 똑같이 보이지만 실행 프로그램의 순서 관리나 다수 프로그램의 병렬 구동과 같은 복잡한 제어에 특화된 서비스다.

-> 지정한 프로그램 EC2 등에서 실행시킨다. 설정에 따라 부팅 순서 제어, 병렬 구동 등이 자동으로 수행된다.

 

5) AWS Outposts

AWS Outposts는 사용자가 온프레미스 환경에서 AWS를 실행할 수 있도록 AWS가 물리 서버를 대여하는 서비스다. 즉, AWS를 프라이빗 클라우드화해서 제공하는 서비스다. AWS Outposts는 데이터 센터에 설치할 수 있는 서버 기기 세트가 제공되며 내부에는 EC2나 ECS, RDS, S3와 같은 서비스가 동작하게 만들어졌다. 이를 데이터 센터에 설치해 AWS와 인터넷으로 연결하면 데이터 센터에 AWS 일부 서비스를 가져온 것처럼 이용할 수 있따. 조금 어려운 표현이지만 AWS Outposts를 AWS의 새로운 가용 영역으로 사용할 수 있다.

-> AWS Outposts 사용하면 가용 영역이 늘어난 것 처럼 AWS 서비스를 사용할 수 있다.

 

'독서 > AWS 구조와 서비스' 카테고리의 다른 글

6. 네트워크 용어 & VPC  (0) 2023.12.09
5. 스토리지 서비스  (0) 2023.12.08
3. 컴퓨팅 서비스(하)  (0) 2023.12.06
2. 컴퓨팅 서비스(상)  (1) 2023.12.05
1. AWS 기초지식  (1) 2023.12.05