Kubernetes 란?
K8s라고도 알려진 쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템이다. 쿠버네티스는 다양한 애플리케이션과 서비스들을 컨테이너화 시킨 다음, 서버에 가져올 경우 적절하게 배치를 해주며 관리를 해주는 Container Orchestration 시스템이라고 생각하면 된다.
Container Orchestration 시스템에는 Kubernetes 이외에도 Docker Swarm, Apache Mesos 등이 존재한다.
쿠버네티스의 여정
전통적인 배포 시대
초기에는 애플리케이션을 물리 서버에서 실행하는 방식이었다. 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당에 문제가 발생했다.
예를 들어 물리 서버 하나에서 하나의 애플리케이션이 리소스를 많이 차지한다면 나머지 애플리케이션은 성능이 저하되기 마련이다. 해결책으로는 물리서버를 늘리는 방식이 있는데 이는 많은 비용을 초래했다.
가상화된 배포 시대
위의 현상에 대한 근본적인 해결책으로 가상화가 도입되기 시작하였다. 단일 물리 서버에서 여러 가상 시스템을 실행하는 방식이다.
가상화를 통해 VM간에 애플리케이션을 격리할 수 있고 다른 애플리케이션에게 자유롭게 액세스 할 수 없어서 일정 수준의 보안을 제공할 수 있다.
가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있다.
각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신이라고 할 수 있다.
컨테이너 개발 시대
컨테이너는 VM과 유사하지만 격리 속성을 완화해 애플리케이션 간에 OS를 공유한다. 그렇기 때문에 컨테이너는 가볍게 여겨진다. 또한, 다음과 같은 추가적인 기능들이 제공되기 때문에 인기를 얻게 되었다.
- 기민한 애플리케이션 생성과 배포 : VM 이미지를 사용하는 것에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적
- 지속적인 개발, 통합 및 배포 : 안정적이고 주기적으로 컨테이너 이미지를 빌드해 배포할 수 있고, 효율적이고 빠르게 롤백도 가능함
- 개발, 테스팅 및 운영 환경에 걸친 일관성 : 어느 기기에서든 동일하게 구동되는 환경
- 클라우드 및 OS 배포판 간 이식성 : Ubuntu, RHEL, CoreOS, 온-프레미스, 주요 퍼블릭 클라우드와 어디에서든 구동됨
- 리소스 격리 : 애플리케이션 성능 예측 가능
- 자원/리소스 사용량 : 고효율
위와 같은 여정들을 거치면서 개발자들은 자연스레 컨테이너 개발환경을 이용하고 선호하게 되었다. 쿠버네티스는 다른 컨테이너 오케스트레이션 툴에 비해 늦게 출시되었지만 현재는 거의 업계 표준이라고 봐도 무방할 정도의 영향력을 지니고 있다. 특히나 오픈소스로 이루어진 시스템이라는 것이 가장 큰 장점이고 커뮤니티 역시 활발한 상태이다.
쿠버네티스가 하는 일, 필요한 이유
컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법이다. 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야 한다. 예를 들어 컨테이너가 다운될 경우, 다른 컨테이너를 통해 서비스를 제공함으로써 무중단 상태를 만들 수 있다. 이러한 일들을 시스템에서 처리하는 것이 바로 쿠버네티스다.
쿠버네티스는 다음과 같은 기능들을 제공한다.
- 서비스 디스커버리와 로드 밸런싱 : 컨테이너에 트래픽이 많으면 쿠버네티스는 네트워크 트래픽을 로드밸런싱 함
- 스토리지 오케스트레이션 : 쿠버네티스를 사용하면 원하는 저장소 시스템을 자동으로 탑재할 수 있음
- 자동화된 롤아웃과 롤백 : 쿠버네티스를 자동화 해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하는 등의 역할이 가능함
- 자동화된 복구 : 실패한 컨테이너를 자동으로 재시작하고 교체함, 이러한 과정들은 클라이언트에게는 보여주지 않음
- 시크릿과 구성 관리 : 암호, OAuth, 토큰 및 SSH와 같이 중요한 정보를 저장하고 관리가 가능함
최근에 많은 수의 회사들이 쿠버네티스(K8s)를 사용하여 서비스를 제공하고 있습니다. 특히 구글은 모든 서비스를 컨테이너에서 운영하고 있습니다.
쿠버네티스의 초기 설정등이 어렵게 느껴지는 것은 사실이지만 이를 잘 활용한다면 기존에 존재하는 배포 환경에서 발생하는 많은 문제점들을 해결할 수 있을 것이라고 생각됩니다.
다만, 도입하기 위해서 구성원 전부가 쿠버네티스를 익혀야 하므로 도입 대비 비용을 잘 산정하여 결정을 해야할 것 같습니다.
'SW개발 > IT 용어' 카테고리의 다른 글
[Gunicorn]Gunicorn 란? 쓰는 이유는? (3) | 2021.07.10 |
---|---|
[Webhook]웹훅이란? (5) | 2021.05.27 |
[Docker]Docker(도커)란? (feat. Linux 컨테이너) (0) | 2021.05.12 |
[HAProxy]HAProxy 란? (2) | 2021.04.07 |
[WAS, WSGI, CGI]WAS, WSGI, CGI 란? (0) | 2021.02.24 |