AWS에서 시작하는 Container 생활

 


# 영상에서 설명하는 목차

  • Container?
  • ECS vs EKS
  • ECS Anywhere and EKS Antwhere
  • App2ContainerContainer?

# Container?

환경에 따라서 동일한 실행결과를 기대하기 어렵다.

그리고 각 환경의 디펜던시를 관리하기도 쉽지 않다.

규격화된 컨테이너에 넣어 어떤 환경에서든지 동일한 결과를 기대할 수 있다.

VM은 Host OS 위에 Guest OS를 실행해야 하는 Overhead가 있는 반면, Container는 Host의 Linux Kernel을 사용하면서 프로세스를 실행한다. 그렇기 때문에 빠르게 실행하면서 Overhead가 거의 없다.

Linux Kernel 기술인 cgroup과 namespace 등을 이용해 실행된 컨테이너 간의 isolation 기능을 제공한다.

 

관리해야 하는 컨테이너가 많아지게 되면 어떻게 해야 할까?

그래서 AWS에서 관련 서비스를 준비했다! (두둥!)

  • Management (스케줄링, 스케일링, 배포 전략)
    • ECS. EKS
  • Hosting (컨테이너가 실행되는 곳)
    • EC2, Fargate
  • Image Registry (컨테이너 이미지 저장소)
    • ECR

# ECS vs EKS

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

Desired State로 동작하도록 Schedule 하는 것!

  • ECS는 사용자들에게 컨테이너 운영의 단순성관 간편성을 제공하는데 중점
  • EKS는 K8s 기반으로 유연한 확장성에 중점을 두어 개발

처음부터 단순성을 목표로 디자인되었다. 쉽고 빠르게 컨테이너 서비스를 제공!

다양한 조합을 활용하여 운영이 가능하다.

 

# ECS Anywhere and EKS Antwhere

컨테이너를 온프레미스와 클라우드의 하이브리드 환경을 운영할 수 있도록 한다.

EKS와 동일한 운영환경을 제공한다.

# App2ContainerContainer?

 

  • Discover(탐색) 해서 어떤 애플리케이션이 있는지 애플리케이션 인벤토리를 생성합니다.
  • 애플리케이션 아티팩트를 추출해서 Dockerfile을 생성하고 Container 이미지를 build 한다.
  • 배포를 하기위해 compute, network, security 등의 클라우드 포메이션 템플릿을 생성합니다.
  • ECS나 EKS 클러스터에 배포하고 필요하면 CI/CD Pipeline을 구성합니다.

 지원범위

 

## 데모영상

  • 컨테이너화할 서버에 접속한다.
  • 서버에서 실행중인 application을 탐색합니다.
app2container invertory
app2container analyze --application-id java-tomcat-ee314c7f
app2container containerize --application-id java-tomcat-ee314c7f
docker images
vi /root/app2container/java-tomcat-ee314c7f/deployment.json
app2container generate app-deployment --application-id java-tomcat-ee314c7f
aws cloudformation deploy --template-file /root/app2container/java-tomcat-ee314c7f/EcsDeployment/ecs-mater.yaml --capabilities CAPABILITY_NAME_IAM --stack-name a2c-java-tomcat-ee314c7f-ECS
  • deployment.json 파일에는 ECS로 배포할 것인지 EKS로 배포할 것인지 결정하고 VPC도 결정해야 한다.