AWS에서 시작하는 Container 생활

CHAN LIM·2022년 7월 10일
0

Sessions Summary

목록 보기
2/3

AWS에서 시작하는 Container 생활

AWS에는 Container와 관련된 다양한 서비스들을 둘러보고 기존의 애플리케이션을 컨테이너로 만들어서 AWS의 Container 서비스 위에 배포할 수 있는 자동화된 툴을 소개합니다.


Container?

애플리케이션 환경

  • 코드
  • 코드를 실행할 수 있는 Runtime ( JVM, Node.js, .Net 등등)
  • 관련된 다양한 라이브러리
  • 설정 및 환경정보 ( DB Connection String )

이러한 애플리케이션을 실행하는 환경은 각각의 단계에 따라 조금씩 다를 수 있습니다.

즉, 각각의 환경에 따라 라이브러리 버전과 환경변수가 다르게 설정될 수 있습니다.
민첩성을 강조하는 현대 컴퓨팅 환경에서 더 자주 더 빠르게 제품을 출시하려는 입장에서 이런 환경에 대한 디펜던시를 관리하는 게 쉽지 않습니다.

컨테이너의 등장

위의 언급된 문제를 해결해주는 '컨테이너'의 등장

: 애플리케이션의 모든 구성 요소를 규격화된 컨테이너에 담아어떤 환경에서든지 동일하게 실행할 수 있게 만들었습니다.

컨테이너 vs 가상머신(VM)

애플리케이션의 구성요소 전체를 패키징해서 배포하고 각각 환경 간의 격리된 공간을 제공한다는 의미에서 VM과 유사해 보일수도 있습니다.
VM은 Host OS위에서 Guest OS를 실행해야 하는 Overhead가 존재합니다.
'컨테이너'는 Host Linux Kerner을 그대로 사용하면서 프로세스를 기동하여 빠르며 Overhead가 거의 없습니다.
또한 Linux Kerner 기술인 cgroup과 namespace 등을 이용해 실행된 컨테이너간의 isolation 기능을 제공합니다.

컨테이너가 매우 많아진다면?

적절한 가용 용량을 가지고 서버에 잘 적재할 수 있는 체계가 필요합니다.

AWS가 이러한 서비스를 제공합니다.

  • ECS, EKS : 컨테이너의 스케쥴링과 스케일링을 관리
  • EC2, Fargate : 컨테이너 실행환경
  • ECR : 컨테이너 이미지 저장소

ECS vs EKS

컨테이너 오케스트레이션

컨테이너들을 여러 서버에 배치하고 운영하는 것을 컨테이너 오케스트레이션이라고 합니다.

ECS와 EKS

  • ECS

    • 아마존의 컨테이너 운영 경험을 기반으로 해서 사용자들에게 컨테이너 운영에 단순성과 간편성을 제공하는데 중점을 두었습니다.
    • 대규모의 컨테이너를 실행하는 AWS만의 컨테이너 환경입니다.
    • 적은 결정사항 만으로도 다양한 기능과 대규모 서비스를 지원합니다.
    • 애플리케이션 구축, 배포 및 마이그레이션 시간 단축을 제공합니다.
  • EKS

    • 오픈소스인 쿠버네티스 기반으로 유연한 확장성에 중점을 두어 개발했습니다.
    • AWS에 최적화된 쿠버네티스를 통해 민첩성과 효율성을 확보하고 클라우드뿐 아니라 온프레미스에서도 동일한 운영환경을 제공합니다.
    • 모든 쿠버네티스 배포환경에 대한 보안, 고가용성 및 관측성을 제공합니다.
    • 쿠버네티스 생태계의 광범위한 커뮤니티의 다양한 솔루션을 활용합니다.

AWS Fargate : Serverless Container 환경

