쿠버네티스 교육/EKS 교육

EKS 비용 절감

Jerry_이정훈 2023. 9. 11. 06:11
728x90

이직한지 5주 되었는데 그동안 비용 절감 관련 작업한 것을 정리해 본다.

 

항상 느끼지만 비용 관련해서는 특별하고 어려운 기술이 필요한 것이 아니고 이미 아는 내용을 귀찮아 하지 말고 꼼꼼하게 적용하려는 개미의 근면함이 필요하다. 다른 사람, 팀과 공유하고 설득하는 과정이 참 중요하다.

 

그리고 스피드가 중요한 스타트업에게 새로운 기능을 추가하는 것이 비용절감 보다 더 가치있는 일이 될 수 있다. 어떤 일이 더 중요한지는 각 회사마다 상황이 다르니 적절한 의사 결정이 필요하다. 비용 10% 아끼는 것보다 새로운 기능 추가해서 100%, 200% 성장하는 게 훨씬 의미있는 일이 될 수 있다. 

 

물론 회사 일이란 당연하게도 속도와 비용 절감 2가지 토끼를 모두 잡는 지혜가 필요하다. (이게 임원진 회의에서나 가능한 말이기는 하지만) 자동화해서 최대한 손이 덜가게 한다.

 

Karpenter, RI, Tag 설정 등은 잘되어 있어 다른 내용만 공유합니다.

 

1. KRR(K Resource Recommender) 이용 Request 조정

kubecost 보다 krr이 CLI 기반이고 설치도 간편해서 krr 사용해서 request 설정을 줄였다.

 

운영 서비스에 request는 처음에 넉넉하게 잡아놓고 문제 없으면 수정을 안하는 경향이 있는데 여기도 마찬가지라 실제 현황보다 넉넉하게 잡아서 비용 낭비가 있었다. 실제 사용량 기준으로 Request 설정을 낮추어서 비용을 줄일 수 있었다.

 

cpu는 초기 peak 사용 시 대응 할 수 있도록 limit 설정을 제거하였고 memory는 안정적으로 운영하도록 request, limit 설정을 동일하게 하였다. 온프레미스 환경에서 하찮게 여겼던 ‘1’ Core도 굉장히 큰 자원임을 새삼느꼈다. 

 

https://github.com/robusta-dev/krr 

이건 YAML 파일 수정하는게 손이 많이 가는 작업인데 이걸 자동으로 할 수 있으면 좋은데 찾기가 힘들었다. 그리고 리소스 사용량은 변화하니 1달에 한번 정도 정기적으로 레포트 같은 걸 받는 걸 연구해봐야 한다.

 

2. ALB Ingress Group 사용해서 인그레스 줄이기

 

참조

https://aws.amazon.com/ko/blogs/tech/a-deeper-look-at-ingress-sharing-and-target-group-binding-in-aws-load-balancer-controller/ 

 

 alb.ingress.kubernetes.io/group.name 설정을 사용해서 인그레스를 통합하였다.

 

전체를 하나의 Ingress로는 당연히 줄일 수 없고 Security Group을 같이 사용하는 것끼리 하나로 통합하였다. 하나로 통합하는 과정에서 Tag를 같이 사용할 수는 없어서 기존에 사용하는 Tag 정보는 삭제하였다. Tag는 비용 Tracking이 목적이었는데 같이 사용하면 필요없어서 새로운 Tag를 등록해도 문제없었다.

 

성능을 걱정하였는데 앞단의 CloudFront 등이 있고 ALB 자체가 리소스를 많이 안 먹어서 그런지 성능은 별다른 이슈가 없었다.

 

3. 개발 EKS 가용성 존(AZ) 1개만 사용

Data Transfer 비용이 생각보다 많이 나와서 개발 EKS는 AZ를 하나로 통합하였다. Data Transfer 비용도 줄어들고 노드 비용도 줄었다. Topoloy Spread Copnstraints 설정을 사용해서 각 AZ마다 노드가 배치되었는데 그럴 필요가 없어서 노드 비용도 줄어드는 효과도 있었다.

 

4. LimitRange 설정 조정

 

LimitRange 관련 참조

https://kubernetes.io/ko/docs/concepts/policy/limit-range/ 

 

KRR 통해서 실제 사용량을 확인하니 리소스를 거의 사용하지 않는 파드들도 많았다. LimitRange 설정의 Default Request 설정을 CPU 10m, Memory 100Mi 줄였다. 사소한 설정인데 이것도 생각보다 많은 절약이 되었다.

 

5. Karpenter Provisioner의 Min 인스턴스 타입 조정

Min 노드 타입이 높게 되어 있어 인스턴스 타입을 낮추었다. Request 설정이 줄어드니 필요한 노드 타입 사이즈도 줄어들었다.

 

상세한 설정 내역은 보안 상 어려울 것 같고 대략의 내용만 공유하였습니다.

반응형