쿠버네티스의 개념
쿠버네티스는 애플리케이션을 컨테이너화하여 관리 및 배포할 수 있도록 하는 확장 가능한 오픈 소스 플랫폼입니다. 컨테이너화는 각 애플리케이션이 동일한 OS를 공유하되, 별도의 독립된 공간에서 실행되도록 하는 것입니다. 이를 통해 서버의 유휴 자원을 효율적으로 관리할 수 있으며, 애플리케이션의 빠른 배포 및 관리가 가능합니다.
쿠버네티스를 사용하는 이유
쿠버네티스를 사용하는 이유는 무엇일까요? 이를 이해하기 위해서는 컨테이너식 배포 방법 중 하나인 쿠버네티스 이전의 물리적 서버 및 가상 머신 배포 방식을 살펴볼 필요가 있습니다. 아래 그림은 세 가지 배포 방식의 차이점을 시각적으로 정리한 것입니다. 이어지는 글은 그림에 대한 부가 설명입니다.
물리적 서버 배포
초창기 애플리케이션은 물리적 서버 위에 배포되었습니다. 실제 물리적 서버에서는 애플리케이션을 위한 리소스 영역을 규정할 방법이 없었고, 리소스 할당 문제가 발생했습니다.
예를 들어, 하나의 서버 위에서 여러 애플리케이션이 작동하고 있을 경우, 하나의 애플리케이션이 대부분의 리소스를 차지하고 있을 수 있습니다. 그 결과 다른 애플리케이션의 성능이 떨어지게 됩니다.
이를 해결하기 위해 각 애플리케이션을 서로 다른 물리적 서버에서 실행할 수도 있지만, 예상대로 사용되지 않는 유휴 리소스가 존재할 것이며 비용이 낭비될 것입니다.
가상화 배포
물리적 서버 배포에 대한 해결책으로 가상화 배포가 도입되었습니다. 이는 하나의 물리적 서버 CPU에 다수의 가상 머신(Virtual Machine)을 구축하는 방법입니다. 가상화를 통해 각 애플리케이션은 가상 머신들 위에서 독립적으로 구동됩니다. 위 그림에서 보듯, 기본 운영 시스템 위에 가상 머신 운영 체제가 구축됩니다.
이는 하나의 물리적 서버에서 리소스를 활용하는 것보다 효과적인 운영을 지원합니다. 또한 각 애플리케이션을 간편하게 추가 및 업데이트 할 수 있기 때문에 확장성이 개선됩니다.
컨테이너 배포
컨테이너(Container)는 가상 머신과 유사하지만 위 그림에서 보듯 각 애플리케이션은 동일한 운영 시스템(OS)을 공유합니다. 결과적으로 컨테이너는 VM에 비해 가볍습니다. 컨테이너는 가상 머신과 마찬가지로 자체 파일 시스템을 갖추고 있으며, CPU와 메모리, 처리 공간을 공유합니다. 기반이 되는 인프라와 분리되어 있기 때문에 클라우드나 OS 배포에 용이합니다.
쿠버네티스와 같은 컨테이너 배포 방식은 다음과 같은 장점을 갖고 있습니다.
- 빠른 애플리케이션 생성 및 배포: 가상 머신 이미지에 비해 간편하고 효과적인 이미지 생성
- 지속적인 개발, 통합, 배포: 이미지 불변성을 통해 안정적이고 주기적인 컨테이너 이미지 구축 및 배포와 효과적인 롤백
- 클라우드 및 OS 배포 용이: 우분투, RHEL, 주요 퍼블릭 클라우드 등 어디에서나 구동
- 독립적인 배포 및 관리: 애플리케이션은 독립적인 단위로 세분화되어 동적인 배포와 관리가 가능
- 자원 분리와 활용: 애플리케이션 퍼포먼스를 예측하고 효과적으로 자원을 활용
참고 자료: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/