시스템 아키텍처를 구성할 때 컨테이너를 정말 많이 사용하고 있습니다. 제가 써본 컨테이너로는 도커가 있습니다. 도커가 이미지를 통해 컨테이너를 잘 구성할 수 있기에 정말 많이 사용하고 있는 것 같습니다. AWS에서도 컨테이너를 지원해주는 기술이 있습니다. 오늘은 컨테이너를 공부해보고 AWS에서 어떻게 사용하는지 알아 볼 것입니다.
컨테이너란?
컨테이너는 소프트웨어를 패키지화하는 방법으로, 코드와 모든 종속성을 함께 묶어서 독립적으로 실행할 수 있는 표준 단위를 생성합니다. 컨테이너는 어떤 환경에서도 동일하게 작동하도록 설계되었습니다.
가성 머신 VS 컨테이너
제가 공부하고 있는 책에서는 가상 서버를 아파트, 컨테이너를 셰어 하우스에 비교했습니다.
가성 서버 | 컨테이너 |
1 대의 물리 서버에서 복수의 가상 서버가 동작합니다. | 1개의 물리 서버에 여러 컨테이너가 동작합니다. |
가상 하드웨어 위에 OS, 미들웨어가 설치돼 그 위에서 프로세스가 실행됩니다. | 서버의 OS와 물리 자원은 각 컨테이너가 공동으로 이용합니다. |
각 컨테이너는 네트워크가 분리돼 있지만 외부 네트워크와의 통신이나 컨테이너 간 통신을 할 때 컨테이너 런타임을 통해 이루어집니다. |
컨테이너 특징
- 경량 : 컨테이너는 호스트 시스템의 커널을 공유하고 실행되므로, 별도의 운영체제를 필요로 하지 않아 가상 머신에 비해 훨씬 가볍습니다.
- 일관성: 컨테이너는 코드와 모든 종속성을 함께 포함하므로, 개발 환경과 운영 환경 간의 차이를 최소화합니다.
- 격리성: 각 컨테이너는 서로 격리되어 있으며, 이는 프로세스가 서로 간섭하지 않도록 합니다.
- 보안: 격리된 실행 환경 덕분에, 애플리케이션 간에 시스템 리소스를 안전하게 분할할 수 있습니다.
- 모듈성과 스케일링: 애플리케이션의 개별 부분을 독립적으로 배치 및 업데이트할 수 있으며 필요에 따라 쉽게 스케일링 할 수 있습니다.
이미지란?
컨테이너를 만들기 위해서는 이미지가 필요합니다. 이미지를 빌드 함으로 써 컨테이너 실행에 필요한 파일을 이미지에 포함 시킵니다. 이런 이미지를 기반으로 여러 컨테이너를 실행 시킬 수 있습니다.
가볍고 빠른 컨테이너
위에서 봤듯이 컨테이너는 가상 서버보다 포함 된 것이 적습니다. 가상 서버를 가동하면 OS, 미들웨어, 응용 프로그램 등이 필요합니다(크기가 GB단위). 하지만 컨테이너는 응용 프로그램 프로세스만 시작됩니다(크기가 수백 MB단위). 컨테이너 이미지도 기본적으로 응용 프로그램 실행하기 위한 의존성 패키지만 포함되므로 가성 서버에 비해 가볍습니다.
- 가상머신에 비해 컨테이너는 빠르게 시작됩니다.
- 가상 서버는 일반 서버와 마찬가지로 운영체제가 시작된 후 미들웨어, 응용 프로그램이 실행되는 형태입니다.
- 컨테이너는 직접 응용 프로그램을 실행합니다.
- 처리 속도 역시 OS에 대한 오버헤드가 없는 만큼 가상 서버보다 빠릅니다.
베포의 용이성
학교 수업시간에서도 배운 내용입니다. 이미지는 한번 생성하면 그 이미지를 다른 서버에서 사용할 수 있습니다. 학교 수업에서는 전시회를 예를 들어 설명해주셨습니다. 이미지는 전시회를 하기 위해 만들어논 데이터이고 이것 만 있으면 전시회를 전국어디에서 할 수 있다고 하셨습니다.
결국 개발이 끝난 이미지는 어느 환경에서 사용해도 동일한 동작을 보장합니다.
또, 컨테이너 이미지는 바로 압축 파일 형태로 내보내거나 가져오기를 수행할 수 있습니다. 이미지 리포지토리를 이용해 이미지를 업로드하거나 내려받을 수 있습니다.(Docker Hub)
하지만 컨테이너는 기본적으로 '완성된 이미지' 입니다. 그래서 컨테이너를 종료하면 안에 저장된 내용이 사라집니다. 학교 수업시간에는 이것을 해결할려고 마운트에 대해 배웠습니다. 마운트 작업을 해서 내용을 저장하는 등의 처리를 해야 합니다.
컨테이너 오케스트레이션
컨테이너를 이용해 실제 서비스를 운영할 때 각 기능을 컨테이너로 분리해 여러 컨테이너를 하나의 시스템처럼 유기적으로 결합해 사용하는 경우가 많습니다. 이때 컨테이너를 모두 따로 관리하려고 하면 부하가 굉장히 높습니다.
이런 문제점을 해결하기 위해 컨테이너 오케스트레이션 도구를 이용하면 이런한 관리를 자동화해 운영 부하를 줄일 수 있습니다.
ECS에 대해
AWS에서 컨테이너 시스템을 구축하는 경우 일반적으로 Amazon Elastic Container(ECS), Amazon Elastic Kubernetes Service(EKS)라는 2가지 서비스가 존재합니다.
두 서비스의 가장 큰 차이점은 컨테이너 오케스트레이션을 AWS가 하는지 Kubernetes가 하는지 입니다.
오케스트레이션을 구축하고 관리하기 위한 비용을 모두 AWS가 담당하므로 ECS는 컨테이너에서는 강력한 기능인 것 같습니다. Amazon Elastic Container Registry(ECR)은 컨테이너 이미지 레지스트리 서비스를 제공합니다. 이 기능은 이미지를 저장함으로써 ECS에 쉽게 배포할 수 있습니다.
- 노드는 컨테이너를 실행하는 서버, ECS의 경우 EC2 인스턴스와 Fargate에서 선택할 수 있습니다.
- ECS에는 테스크 정의가 존재합니다. 컨테이너 이미지, 실행 수와 같은 테스크 설정을 정의합니다.
- 컨테이너 이미지, CPU 및 메모리 할당, 환경 변수, 볼륨, 로깅 설정, 네트워크 설정 등이 있습니다.
- ALB와 연결된 테스크의 집합체를 서비스로 정의합니다.
ALB란?
ALB(Application Load Balancer)는 Amazon Web Services(AWS)에서 제공하는 로드 밸런서 중 하나입니다. 로드 밸런서는 여러 서버에 분산되어 있는 워크로드를 균등하게 분배하는 역할을 합니다.
ALB는 특히 HTTP와 HTTPS 트래픽의 로드 밸런싱에 최적화되어 있으며, 고급 라우팅 기능을 제공하여 사용자의 요청을 여러 서비스에 정교하게 분배할 수 있습니다.
EC2와 Fargate
ECS를 이용해 컨테이너를 기동할 때 어떤 플랫폼에서 시작할지 선택할 수 있습니다.
- EC2는 EC2인스턴스 내에서 실행되는 컨테이너 런타임에서 컨테이너를 실행하는 타입입니다.
- 도커를 설치하고 도커 볼륨에서 컨테이너를 실행하는 느낌이다.
- 사용자가 컨테이너 런타임이 설치된 서버를 관리해야 합니다.
- Fargate는 AWS에서 관리하는 서버에서 컨테이너를 실행합니다.
- 컨테이너 런타임, OS 버전업과 같은 서버 관리를 AWS에서 합니다.
- 사용자는 컨테이너 이미지만 관리하면 됩니다.
- 서버의 컨테이너 런타임, OS와 같은 버전은 플랫폼 버전(PV)으로 관리됩니다.
CPU를 늘리고 싶다면?
- EC2의 경우
- CPU/메모리를 늘리고 싶다면 인스턴스 타입을 적절한 것으로 변경합니다
- 스토리지를 늘리고 싶다면 스토리지(EBS)의 볼륨 크기를 확장하면 됩니다.
- Fargate의 경우
- CPU와 메모리를 직접 할당할 수 있지만, 지정한 CPU 값에 따라 할당할 수 있는 메모르 크기가 정해져 있습니다.
- 스토리지는 사전에 Fargate 태스크 스토리지로 태스크 실행 시 할당 되며 할당량은 PV에 따라 다릅니다.
Fargate의 장점
- AWS에서 서버를 관리합니다.
- EC2를 이용하면 EC2 인스턴스 이용료를 지불하지만 Fargate를 이용하면 컨테이너가 이용하는 지원량에 따라 Fargate 전용 요금을 지불합니다. (Lambda와 비슷한 형식, 서버리스 PaaS가 대부분 비슷한 형식인 것 같음)
EKS에 대해
또 다른 AWS의 컨테이너 오케스트레이션은 EKS로 쿠버네티스를 사용합니다.
쿠버네티스는 구글에서 개발한 컨테이너 오케스트레이션 도구입니다. 쿠버네티스의 제일 앞 글자 K와 마지막 글자 s 사이에 8글자가 있다고 해서 'k8s'로 표기하기도 합니다.
k8s 환경을 직접 구축해 이용하기 위해서는 필수 구성요소를 설치하고 관리해야 합니다. 제가 생각하기에 AWS를 사용한다면 EKS를 사용하는게 더 편할 것 같습니다.
출처
https://product.kyobobook.co.kr/detail/S000200882352
'클라우드&인프라 > AWS 구조와 서비스' 카테고리의 다른 글
Amazon S3에 대해 (2) (0) | 2023.12.11 |
---|---|
Amazon S3에 대해 (1) (1) | 2023.10.12 |
AWS Lambda에 대해 (1) | 2023.10.03 |
Amazon EC2 Auto Scaling (0) | 2023.09.20 |
EC2인스턴스와 요금 (1) | 2023.09.16 |