: 컨테이너 호스트 관점
: 고객들이 기반 인프라를 관리할 필요가 없이 컨테이너를 배포하고 관리할 수 있는 컨테이너 옵션입니다.
: 컨테이너를 실행하기 위한 인스턴스를 프로비저닝하거나 스케일링하는 등의 관리할 필요가 없어집니다.
: 애플리케이션의 설정, 네트워크 속성, 스토리지, 스케일 아웃을 위한 요건만 정의하면 프로비저닝과 실행을 AWS가 관리하게 됩니다.

  • Fargate를 활용하면 쉽게 완전 관리형 컨테이너 환경으로 운영할 수 있습니다.
  • ESC나 EKS를 EC2 없이 Fargate만으로 완전 관리형 컨테이너 환경으로 구성 가능합니다.
  • 다양한 컴플리언스를 준수한다거나 CI/CD나 모니터링 그리고 보안 서비스들이 이미 통합된 환경을 완전 관리형으로 구현할 수 있습니다.

  • 비용적인 측면에서 Fargate는 파드나 테스크 단위로 과금되기 때문에 EC2에 배포했을 때 보다 조금 더 정밀하게 사용량에 따른 과금을 책정할 수 있습니다.

ECS Anywhere and EKS Anywhere

ECS Anywhere

  • ECS는 AWS 리전, Wavelength, Local Zone과 같은 고객의 데이터 센터에 있는 AWS가 관리하는 Outpost에서 실행할 수 있었습니다.
  • ECS Anywhere를 활용하면 고객의 장비에서 ECS의 기능을 활용할 수 있게 됩니다.

ECS Anywhere 동작 방식

고객의 서버에 System Manager Agent와 ECS Agent를 설치해서 AWS 리전과 연결하고 컨테이너를 프로비저닝하게 되면 고객의 서버에 컨테이너가 실행됩니다.!

  • 고객이 더 이상 자체 컨테이너 오케스트레이션을 온 프레미스에서 운영하면서 해야될 업데이트나 운영에 대한 부담이 필요없게 됩니다.
  • 컨테이너를 온 프레미스와 클라우드의 하이브리드 환경을 운영할 수 있도록 합니다.

EKS를 활용한 쿠버네티스 운영환경

: EKS를 온 프레미스에서 사용할 수 있는 옵션

  • EKS Distro
    • 다양한 환경에서 활용할 수 있도록한 EKS의 오픈소스 배포판입니다.
  • EKS Anywhere
    • EKS를 고객의 온 프레미스 장비에 설치할 수 있도록 합니다.

EKS Anywhere

EKS-Distro를 기반으로 고객의 데이터 센터에 있는 하드웨어 위에 쿠버네티스 클러스터를 생성하고 운영할 수 있는 자동화된 툴과 안정적으로 운영하는데 필요한 엄선된 오픈소스를 번들로 제공하여 EKS와 동일한 운영 환경을 제공합니다.
: 이를 통해서 온 프레미스에서도 쉽고 간편하게 쿠버네티스 클러스터를 운영할 수 있도록 합니다.

  • ECS Anywhere와의 운영 모델의 차이점은?
    • Control plane도 고객의 관리하에 설치하고 운영한다는 것.


App2Container

App2Container

  • 기존 Application의 컨테이너화

  • 고객이 가상머신에서 실행되는 애플리케이션을 컨테이너로 변환하고 최소한의 노력으로 Amazon ECS 또는 EKS로 쉽게 배포할 수 있도록 지원하는 CLI Tool입니다.

  • 장점

    • 최소한의 노력으로 레거시 애플리케이션을 컨테이너화합니다.
    • 대규모 시스템의 컨테이너화합니다.
    • 모범 사례를 기반으로 컨테이너화합니다.

흐름

동작방식

1. 애플리케이션 서버에 .NET과 Java 애플리케이션을 Discover(탐색)해서 어떤 애플리케이션이 있는지 확인하고 애플리케이션 인벤토리를 생성합니다.

2. 그리고 런타임 디펜던시와 연계된 프로세스 그리고 서비스하고 있는 네트워크 포트 등을 분석합니다.

3. 애플리케이션 아티팩트를 추출해서 Dockerfile을 생성하고, 컨테이너 이미지를 build합니다.

4. AWS에 디플로이 하기 위해 compute, network, security 등의 클라우드 포메이션 템플릿을 생성합니다.

5. ECS나 EKS 클러스터에 배포하고 필요에 따라 CodePipeline을 이용하여 CI/CD Pipeline을 구성합니다.

지원환경


Summary


Reference

AWS에서 시작하는 Container 생활

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글