brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Oct 27. 2020

458. MSA-컨테이너와 ECS 개요-1/1

목표

EC2 가상 서버 말고  컨테이너를 알아보자.

컨테이너를 사용하는 ECS를 알아보자.

ECS로 홈페이지를 올려보자



<1> Monolithic 아키텍처  Vs  마이크로 서비스 아키텍처

<2> 컨테이너 기초

<3>  ECS 구성요소

<4>  ECS   vs  EKS

<5>  ECS  클러스터 만들기

<6> 작업  정의 만들기

<7>  ECS  통신

<8>  ECS 실습



<1> Monolithic 아키텍처  Vs  마이크로 서비스 아키텍처


1

Monolithic 아키텍처?

애플리케이션이 커질수록 코드가 커지고 개발 생산성 저하됨



2

마이크로 서비스?

한정된 콘텍스트를 갖는다.

느슨하게 결합을 가능하도록 한다.

서비스 지향적인 아키텍처이다.

AWS에서는 컨테이너와 서버리스 중하나인 람다를 주로 사용한다.

https://aws.amazon.com/ko/microservices/



3

마이크로 서비스 장점?

복원성 - 단일 모듈 장애 시 전체 애플리케이션이 크게 영향을 받지 않는다.

구성요소 - 기능 단위로 서비스가 되어 개발자가 쉽게 이해가 가능하다.

미니멀 - 작고 유연하다. 새로운 기술 적용이 쉽다.


4

마이크로 서비스 단점?

분산 개발이라 일반 개발 복잡하다.




<2> 컨테이너 기초


1

네임스페이스 격리


user 네임스페이스 -  유저 정보

uts 네임스페이스 - 호스트 이름

ipc네임스페이스 - ipc

mount네임 스페이스 - 스토리지

pid 네임 스페이스 - 프로세스

네트워크 네임 스페이스 - 네트워크



2

VM과 컨테이너 비교


VM

커널 분리 높은 보안성 제공


컨테이너

가상 머신보다 보안 수준이 낮다.


3

도커 컨테이너


4

Docker Hub

Docker 이미지  - 도커 파일을 통해 이미지 만듦

Docker 컨테이너  

Docker 명령어

Dockerfile

Docker-compose   - 멀티 컨테이너를 다룬다.


5

Docker  레지스트리는 3가지로 구성되어 있다.

레지스트리 - URL을 가지고 있다. 파일 저장소.

레파지토리 - 이미지의 컬랙션.  latest / 11.0.1 // 11.02

인덱스 - 인증 요청을 처리한다.



형식

docker hub가 들어간다 (레지스트리)  - 우분트  : tag가 있다.   tag는 latest

seo.com / 우분트  : 11.0.1




// 레지스트리에서 이미지를 스캔해서 보안 취약점을 점검하라.



6

AWS컨테이너 서비스

https://aws.amazon.com/ko/containers/

ECR

ECS

CKS

AWS Fargate



ECS   Cluster



7

ECR - ECS - ECS spot

ECR 구성 요소

내부적으로는 S3로 구성되어 있다.


ECR ?

이미지 보안 점검

이미지를 업 로그 할 때 이미지를 스캔할 수 있다.!!

자동 / 수동 가능하다.


ECR 보안 ?

생성 시  이미지 스캔 가능하다.

ERS의  image scan   체크하면 된다.


수동 점검 ?

ECR 이미지 누르고 SCAN 누르면 된다.


보안점검 결과는 콘솔과 이벤트 브리지로 넘긴다.

https://aws.amazon.com/ko/about-aws/whats-new/2019/11/ecr-events-now-published-to-eventbridge/

// 보안 점검 시 필수로 사용해야겠다.


예제)

Cloud watch  - 규칙 -  ECR -  ECR  image scan 할 때마다  -  목적지로 던진다.  람다나 sns로 보낼 수 있다.



9

Dockerfile



10

컨테이너 실행 프로세스



11

컨테이너 유형 2가지?


OS컨테이너 - node, nginx 같이 사용


APP 컨테이너 - 한 서비스 씩 실행. MSA 사용하기 위해. nginx , node.js 등 각각 사용

MSA는 app 컨테이너로 한다.

컨테이너 1에  nginx 하나, 컨테이너 2에 node.js 하나 각각 운영되도록 하는 것을 권장한다.

// 일반적으로 서버의 경우도 하나의 서버에 웹이던 WAS 던 한 가지만 운영하도록 권장하고 있다. 별 다른 건 아니다.




12

컨테이너

파일 공유 EFS 사용 좋음

EFS는 NAS 같은 개념으로, 파일을 같이 공유할 때 사용한다.

https://brunch.co.kr/@topasvga/1217




13

도커 네트워크  구성 방식 3가지

bridge

host

none



14

컨테이너 VPC로 구성

VPC  flow log로 확인 가능함




# ECS


15

ECS에서  네트워크  4가지 지원 모드 ?


브리지 - 동일 호스트 같이 통신할 때

호스트 -  외부 연결 시,   컨테이너가 호스트 네트워크를 사용함, 하나의 물리 NIC을 사용하는 구조

AWS VPC  -  외부 연결 시, 컨테이너가 물리 NIC을 각각 사용하는 구조

none   - 네트워크를 사용하지 않음.


// AWS VPC를 사용하도록 가이드

// VPC-Flow log 활성화하여 보안 강화 가능함.



16

Docker Compose  ?

Compose  파일 , YAM 파일, 서버, 네트워크, 볼륨 , 애플리케이션 모든 것을 정의.

docker-compse.yaml 파일을 ECS에서 그대로 task로 사용할 수 있다.

