SUMMARY
여러 물리 서버에 파편적으로 분산된 개발 환경의 비효율성과 관리 복잡성을 해결하기 위해 쿠버네티스 기반 클러스터 도입을 결정했다. 리소스 통합 관리, 환경 격리, 자동화된 배포 등을 통해 개발 생산성 향상과 안정성 확보를 목표로 했다.
사내 개발 클러스터를 쿠버네티스(Kubernetes)로 전환해야 하는 필요성과 근거로 제시한 사항은 다음과 같다.
1. 기존 개발 환경의 한계
사내 개발 환경은 대부분 도커(Docker) 기반으로 운영되고 있었지만, 여러 물리 서버가 공통된 관리 주체 없이 파편적으로 사용되고 있었다. 개발자들은 필요한 리소스를 각자 서버에 할당하여 사용했고, 이러한 방식은 시간이 지남에 따라 여러 문제점을 드러내기 시작했다.
2. 주요 문제점
2-1. 비효율적인 리소스 관리
각 서버에 어떤 애플리케이션이 동작 중인지 한눈에 파악하기 어려웠고, 서버의 자원이 제대로 활용되지 않아 낭비되는 경우가 잦았다. 특정 서버에 부하가 몰리는 동안 다른 서버는 유휴 상태로 남아있는 등 리소스 분배가 비효율적이라고 판단했다.
- 서버를 통합적으로 관리하는 도구가 마련되지 않아 개별적으로 SSH 접근하는 방식으로 활용하다 보니, 유휴 자원이 있어도 제대로 모니터링되지 않았다.
- 신규 프로젝트나 테스트 서버가 추가로 필요할 때마다 가용 자원을 파악하는 데 많은 시간이 소요되었다.
- 여러 서버를 클러스터화하여 사용하는 경우, 각각의 서버(노드)에 배포해야 하는 번거로움이 있었다.
- 모니터링 통합이 이루어지지 않아 로그나 시스템 정보를 사람이 수동으로 취합해야 했고, 이로 인해 업무 효율성 저하와 지연이 발생하기 일쑤였다.
2-2. 관리의 어려움과 책임 불명확
여러 개발자가 공용 계정으로 서버에 접근하는 경우가 많아, 누가 프로세스를 중단하거나 파일을 변경했는지 추적하기 어려웠다. 문제가 발생해도 원인 파악에 오랜 시간이 걸렸고, 이는 안정적인 개발 환경을 저해하는 요소로 작용했다.
- 원칙적으로는 개인이나 프로젝트 단위로 리눅스(Linux) 사용자 계정을 구분하거나 서버를 분리하는 등 리소스를 나누고 관리하는 프로세스와 규정, 관리 담당자가 있어야 했다.
- 그러나 이러한 체계를 기존 시스템 내에서 마련하려면 많은 비용이 소요되었고, 현실적으로 이를 실행하기 어려운 상황이었다.
- 공용 계정 사용으로 인해 책임 소재가 불분명해졌고, 이는 문제 해결 과정에서 비효율성을 초래했다.
- 서버 관리와 관련된 명확한 규정이 부재하여, 개발자 간의 협업과 문제 해결이 원활하지 않았다.
3. 새로운 시스템의 필요성
결론적으로, 리소스를 효율적으로 관리할 수 있고 사용자나 관리자가 편리하게 활용할 수 있는 솔루션이 필요했다.
- 모든 물리 서버를 클러스터화하여 통합적으로 관리할 수 있어야 했다.
- 사용자가 직접 물리 서버에 접근하지 않고, 필요할 때마다 가용 자원 내에서 리소스를 할당받을 수 있는 환경이 요구되었다.
- 자원과 애플리케이션의 상태를 실시간으로 모니터링할 수 있는 체계가 필요했다.
이러한 문제들을 해결하기 위해 새로운 개발 환경 시스템이 필요하다고 느꼈다. 시스템이 갖춰야 할 핵심 기능은 다음과 같이 정의했다.
3-1. 시스템 요구사항 정의
- 리소스 통합 관리: 여러 서버의 리소스를 중앙에서 통합하여 관리하고, 낭비되는 자원을 최소화해야 한다.
- 프로젝트별 환경 격리: 부서나 프로젝트 단위로 리소스 사용량을 제한하고, 서로 다른 프로젝트가 서로에게 영향을 주지 않도록 격리된 테스트 환경을 쉽게 구성할 수 있어야 한다.
- 자동화된 배포 및 관리: 애플리케이션의 빌드, 테스트, 배포 과정을 자동화하여 개발 생산성을 높일 필요가 있었다.
- 모니터링 시스템: 로그 및 리소스 사용량을 체계적으로 모니터링하여 문제 발생 시 빠른 대응이 가능해야 한다.
- 온프레미스(On-premise) 환경 지원: 사내 개발 환경은 대부분 클라우드보다 온프레미스 환경에 구축되어 있으므로, 새로운 솔루션 역시 이를 원활하게 지원해야 했다.
4. 결론
위에서 정의한 요구사항들을 다각도로 검토한 결과, 쿠버네티스(Kubernetes)가 가장 적합한 솔루션이라고 결론 내렸다.
쿠버네티스는 컨테이너화된 워크로드를 자동화하고 관리하기 위한 오픈소스 플랫폼으로, 리소스 통합 관리, 선언적인 서비스 관리, 자동화된 롤아웃 및 롤백 등 필요로 하는 대부분의 기능을 갖추고 있었다. 따라서 쿠버네티스를 도입하여 파편화된 개발 환경을 통합하고, 효율적이고 안정적인 시스템을 구축하기로 결정했다.
INFO
특히 다양한 프로젝트의 개발 및 테스트 환경을 온디맨드(On-demand)로 제공하고, 개별 개발자가 독립적인 테스트 공간을 가질 수 있게 한다는 점에서 쿠버네티스의 유연성이 매력적으로 다가왔다. 네임스페이스(Namespace) 기반 격리와 RBAC(Role-Based Access Control)를 통해 기존 환경에서 해결하기 어려웠던 권한 관리 문제도 체계적으로 해결할 수 있을 것으로 기대됐다.