글을 쓰게 된 배경
유데미의 도커・쿠버네티스 강의를 들으면서, AWS EKS(Elastic Kubernetes Service)로 쿠버네티스 클러스터를 생성해보는 실습을 진행했습니다. 클러스터 생성해놓고선 깜빡 잊고 있다가 며칠 뒤 청구서 폭탄을 맞았습니다.
저처럼 별 고민없이 AWS에서 쿠버네티스 실습하다가 뒷목잡는 분이 없기를 바라며 이 글을 씁니다.
유의사항
- 이 글은 AWS 인프라를 전문적으로 다루는 개발자의 글이 아닙니다. 추측과 질문이 난무할 수 있습니다.
- 글이 길어질 거라 1편과 2편으로 나눌 예정입니다.
- AWS (특히 VPC)에 대해 개념을 잘 알고 계신 분이라면 언제든지 댓글과 토론 환영합니다.
1. AWS EKS(쿠버네티스 서비스) 실습은 비싸다
모든 일의 발단은 결국 AWS(=돈)다.
그전까지는 쿠버네티스 실습을 minikube로 실습했지만, 사실 minikube는 단일 노드 환경이라 정말 쿠버네티스 클러스터를 다루는 느낌은 아니었다.
강의의 마지막 주제는 AWS에서 쿠버네티스 배포해보기였다.
그래서 나도 이왕 할 거면 '진짜 실습같은 실습을 해보자'는 생각으로 실행에 옮겼다.
내 AWS 계정은 이미 free tier 기간이 끝난데다 AWS EKS는 free tier 지원도 안된다는 걸 알고 있었지만, 그래도 자기계발에는 돈을 아끼지 말자는 내 소신 + 어차피 금방 (클러스터를) 만들고 삭제할 건데? 라는 가벼운 생각으로 시작했다.
클러스터 생성 3일만에 2만원이 나오다
클러스터는 일요일(3월 24일)에 생성했고, 스펙은 이렇게 맞췄다.
- 클러스터의 노드(EC2 인스턴스) 개수는 2개로 설정했고, node minimum, maximum, desired 사이즈 모두 2개로 유지
- 인스턴스 타입은 t3.small, OS 이미지는 Amazon Linux 2 (AL2_x86_64), capacity type은 On-demand로 지정, disk size는 20GiB로 지정
간단한 실습용으로 맞춘 아주 기본적인 스펙이다.
그래서 처음 내 생각은 이랬다. '보통 t3.small 같은 작은 EC2 인스턴스는 하루종일 계속 켜둬도 1달러 정도만 나오고, 클러스터에 노드 두 개 있으니까 그럼 하루에 해봤자 2달러쯤 나오려나?'
이렇게 안일하게 생각한 게 화근이었다. 다른 일 때문에 바빠서 잊고 지내다가, 수요일 쯤 돼서야 AWS에 들어갔다.
그리고 혹시나 하는 마음에 비용 메뉴에 들어가봤다. 그런데...
클러스터 만든 지3일만에 17달러(=약 2만 3천원)가 나와버렸다. 2만 3천원이면 도미노 피자 라지 한판 가격인데
왜 비용 생각을 못했을까? 아니 애초에 이렇게 비쌀 줄은 예상을 못했던 것 같다.
내가 조금만 더 철저했다면 Cloudwatch로 알람 메시지를 설정하거나, 아니면 일요일 다음날 바로 비용을 확인해볼 수도 있었다.
또 한편으로는 유데미 강의 운영자가 원망스럽기도 했다. 강의에서 이거 돈 많이 나간다고, 조심하라고 좀만 주의를 주었어도 신중하게 접근하지 않았을까? 어쨌든 이미 엎질러진 물이다. 여러분은 나처럼 바보같이 가만히 있다가 AWS에 꽁돈 바치지 마시라.
비용 분석: EKS는 왜 이리 비싼가?
돈값으로 교훈을 톡톡히 치렀으니, 이제 이런 일이 발생하지 않도록 확실히 알고 넘어가는 게 중요하다.
그럼 도대체 어느 부분에서 비용이 이렇게 많이 나온 걸까? 어디서 비용이 나온 건지, 무엇이 원인인지 샅샅이 분석하고 싶다.
다행히 AWS Billing and Cost Management 서비스에 비용 분석을 해주는 Cost Explorer라는 편리한 기능이 존재한다. Cost Analysis 바로 밑에 Cost Explorer를 누르고, Report Parameters에서 원하는 날짜를 선택하면 비용을 카테고리별로 확인할 수 있다.
1. EKS 자체 비용
위 캡처 이미지는 클러스터를 생성한 당일(3월 24일 일요일)에 청구된 내용이다. 가장 큰 비중을 차지하는 건 EKS(Elastic Container Service for Kubernetes)로 2.13달러가 나왔다. EC2 인스턴스 제외하고도 EKS 자체에 청구하는 비용이 따로 있나보다. 하루 치고는 꽤 많이 나가는 것 같은데 공식 요금은 얼마인 걸까?
AWS EKS 공식 문서 를 보면 EKS 이용 요금은 시간당 0.10달러라고 한다.
그럼 클러스터 인스턴스 개수나 타입에 상관없이 EKS 청구 비용은 하루에 고정 2.4달러인걸까?
그렇다. 이것도 이따가 보여줄 청구서에서 확인할 수 있다.
2. EC2-Instances 온디맨드 요금
사실 위에 청구 내용에는 EC2-instances 비용이 0으로 나오지만, 아마 일요일에 클러스터만 만들고 노드 그룹(EC2 인스턴스들)을 추가하지 않아서 비용이 나오지 않은 것 같다. 월요일 이후에 노드 그룹도 추가한 걸로 기억한다. 그랬더니 EC2-instances 비용도 당연히 발생했다.
EC2는 워낙 잘 알려진 서비스라 간단히만 언급하고 넘어가겠다. 보통 입문용 실습에서 많이 쓰는 t3.small 타입은 시간당 0.0208달러, 하루 약 0.5달러다. 나는 중간에 에러(맥북 M1의 ARM 아키텍처 & 도커 이미지 호환 문제였다) 해결한다고 기존 노드 그룹을 삭제한 다음 m6g.large 타입(시간 당 0.077달러, 하루 약 1.85달러)의 노드 그룹을 새로 생성했더니 돈이 더 나왔다. 이러고선 EC2 인스턴스를 꺼둘 생각도 안하고 계속 켜두었으니 돈이 줄줄 새어나갔다. 지금 돌이켜보니까 돈 아까운 줄 몰랐구나...
3. EC2-Others 비용의 정체는?
3월 24일 말고 이틀 뒤인 3월 26일(화요일) 비용을 분석해보자.
지금은 잘 기억이 나지 않지만 월요일이나 화요일 쯤 실습을 좀 더 건드려서 노드 그룹도 만들고 Load Balancer랑 EFS 볼륨도 추가했더니 청구서도 좀 더 화려해졌다(그리고 그만큼 내 지갑은 가벼워진다).
EC2-Other 비용이 2.29달러로, 앞서 설명한 EC2 인스턴스나 EKS 서비스 고정 비용만큼은 아니지만 그래도 꽤 센 가격이다. EC2-other는 도대체 정체가 뭘까?
먼저 이 두 글을 참고하자.
- https://repost.aws/ko/questions/QUl5rvwuqeRtyjlNvH6GCmGg/ec-2-other-에서-요금이-나가고-있습니다
- https://repost.aws/ko/questions/QUu7yAaOTMQLe4S9tsWMA14Q/ec-2-other-비용-세부내역은-어떻게-확인하나요
2번 글의 답변대로 Bills > 아래로 내려가서 Charges by Service(서비스별 요금) 항목을 클릭해서 토글을 펼치면 EC2-Others 요금의 세부내용을 확인할 수 있다.
중간에 Amazon Compute Cloud running Linux/UNIX는 EC2-Instances에 해당하는 항목이고,
나머지 NAT Gateway와 EBS(Elastic Block Storage)가 바로 EC2-Others 비용의 주범이었다.
NAT Gateway가 무엇인지, EBS는 또 무엇인지 설명하면 글이 너무 길어질 거 같아 간단하게만 정리하려고 한다.
- NAT Gateway = 인터넷 연결 / 네트워크 / 통신
- EBS = 하드디스크 / 파일 저장용
어쨌든 결론을 정리하면,
쿠버네티스 클러스터는 단순히 EC2 인스턴스를 모아놓은 것이 아니다.
1) 통신/네트워크 2) 파일 저장 이 두 가지 기능을 모두 지원해야 하기 때문에 비용이 추가로 발생한다.
4. Elastic Load Balancing
로드 밸런싱(load balancing)은 뜻풀이만 잘하면 이해하기 쉽다. 부담(load)을 균형(balance)있게 분산해주는 녀석이다.
클러스터 내 노드를 사람에 비유하면, 한두 사람만 죽어라 일하다 과로로 쓰러지지 않도록 업무(트래픽)을 알아서 적절히 배분해주는 역할을 한다.
실제 로드 밸런서는 그보다 좀 더 복잡하고 설정해야 할 것도 많은 게 문제지만, 어쨌든 로드 밸런서는 클러스터를 구성하는 데 꼭 필요한 요소다. 그리고 또 유용하기 때문에 공짜가 아니다.
Classic Load Balancer 기준 시간 당 0.025달러(참고로 Application Load Balancer는 시간 당 0.0225달러로 거의 비슷하다)로 하루 0.6달러에 해당한다. 이보다 0.02달러 적은 0.58달러가 나왔으니 얼추 맞는 것 같다.
5. 최종 정리: 그래서 AWS EKS 실습하면 하루에 얼마 나오는 걸까?
결론부터 말하면 하루 약 최소 5달러, 한 달은 148달러 정도가 나온다. 148달러면 한화로 20만원이 조금 안되는 정도다.
하지만 이건 정말 최소한의 스펙(인스턴스 크기 개수, 할당 IP 주소 개수, 데이터 전송량 등)을 기준으로 산정한 것임을 명심하자.
- AWS EKS 요금 계산기 로 들어가면 월별 73달러라고 하는데, 이건 EKS 서비스 자체 비용만 계산한 거라는 사실을 알 수 있다. 실제로는 EC2 인스턴스도 돌려야 하고 VPC도 만들고 인터넷 통신(NAT Gateway 등)도 연결하고 볼륨도 붙여야 하니 추가 요금이 아주 많이 붙는다.
- 이 테이블은 2024년 4월을 기준으로 산정했다. AWS가 나중에 서비스 요금을 언제든지 바꿀 수 있기 때문에 정확한 정보는 AWS 공식 문서를 참고하기 바란다(혹은 직접 클러스터 만들어보거나).
- Data processed NAT Gateway 요금은 사용 시간 당 붙는 게 아니라, 전송한 데이터 양에 비례한다. 1GB 당 0.05달러씩 청구된다. 그래도 대략적인 수치를 표시하기 위해 0.05~5달러로 나타냈다.
1편을 마치며
- 쿠버네티스 클러스터를 배포하는 과정에는 생각보다 많은 요소를 고려해야 한다. 클러스터란 단순히 EC2 인스턴스 여러 개를 그룹으로 묶어둔 게 아니라, 그 안에서 통신도 하고 데이터도 저장하고 트래픽도 적절히 분산해야 하기 때문이다.
- AWS는 정말 없는 게 없을 정도로 다양한 서비스를 제공하지만, 제각기 비용이 있다. 클러스터 만들랬더니 이것도 추가하고 저것도 추가해야 하고, 하지만 각각 추가하는 기능은 모두 별개의 서비스였고 또 별개의 비용을 의미했다.
- 사실 아직 하나를 설명 안한 게 있는데, 바로 VPC다. EKS 클러스터를 삭제해도 저절로 삭제되지 않는 게 바로 VPC이기 때문이다. 이건 2편에서 더 자세히 얘기해보기로 하자.
'AWS' 카테고리의 다른 글
[AWS Week 1] IAM과 AWS 권한 설정하기 (0) | 2024.04.02 |
---|---|
[AWS Week 1] Region과 Availability Zone (0) | 2024.04.02 |