링크

docker-compse.yaml 파일

https://docs.microsoft.com/ko-kr/dotnet/architecture/microservices/multi-container-microservice-net-applications/multi-container-applications-docker-compose



17

ECS ?

ECS는 최소한의 배포 단위가 TASK이다.

TASK 안에 컨테이너 1 , 2가 있다.

TASK 정의를 해야 한다.


배포 단위

TASK로 배포  or  서비스 TASK로 배포


18

작업 배치 전략 ?

작업 배치 제약

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/task-placement-strategies.html




<3>  ECS 구성요소


1

클러스터 만들기

EC2로 만들기  or  Fargate로 만들기


2

작업 정의

jason으로 만들어도 된다.


3

작업 - 배치성 작업


4

서비스


5

스케줄러 - 어디다 배포할 건지


6

컨테이너 에이전트


// 쿠버 네티스에서 서비스는   network (LB) 개념이다.  개념이 다르다.




<4>   ECS   vs  EKS


1

ECS 쉽다.  

조정할 수 있는 기능이 많지 않다.

 AWS에서 구현한 거라 비교적 간단.


EKS  어렵다. 

쿠버 네티스는 온프라미스에서 구현한 것이라 기능이 많고 복잡하다.


클라우드에서는 ECS 나 EKS  사용은 선택의 문제.

온프라미스에서는 EKS사용이 맞을 수 있다.





<5>  ECS  클러스터 만들기



1

Spot으로 인스턴스를 구성할 수도 있다.

spot 종료 2분 전에 알림이 온다.

드레인드 모드 - 스케쥴러가 추가 불가능. 뺴는것만 가능하게 된다.

컨테이너에 알림 기능을 추가할 수 있다.



2

VPC ?

ECS는 Private에 넣도록 하라.

사설망에 넣어라.

// 개발자에게 가이드


3

ecsInstanceRole  역할은 EC2에 롤을 부여한다.

인증과 권한 체크

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html


기타 : task도 롤을 부여한다.


4

Cloudwatch 컨테이너 인사이트 ?

컨테이너 성능 데이터를 수집할 수 있게 해 준다.




https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/ContainerInsights.html


https://aws.amazon.com/ko/blogs/korea/operational-insights-for-containers-and-containerized-applications/



<6>  ECS 작업  정의 만들기


1

작업 역할이 들어간다.

TASK안에는 컨테이너 1, 컨테이너 2  들이 있다.

컨테이너가  RDS조회 시 임시 권한으로 제공한다.

DB를  읽는 거.

// 작업 role 필요


2

네트워크  ?

브리지  - 내부 통신

호스트  - 외부 통신

없음.

사용자 VPC


3

작업 실행 역할을 주어야 한다.

관리적으로 하는 작업

cloudwatch에 log 그룹을 만들어야 한다.

// 작업 실행 role 필요



4

컨테이너 추가


5

elastic inference


6

서비스 mesh ?

app mesh라는 서비스가 따로 있다.



7

데몬

node당 1개씩 띠우는 것


8

로드 밸런서

서비스는 LB를 연결한다.


9

서비스 검색 (선택사항)

cloud map과 연동

api 호출을 이용하는 방법

dns/api호출을 하는 방식 - 자동적으로  route53에 등록됨. 공용이나 사설에 추가 가능함.



10

Fagate 사용

볼륨 공유가 가능하다.


11

ECS 작업 정의  예


컨테이너의 리소스 제약

TASK의 리소스 제약 양식으로 나온다.



12

ECS awsvpc

EC2를 띠우면 NIC가 할당된다.

고유한 ENI 가 할당된다.

// IP 할당을 충분하게 할당되도록 한다.



13

ECS  


네트워크

AWS VPC 트렁킹  활성화하라!!!

ENI밀도에 대해 변경하는 것이다.

EC2는  ENI 1개만 만들어진다.

컨테이너를 10개까지 할당 가능해진다.


트렁킹 활성화한다.

하나의 노드에  컨테이너를 10이 이상 할당 가능해진다.


14

ECS 클러스터



15

service   vs task


service

컨테이너 중단 또는 오류  -   재시작 시도한다.

lb 사용한다.


16

Fargate와  EC2 모드 ?


ECS 인스턴스

비용 - EC2 인스턴스 단위

EFS 가능

EBS가능

네트워크 옵션   (  linux : none, bridge, awsvpc, host   / windows : nat )



17

Fargate spot이라는 게 새로 나옴

최대 70프로 할인

사용한 vCPU 및 메모리 리소스 양에 따라 비용 지불

요금은 초단위 계산되면 최소 1분

compute savins plans 활용 가능.


수동으로도 증설 가능함.




18

Fargate에서 유효하지 않는 작업들 


dnsserver 불가

gpu mode 불가  - ec2모드로 사용하세요.



네트워크 vpc만 가능함.


19

ECS  cli로 작업하기

aws cli가 있다.

ecs cli가 있다.


ecs  cli를  세부 적인 컨트롤을 할 수 있다.

따로  ecs cli를 설치할 수 있다.

ecs-cli compose





<7>   ECS  통신



1

에이전트 통신

ecs 에이전트  링크


api 서버가 있다. - ecs 에이전트와 통신  그림. 사진


2

배치 전략?



3

cloud watch container  insight를 이용한 모니터링 가능




<8>  ECS 실습


ECS 컨테이너로 웹 서비스하기


https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/docker-basics.html


https://brunch.co.kr/@topasvga/1190


https://brunch.co.kr/@topasvga/1183



https://brunch.co.kr/@topasvga/1230



감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari