험난한 Kubernetes 전환기 (4) - 못다 한 이야기들
지난 몇 개월간 Azure Kubernetes Service, Amazon EKS, 그리고 기존 서비스 전환까지 진행하며 주요 서비스를 Kubernetes 환경으로 이전했습니다.
지금도 계속 다른 작업을 진행하고 있지만, 지금까지 작업을 하면서 느꼈던 내용과 차마 이야기하지 못했던 내용들을 돌아보려고 합니다.
K8s로 전환하고 얻은 것
기존 환경이 Docker Compose 기반이었고 이로 인한 구조적 한계가 많았기 때문에,
단순히 K8s로 전환하는 것만으로도 많은 개선점이 있었습니다.
기본적인 안정성
확실히 안정성이나 유지보수 측면에서는 발전했다고 생각합니다.
기존 Docker Compose 환경은 컨테이너에 문제가 생겼을 때 복구도 어려웠고, 네트워크 순단 등 여러 문제가 있었습니다.
K8s에서 기본 기능으로 Pod 재시작이나 Graceful shutdown 등을 지원하기 때문에, 기존 환경에서 복잡하게 구현하거나 포기했던 부분들이 간단하게 구현되었습니다.
로그를 보기도 편했고, 환경이나 리소스를 바꾸어야 할 때도 다운타임을 최소화하면서 진행할 수 있었습니다.
Auto-scaling
K8s를 전환하면서 가장 많이 신경 썼던 부분이 바로 Auto-scaling이었던 것 같네요.
Azure에서는 Cluster Autoscaler를 사용했고, EKS에서는 Karpenter를 도입했습니다.
Docker Compose 환경에서는 Scaling 작업을 수동으로 해야 했지만 K8s는 그렇지 않아도 되었고, 트래픽 상황에 따라 리소스 조정을 유연하게 할 수 있게 되었습니다.
B2B 서비스의 특성상 특정 시간대에 트래픽이 몰리거나, 반대로 특정 시간대에 사용자가 적어 리소스 낭비가 생길 때도 있기 때문에 더더욱 큰 효 과가 나온다고 생각합니다.
배포 프로세스의 개선
Argo CD와 Helm을 활용한 GitOps 방식으로 배포 프로세스를 표준화하고 있습니다.
아직 진행 중이지만 각 서비스마다 제각각이었던 배포 방식을 통일하면서 유지보수에 들어가는 리소스를 줄이고 있습니다.
수많은 오픈소스 도구
K8s도 이제는 10년이 된 오픈소스 프로젝트이기 때문에 수많은 오픈소스 도구들이 있습니다.
Argo CD, ExternalDNS 등 수많은 도구들이 리소스 관리 면에서 편의성을 높여주고, 지금도 계속 새로운 도구들이 나오거나 안정화되고 있습니다.
실제로 몇 가지 도구를 도입하여 효과를 직접적으로 느끼기도 했고, 앞으로도 이러한 도구를 활용하면서 더 나은 환경을 만들어 갈 수 있게 되었습니다.