목표
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컨테이너 서비스
ECR
ECS
CKS
AWS Fargate
ECS Cluster
7
ECR - ECS - ECS spot
ECR 구성 요소
내부적으로는 S3로 구성되어 있다.
ECR ?
이미지 보안 점검
이미지를 업 로그 할 때 이미지를 스캔할 수 있다.!!
자동 / 수동 가능하다.
ECR 보안 ?
생성 시 이미지 스캔 가능하다.
ERS의 image scan 체크하면 된다.
수동 점검 ?
ECR 이미지 누르고 SCAN 누르면 된다.
보안점검 결과는 콘솔과 이벤트 브리지로 넘긴다.
// 보안 점검 시 필수로 사용해야겠다.
예제)
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 같은 개념으로, 파일을 같이 공유할 때 사용한다.
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 파일
17
ECS ?
ECS는 최소한의 배포 단위가 TASK이다.
TASK 안에 컨테이너 1 , 2가 있다.
TASK 정의를 해야 한다.
배포 단위
TASK로 배포 or 서비스 TASK로 배포
18
작업 배치 전략 ?
작업 배치 제약
<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에 롤을 부여한다.
인증과 권한 체크
기타 : task도 롤을 부여한다.
4
Cloudwatch 컨테이너 인사이트 ?
컨테이너 성능 데이터를 수집할 수 있게 해 준다.
<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
감사합니다.