컨테이너
Docker
- 앱 배포를 위한 소프트웨어 개발 플랫폼
- 컨테이너 기술
- 앱이 컨테이너에 패키징되면 어느 운영체제에서든 같은 방식으로 실행됩니다.
- 호환성 문제 없습니다.
- 행위 특성도 예측 가능해서 작업을 덜어줍니다.
- 유지 및 배포가 쉽습니다.
- 언어, 운영체제, 기술에 상관 없이 실행이 가능합니다.
- 사용 :
- 마이크로서비스 아키텍처
- 온프레미스에서 클라우드로 앱을 리프트-앤-시프트
도커 이미지는 어디에 저장되는가?
- 도커 레포지토리
- Docker Hub
- 유명한 퍼블릭 레포지토리
- 많은 기술에 맞는 기본 이미지를 찾을 수 있습니다.
- Amazon ECR
Docker vs Virtual Machines
- 도커는 가상화 기술의 일종이지만, 순전히 가상화 기술은 아닙니다.
- 리소스가 호스트와 공유되어 한 서버에서 다수의 컨테이너를 공유할 수 있습니다.
도커 시작
AWS와 도커 컨테이너 관리
- Amazon ECS
- Amazon EKS
- Kubernetes의 관리형 버전으로 오픈 소스 프로젝트입니다.
- AWS Fargate
- Amazon의
서버리스 컨테이너 플랫폼
으로 ECS
와 EKS
둘 다 함께 작동할 수 있습니다.
ECS
ECS - EC2 type
= Elastic Container Service
- AWS에서 컨테이너를 실행하면
ECS 클러스터에 이른바 ECS 태스크를 실행하는 것입니다.
- EC2 클러스터에는 EC2 시작 유형
바로 EC2 인스턴스
입니다.
- EC2 시작 유형으로 EC2 클러스터를 사용할 때는 인프라를 직접 프로비저닝하고 유지해야 해합니다.
- 각 EC2 인스턴스는
ECS 클러스터에 등록
하기 위해서 ECS 에이전트를 실행해야 합니다.
- ECS 태스크를 수행하기 시작하면 AWS가 컨테이너를 시작하거나 멈출 겁니다.
ECS - Fargate type
- AWS에 도커 컨테이너를 실행하는데,
인프라를 프로비저닝하지 않아 관리할 EC2 인스턴스가 없습니다.
서버리스
- 서버를 관리하지 않아 서버리스라 부르는데 서버가 없는 건 아닙니다.
- ECS 태스크를 정의하는 태스크 정의만 생성하면 ECS 태스크를 대신 실행합니다.
- 새 도커 컨테이너를 실행하면 어디서 실행되는지 알리지 않고 그냥 실행됩니다.
- 작업을 위해 백엔드에 EC2 인스턴스가 생성될 필요도 없어요.
- 확장하려면 간단하게 태스크 수만 늘리면 돼요.
ECS - IAM Roles(역할)
EC2 인스턴스가 도커에 ECS 에이전트를 실행한다고 하면
- _
- EC2 인스턴스 프로파일을 생성
- ECS 에이전트가 EC2 인스턴스 프로파일을 이용해 API 호출을 만들 겁니다.
- 인스턴스가 저장된 ECS 서비스가 CloudWatch 로그에 API 호출을 해서 컨테이너 로그를 보내고 ECR로부터 도커 이미지를 가져오죠.
Secrets Manager
나 SSM Parameter Store
에서 민감 데이터를 참고하기도 합니다.
- ECS 태스크 역할
- 각 태스크에게 구체적인 역할을 허용합니다.
- 역할이 각자 다른 ECS 서비스에 연결할 수 있게 합니다.
- ECS 서비스의 태스크 정의에서 태스크의 역할을 정의합니다.
로드 밸런서 통합
- 애플리케이션 로드 밸런서
- 거의 모든 유스 케이스를 지원하고 작동합니다.
- 네트워크 로드 밸런서
- 처리량이 매우 많거나 높은 성능이 요구될 때만 권장합니다.
- ELB
- 권장하지 않습니다.
- Fargate와 연결할 수 없습니다.
데이터 볼륨 (EFS)
- EC2 태스크에 파일 시스템을 마운트해서 데이터를 공유하려고 합니다.
- EFS 파일 시스템을 사용하는 게 좋습니다.
EC2
와 Fargate
시작 유형 모두 호환이 되며
EC2 태스크에 파일 시스템을 직접 마운트할 수 있습니다.
- 어느
AZ
에 실행되는 태스크든
Amazon EFS
에 연결되어 있다면 데이터를 공유할 거고
원한다면 파일 시스템을 통해 다른 태스크와 연결할 수 있기 때문이죠.
Fargate
+ EFS
= 서버리스
- 사용 :
- EFS와 ECS를 함께 사용해서 다중 AZ가 공유하는
컨테이너의 영구 스토리지
ECS가 Lustre용 FSx를 지원하지 않는다는 것.
ECS 태스크의 파일 시스템으로 Amazon S3 버킷을 마운트할 수 없음.
ECS Service Auto Scaling
- AWS의 Auto Scaling이라는 서비스를 사용하면 세 개의 지표에 대해 확장이 가능합니다.
- ECS 서비스의 CPU 사용률
- 메모리 사용률
- ALB 관련 지표인 타겟당 요청 수
- 대상 추적 (Target Tracking)
- 단계 스케일링 (Step Scaling)
- 스케쥴드 스케일링 (Scheduled Scaling)
- ECS ASG =/= EC2 ASG
- 백엔드에 EC2 인스턴스가 없다면
Fargate
를 사용하는 것이 서비스 오토 스케일링에 도움이 됩니다.
EC2 시작 유형에서 ASG EC2 인스턴스
- Auto Scaling Group
- CPU 사용률에 따라 ASG를 확장
- EC2 인스턴스를 추가
- ECS 클러스터 용량 공급자(Capacity Provider)
- 새 태스크를 실행할 용량이 부족하면
자동으로 ASG를 확장
합니다.
오토 스케일링 그룹과 함께 사용
되며 RAM이나 CPU가 모자랄 때 EC2 인스턴스를 추가
합니다.
ECS Rolling Updates
ECS 서비스를 v1에서 v2로 업데이트할 때
태스크가 한 번에 얼마나, 어떤 순서로
시작되고 중지되는지 제어할 수 있습니다.
ECR
= Elastic Container Registry
- AWS에 도커 이미지를 저장하고 관리하는 데 사용됩니다.
- 계정에 한해 이미지를 비공개로 저장.
- 퍼블릭 저장소를 사용해 Amazon ECR Public Gallery에 게시하는 방법.
- ECR은 Amazon ECS와 완전히 통합되어 있고 이미지는 백그라운드에서 Amazon S3에 저장됩니다.
- 액세스는 IAM으로부터 제어됩니다. (허용 에러 => 정책)
- 이미지의 취약점 스캐닝, 버저닝 태그 및 수명 주기 확인을 지원합니다.
EKS
= Amazon Elastic Kubernetes Service
- AWS에 관리형 Kubernetes 클러스터를 실행하는 방법입니다.
- Kubernetes
- 오픈 소스 시스템
- 컨테이너화된 애플리케이션을 자동으로
배포
, 스케일링
그리고 관리
할 수 있습니다.
- 컨테이너를 실행하려는 목적은 비슷하지만 API는 아주 다릅니다.
- EKS는 두 가지 실행 모드를 지원:
- EC2 인스턴스 등 작업자 노드를 배치할 때
EC2 실행 모드
- EKS 클러스터에 서버리스 컨테이너를 배치할 때
Fargate 모드
- 사용 :
회사가 이미 온프레미스에서 Kubernetes를 사용하거나
다른 클라우드에서 Kubernetes를 쓰는 경우
혹은 그냥 Kubernetes API를 사용하려는 경우
AWS를 통해 Kubernetes 클러스터를 관리하고자 할 때
Amazon EKS를 사용할 수 있습니다.
- Kubernetes는 Cloud-agnostic입니다.
- Azure나 Google 클라우드 등 어떤 클라우드에서도 가능합니다.
- 클라우드나 컨테이너 사이를 옮겨 다니려면 Amazon EKS를 사용하는 게 훨씬 편합니다.
From
AWS Certified Solutions Architect Associate 시험합격!