인프라 환경이 다변화되고 자원의 분배가 중요해지면서 Container System(이하, 컨테이너)이 대세가 되었습니다. 컨테이너가 시장에 들어오면서 상대적으로 부하 분산(Load Balancing)이 쉬워지고, MSA(Microservice architecture)가 대두되기 시작했습니다. 이 포스트에서는 컨테이너에 대한 역사와 Kubernetes 관리의 복잡성을 줄이고 효율성을 높이기 위한 혁신적 접근 방법에 대해 다뤄보겠습니다.
컨테이너 개념과 Docker의 등장
컨테이너 기술은 1979년 Unix의 chroot 명령어에서 시작됩니다. chroot는 프로세스를 격리된 파일 시스템 루트로 변경하여 보안성과 안정성을 높이는 기능을 제공했습니다. 이후 2000년대 초반에는 FreeBSD의 Jail과 Solaris의 Zones 같은 더 발전된 격리 기술이 등장하여 운영 체제 수준에서의 격리와 자원 제어를 가능하게 했습니다. 이러한 기술들은 모두 현재의 컨테이너 기술의 기초가 되었습니다.
특히 2008년 등장한 LXC(Linux Containers)는 리눅스 커널 기능을 활용하여 가벼운 격리 환경을 제공했고, 이는 컨테이너 기술의 대중화를 이끄는 중요한 전환점이 되었습니다. 그러나 2013년 Docker가 등장하면서 컨테이너 기술은 획기적인 변화를 맞이했습니다. Docker는 애플리케이션의 배포를 단순화하고 이식성을 높이며, 개발과 운영 간의 협업을 촉진하는 혁신적인 도구로 자리잡았습니다.
많은 컨테이너의 관리, Docker Swarm
컨테이너의 수가 증가함에 따라, 여러 컨테이너를 효율적으로 관리할 수 있는 도구의 필요성이 대두되었습니다. Docker에서는 2015년 Docker Swarm을 도입했습니다. Docker Swarm은 Docker 엔진에 내장된 네이티브 오케스트레이션 도구로, 여러 호스트에 걸쳐 있는 Docker 컨테이너를 클러스터로 묶어 관리할 수 있게 해줍니다.
Swarm은 사용자의 요구에 맞춰 자동으로 컨테이너를 배치하고, 서비스의 가용성을 유지하며, 확장성을 제공하는 기능을 갖추고 있습니다. 이를 통해 기업들은 더 많은 컨테이너를 효율적으로 운영할 수 있게 되었고, 애플리케이션의 확장과 유지보수가 용이해졌습니다.
새롭게 제시된 Kubernetes
2015년, Google은 오픈 소스 컨테이너 오케스트레이션 도구인 Kubernetes(이하 K8S)를 발표했습니다. K8S는 대규모 분산 시스템을 관리하는 데 필요한 자동화 기능을 제공하며, 컨테이너화된 애플리케이션의 배포, 확장, 운영을 간소화했습니다. K8S는 선언적 구성 파일을 통해 애플리케이션의 상태를 정의하고, 이를 기반으로 자동으로 시스템을 원하는 상태로 유지합니다. 이와 함께, 다양한 클라우드 제공업체와의 호환성, 확장성, 그리고 강력한 커뮤니티 지원 덕분에 K8S는 빠르게 업계 표준으로 자리잡았습니다. K8S는 컨테이너의 배치, 확장, 네트워킹, 로드 밸런싱 등을 자동화하여 운영자의 부담을 크게 줄였습니다.
사장되는 Docker Swarm
Docker Swarm은 K8S의 등장 이후 몇 가지 중요한 단점으로 인해 널리 채택되지 못하고 결국 사장되었는데, 그 이유를 살펴보겠습니다.
첫째, Docker Swarm은 K8S와 비교할 때 기능이 제한적이었습니다. Swarm은 기본적인 오케스트레이션 기능을 제공했지만, 고급 네트워킹, 로드 밸런싱, 자동 복구와 같은 기능이 부족했습니다. 이는 대규모 분산 시스템을 운영하는데 단점이었습니다.
둘째, Docker Swarm은 커뮤니티와 생태계 면에서 K8S에 비해 열세였습니다. K8S는 Google의 지원과 함께 커뮤니티에서 활발히 발전해왔으며, 다양한 플러그인과 확장 기능을 통해 유연성을 제공했습니다. 반면, Swarm은 상대적으로 제한된 커뮤니티와 생태계를 가지고 있어, 사용자가 필요로 하는 다양한 기능을 제공하는데 어려움이 있었습니다.
셋째, K8S와의 경쟁에서 뒤쳐지게 된 중요한 이유는 벤더와 클라우드 제공업체들의 지원 부족이었습니다. 주요 클라우드 제공업체들은 K8S를 기본 오케스트레이션 도구로 채택하고, 이를 중심으로 한 서비스를 제공하기 시작했습니다. 이로 인해 Docker Swarm은 점차 경쟁력을 잃게 되었습니다.
결과적으로, 이러한 단점들로 인해 많은 기업들이 Docker Swarm 대신 K8S를 선택하게 되었고, Docker Swarm은 점차 사장되게 되었습니다.
CLI로 관리되는 K8S의 불편함
K8S는 강력한 오케스트레이션 도구지만, CLI(Command Line Interface) 기반의 관리 방식은 사용자에게 다소 불편함을 줄 수 있습니다. K8S의 CLI인 kubectl을 사용하여 클러스터를 관리하려면 사용자는 명령어와 파라미터를 정확히 숙지해야 하며, 이는 접근 장벽을 높이는 요인이기 떄문입니다.
특히, 시각적인 피드백이 부족한 CLI 환경에서는 실시간 모니터링이나 트러블슈팅이 어렵고, 복잡한 작업을 수행할 때 실수가 발생할 가능성도 높습니다. 이러한 불편함을 해소하기 위해 다양한 GUI(Graphical User Interface) 도구들이 개발되었지만, 기본적으로 K8S의 CLI 중심 관리 방식은 여전히 사용자에게 도전 과제로 남아 있습니다. 이에 따라, 보다 직관적이고 사용하기 쉬운 관리 도구와 인터페이스의 필요성이 지속적으로 제기되고 있습니다.
Rafay를 통한 K8S 환경의 시각화
Kubernetes(K8S)는 강력한 오케스트레이션 도구지만, CLI 기반의 관리 방식은 초보자에게 높은 진입 장벽으로 작용할 수 있습니다. Rafay를 사용하면 이러한 어려움을 해결할 수 있습니다. Rafay는 GUI 기반의 관리 도구로, kubectl을 사용하면서 발생하는 여러 문제들을 해소하여 K8S를 보다 쉽게 사용할 수 있게 합니다.
Rafay에서는 Cluster에 접근할 사용자를 초대하고 관리할 수 있습니다.
Rafay는 멀티 클러스터 환경에서의 관리 기능을 대폭 향상시켜 줍니다. 이는 단일 클러스터 뿐 아니라 여러 클러스터에 걸쳐 있는 리소스를 효율적으로 관리할 수 있게 해줍니다. 인프라 관리자는 GUI를 통해 각 클러스터의 상태를 모니터링할 수 있습니다. 상황을 GUI를 통해 시각적으로 확인할 수 있기 때문에, 문제가 발생했을 때 빠르게 원인을 파악하고 대응할 수 있습니다.
Rafay에서는 특정 그룹을 프로젝트 단위로 권한을 세부적으로 조절할 수 있으며, 권한 구성 템플릿도 제공하고 있습니다.
접근 권한의 통제도 Rafay의 중요한 기능 중 하나입니다. Kubernetes 클러스터에 대한 접근 권한을 중앙에서 관리하고, 사용자별로 세부적인 권한을 설정할 수 있습니다. 이를 통해 보안성을 높이고, 필요에 따라 접근 권한을 유연하게 조정할 수 있습니다. 이는 특히 대규모 팀이 협업하는 환경에서 매우 유용합니다. 이 API에 대한 정보는 여기에서 확인하실 수 있습니다.
Rafay는 자체 API를 통해 다양한 업무를 자동화할 수 있는 기능을 제공합니다. 이를 통해 반복적인 작업을 줄이고, 인적 오류를 최소화할 수 있습니다. 예를 들어, 애플리케이션의 배포, 업그레이드, 스케일링 등의 작업을 API를 통해 자동화할 수 있으며, 이를 통해 운영 효율성을 크게 높일 수 있습니다.
Rafay의 하이브리드 방식을 채택
Web Dashboard는 SaaS 형태로 사용할 수 있으며, Rafay Agent는 온프레미스(On-Premise) 환경과 클라우드 환경 모두에서 효과적으로 작동합니다. 최소한의 포트 개방만으로도 안전하게 K8S 클러스터에 Rafay Agent를 설치하고 정보를 전달받을 수 있습니다. 이는 기업이 기존 인프라를 활용하면서도, 최신 클라우드 기술의 이점을 누릴 수 있게 해줍니다. Rafay Agent는 클러스터의 상태를 지속적으로 모니터링하고, 필요한 정보를 중앙 시스템에 전달하여, 사용자가 클러스터를 효율적으로 관리할 수 있도록 지원합니다.
Rafay에서 특정 Namespace의 Pod 상태를 확인하는 화면
Rafay Agent를 Cluster에 구성하면 Cluster의 상황을 Web Dashboard를 통해 손쉽게 확인할 수 있습니다. 노드, 리소스의 상황을 최대 30초 간격으로 갱신하여 실시간성이 보장되는 정보로 볼 수 있습니다.
Rafay는 바닐라 K8S 환경에서 발생하는 kubectl 사용의 어려움을 해결하고, 사용자의 편의성을 높이는 다양한 기능을 제공하여 K8S의 진입 장벽을 낮추고 효율적인 운영을 가능하게 합니다.