개요
- ECS가 뭔데?
- Kubernetest가 정답인가?
- 그럼에도 왜 ECS Fargate를 사용하는가?
- ECS Fargate 를 잘 활용하는 방법
ECS 가 뭔데?
간단하다. ECS ( Elastic Container Service )
Container 기반 서비스를 AWS 내 쉽게 띄우기 위한 하나의 시스템이다.
어쩌면 Docker 기반의 구성된 서비스를 굉장히 쉽게 만들어서 Cloud 시스템에 구축할 수 있겠는가? -> 그게 바로 ECS라고 생각한다
ECS를 사용하면 뭐가 좋은가?
보통 ECS를 얘기하면, 매번 나오는게 EKS와 비교하게 된다.
하지만 그전에 간단하게 Docker 기반 시스템을 구축하기 위한 서비스를 어느정도 나열해보면 아래와 같다.
Layer 1. Docker를 쓴다 - EC2에 올려서 쓴다
뭐... 굉장히 심플하다
Dockerfile을 구성하든, docker-compose를 구성하든 그 자체로 EC2에 올려서 서비스를 한다.
정말 간단하다는 말 외에는 따로 할 말이 없다
하지만 그 간단함 때문에 -> 많은 부분들이 고민이 되는 부분이다
모니터링, 로그, 배포, Self Healing, Rollback 모든 부분에서 손수 수작업을 진행해야 한다.
Layer 2. Orchestration Tool을 사용하되, EC2를 사용한다
보통 production 즉, 회사내에서 서비스를 운영하는 단계라면 Layer 2 에서 시작하는 것 같다.
기본적인 Orchestration 을 사용하되, ECS , EKS 를 EC2를 host로 사용한다.
물론 나쁘진 않다. 하지만 나는 Serverless 더 선호한다. ( 비용 및 효율성 측면에서 어쩔 땐 EC2 기반이 좋을 때가 존재함 )
Layer 3. Serverless 형태로 사용한다
Serverless...
마법의 단어다. 대부분의 고민거리를 해결해준다.
물론 Serverless 가 모든 고민거리, 기술적 이슈들을 해결해주진 않는다.
Serverless 이기에 겪는 문제도 있고, 여전히 손수 수작업으로 해줘야 할 부분도 존재한다.
그럼에도 불구하고 관리하기 편하기때문에 Devosp Engineer 입장에서는 업무 시간에 다른부분을 더 강화할 시간을 벌게된다.
Kubernetes가 정답인가?
대부분의 회사에서 사용하는 스택이나, 개발자 취업 사이트를 보면 Kubernetes를 사용한다.
거의 무조건 사용하고, 사용 / 활용할 수 있는 사람을 뽑는다.
왜 그럴까? ECS 보다 Kubernets가 더 좋은 점은 무엇일까? (경험기반...)
EKS는 자유롭다
EKS 만큼 자유로운 시스템은 또 없다.
여기서 자유롭다라는 뜻은, 따로 vendor에 구애 받지 않는다는 얘기다.
K8S 는 GCP, AWS, Azure Multi Cloud내에 GKE, EKS, AKE 여러개로 불리기도하고, 온프레미스에서도
동작방식이 같아 흔히 Cloud Lock In 현상을 줄일 수 있다.
ECS만 봐도 AWS에서만 사용가능하고,
GCP에서는 Cloud Run, App Engine 같은 기능을 써야하기 때문에 그것의 비해서는 자유롭다.
배포 전략이 자유롭다 (CNCF)
ECS는 기본적인 Rolling Update, Code Deploy를 사용해서 Blue/Green, Canary 배포방식을 사용할 수 있다.
하지만 좀더 트래픽을 세밀하게 조절해서 배포하는 방안들의 대해서는 굉장히 많은 노력이 필요하다.
그에 반해, K8s 같은 경우에는 Traffic Splitting 같은 배포전략을 Istio로 한다거나, ArgoCD 같은 Tool로 굉장히
다양한 방법의 배포 / Rollback 기능을 활용할 수 있다.
AutoScaling 시, 세부적으로 Control 이 가능하다
ECS도 이건 가능하다. 불가능하지는 않다.
간단하게 CPU, Memory 기반으로도 AutoScaling 가능하고
CloudWatch를 연동해서 SQS, SNS, ALB의 지표등을 확인해서 다양한 AutoScaling 전략을 사용할 수 있다.
하지만 K8s 같은 경우에는 더 세밀하게 조정이 가능한데 HPA & VPA 을 사용하면 CPU, Memory 기반으로 자동확장이 더 유연하다.
그리고 애초에 Node , Pod 기반으로 동작하기 때문에 당연한 얘기기도 하다
추가적으로 Karpenter 이놈을 쓰면 굉장히 도움이 많이 때문에 좀 부럽긴하다.
나중에 Kaprenter 기능을 Deep 하게 공부해서 글써보면 도움이 많이 될지도...
Addons가 너무 훌륭하다 (CNCF)
사실 이 부분은 넘사벽이라고 생각하는데,
ECS도 AWS 내부서비스와 조합은 훌륭하다.
하지만 K8s는 CNCF 내 오픈소스와 다양한 툴링이 가능하다.
어떤것이 좋다. 어떤것이 있다. 하나하나 세부적으로 얘기하지 않아도
정말 좋은 오픈소스나 툴이 있다고 하면 대부분 K8S 를 기반으로 만들어져 있다.
그럼에도 왜 ECS Fargate 를 사용하는가?
간단하다...
쉽다...
아주 적은 인원으로, 여러개의 서비스를 구축할 때 이만한건 없는 것 같다.
내가 생각했을 때 굉장히 좋은 시스템이고 Lock In이 걸렸다면 어쩔수 없지만...
당분간 AWS 만 쓸건데, Lock In 정도야 ... 큰 문제일까 싶다.
그래도 나름대로 비용 효율성
AWS내에서 K8s를 사용하려면 EKS 옵션이 있는데,
이건 Cluster 비용이 별도로 나간다. 큰 비용은 아니지만 월에 $ 70 ~ 80 발생한다.
하지만 ECS는 Cluster를 여러개 만들어도 공짜이기 때문에 짱짱맨이다.
나는 인프라 이런거 모르고 그냥 개발에만 집중할래
딱 이런 사람들에게는 최적의 솔루션이 아닌가 싶다.
ECS Fargate 를 사용하면 정말 많은것을 해준다.
Self Healing도 해주고, Auto Scaling도 너무 쉽고, ALB나 Event Bridge pipe를 사용해서 여러 서비스와 조합도 가능하다.
그리고 Scale-up 하는것도 굉장히 옵션이 다양하기 때문에 GPU 기반이나 LLM을 크게 돌릴것이 아니라면 더할나위 없다.
ECS Fargate 를 잘 활용하는 방법
솔직히 개인적인 경험으로는 기존 ECS Fargate를 사용해도 큰 문제는 없지만
몇몇 더 잘 사용하면 기존보다 2~3배 가량 더 잘 사용할 수 있다고 생각한다.
비용 효율화 (SPOT 인스턴스)
ECS Fargate OS System은 총 2가지로 나뉜다
- ARM
- x86_64
이때 x86_64를 사용하게되면 SPOT 인스턴스를 사용할 수 있다.
물론 SPOT 인스턴스 자체가 동작하는 원리는 AWS 내 노는 컴퓨팅을 잠시 빌려써서 다시 임대하는 형식이기 때문에,
가끔은 죽을 수도 있다.
그렇기에 개발 / 스테이징 / 데이터 배치 같은 가끔은 죽어도 되는 애들은 SPOT 인스턴스를 고려해보는것도 좋은것같다.
ECS Fargate 가 아닌, EC2 on ECS도 고려해보자
너무 위에서 ECS Fargate 만 얘기했지만,
EC2에 ECS 사용하는 옵션도 굉장히 좋다.
GPU, 그외 다른 성격을 가진 Computing 유형도 ECS를 사용해서 편하게 배포하고 구성하고를 사용할 수 있다 (ecs agent)
추가적으로 보통 ECS Fargate 에서는 서비스 당 ENI를 하나씩 가지게된다 (network mode)
하지만 EC2 on ECS는 다양한 network mode를 선택 할 수 있다.
network mode | 설명 |
bridge | - EC2 내부에 Docker bridge 사용 - Container 간 NAT 통신 |
host | - 컨테이너나 EC2의 네트워크를 직접사용 (IP공유) - EC2에 바인딩 된 포트 그대로 사용 - 보안이슈가 존재 |
그래서 고성능 네트워크가 필요하다거나, 특정 포트를 컨테이너 내에서 직접 노출한다거나,
로드밸런서가 아닌 EIP로 바로 트래픽을 받는 어느정도 특수한 환경일 경우, 위와같이 처리할 수 있다.
결론
정말 대규모의 시스템이나 비용효율적인 방안들을 검토해서 구성을 해야한다면 K8S 가 정답일 수도 있다고 생각한다.
하지만 본인 내지, 회사의 도메인과 서비스를 이해하고 현재 어느수준에 있는지를 파악한다면 어떤 솔루션이 적합한지 한번쯤은 더 생각해볼수 있지 않을까 생각한다.
물론 나도 K8S를 하고싶지만, 현재 ECS 를 사용하면서도 회사의 비즈니스는 정말 잘 굴러간다.
그렇다고 ECS -> K8S 갈아탄다고 해서 서비스 안정성이 올라가냐?, 트래픽이 올라가냐? 그건 아니다.
하지만 K8S로 마이그레이션하거나 진행해야 할때는 있을거다.
그때를 위해서 공부는 꾸준히 해놓자...
'Architecture > Computing' 카테고리의 다른 글
self hosted 로 gitlab 설치하기 (0) | 2025.03.27 |
---|---|
python 앱 빌드시간 단축 (0) | 2025.01.12 |