컨테이너, 도커, 쿠버네티스를 말하다.

이성현·2022년 8월 3일
2

사내에서 '쿠버네티스 오픈소스'에 기여하겠다는 원대한 꿈을 가진 스터디를 멘토님의 지도 아래 진행중이다. 나는 왜 쿠버네티스가 필요한지에 대해 정리하기로 했다.
쿠버네티스가 왜 필요한지에 대해 설명하기 위해서는, 쿠버네티스가 없던 시절에는 어떤 방식으로 운영했는지 알 필요가 있다. 시나리오를 작성하며 개념을 정리해봤다.

전통적인 배포

어떤 회사가 있다. 이 회사는 리눅스로 돌아가는 앱1과, 윈도우로 돌아가는 앱2을 운영하고 있다. 각각의 서버를 돌리기 위해 2대의 큰 서버 컴퓨터를 운영하고 있다. 그러던 어느날, 앱1이 재밌다는 입소문을 타고 사용자들이 몰리기 시작한다. 서버가 터질 것을 우려한 회사는 한 대의 서버 컴퓨터를 새로 구축하고 리눅스를 설치 후 앱1의 서버로 사용하였다. 하지만 얼마 후 사용자들의 관심은 수그러들었고, 결국 새로 구입한 서버 컴퓨터는 방치되었다. 몇 개월 뒤 감사하게도 사용자들은 앱2에 관심을 가지기 시작했다. 사용자가 많아진 앱2를 감당하기 위해 회사는 놀고 있던 리눅스 컴퓨터를 밀고 윈도우로 다시 설치한 뒤 앱2를 위한 서버컴퓨터로 사용하였다. 그렇게 시간이 흐른 뒤, 애플의 아름다운 디자인과 함께 많은 사람들은 맥OS를 사용하기 시작했다. 그에 대한 대응으로 회사는 맥OS를 사용하는 앱3을 만들기로 한다. 이때 리눅스 앱1의 서비스를 접고 해당 서버 컴퓨터를 맥OS 앱3을 위한 서버 컴퓨터로 바꾸자는 의견과, 적은 사용자도 소중하니 리눅스 앱1을 유지하자는 의견으로 나뉘게 된다. 결국 회사는 비록 리눅스의 앱1의 사용자는 적지만, 서비스를 포기하기에는 아깝기에 용량이 많이 남은 기존 서버 컴퓨터를 밀지 않고 놔두고 한 대의 컴퓨터를 또 구매하여, 맥OS를 설치하고 서버 컴퓨터로 사용하였다.

가상화 배포

앞선 예시처럼 전통적인 배포에서의 문제점을 해결하기 위해 가상화 배포가 나왔다. 이미 가지고 있는 서버 컴퓨터의 OS를 지우고 새로 설치하는 번거로운 일을 막고, 사용중인 서버 컴퓨터의 남는 자원을 자유자재로 늘리고 줄이기 힘든 점을 가상화 시스템(VM)이 해결해준다.
OS 위에 Hypervisor를 두고, 그 위해 각 앱에 필요한 OS부터 라이브러리, bin 파일까지 모든 리소스를 올려놓는 것이다. 해당 방식을 통해, CPU와 메모리 사용이 적은 리눅스 앱1을 위한 서버 컴퓨터의 남는 리소스를 맥OS로 운영되는 앱3을 위해 사용할 수 있다. 덕분에 새로운 서버 컴퓨터를 또 구매하지 않아도 된다. 또한 기존 OS를 지우고 새로운 OS를 설치하기 위한 머나먼 여정을 떠나지 않아도 된다.

컨테이너 배포 (도커 내용 포함)

하지만 회사는 가상화 배포 역시 완벽한 방법이 아님을 깨닫게 된다. Hypervisor위에 올라가는 앱들을 사용하기 위한 OS들이 차지하는 리소스가 너무 큰 것이다. 이를 해결해주는 것이 바로 '컨테이너 활용' 이다. 컨테이너는 앱간의 운영체제를 공유한다. 정확히 얘기하면 Kernel을 공유하는데, Host OS의 커넬을 그대로 사용하고, 컨테이너는 커널 외의 필요한 데이터만을 가지고 있다. 그래서 데이터 크기가 작기 때문에 가지고 오고 필요시 버리는 일이 OS부터 가지고 있는 가상화머신보다 훨씬 가볍고 빠르다. 어떻게 이게 가능할까? 바로 도커 덕분이다. 컨테이너화 된 앱들이 운영체제를 공유할 수 있게 만드는 것이 바로 도커이다. 도커를 이용하면 OS 환경설정, 언어, 라이브러리 등이 설치된 환경을 그대로 '이미지' 의 형태로 빌드할 수 있다. 이미지는 붕어빵 기계같은 것이다. 해당 앱을 위해 필요한 여러가지 프로그램과 그에 맞는 버전들이 세팅되어 있는 이미지를 통해, 붕어빵, 즉 인스턴스를 무한정으로 생성할 수 있다. C++이든 파이썬이든 다양한 언어와 프레임워크를 사용한 서비스들은 각자 다른 배포 방법, OS를 필요로 할 수 있지만 도커를 통해 패키징하고 컨테이너로 관리하면, 어떤 것을 사용하든 관계없이 모두 동일한 배포 프로세스를 가지게 된다는 뜻이다.
여기서 '운영체제가 다른 앱이 어떻게 같은 운영체제를 공유하는지' 궁금할 수 있다. 이를 위해 더 엄밀히 이야기하자면, Docker은 Linux에서만 네이티브로 작동한다. Linux이외의 환경에서 도커를 사용할 때는 도커 자체가 OS에서 지원하는 가상화 환경에서 구동된다.
이때 가상화 기술을 살펴보면 맥은 'xhyve', 윈도우는 'Hyper-v'를 사용해 별도의 Linux 환경을 만든다.

자 이제 쿠버네티스다

쿠버네티스는 앞선 시나리오에서 앱1의 서버 리소스를 줄이고, 앱2의 서버 리소스는 늘리는 '키잡이' 역할에 해당한다. 미리 설정한 세팅에 따라 탄력적으로, 알아서 서버 크기, 메모리 사용량, CPU 사용량 등을 관리한다. 만약 한 개의 앱에 사용자가 갑자기 몰리면, 알아서 해당 앱의 서버 크기를 늘려주고, 사용자가 빠져나가면 서버 크기를 줄여준다(로드밸런싱). 또한 컨테이너 방식으로 운영되기 때문에, 마이크로 단위로 한 개의 앱을 관리할 수도 있게 된다. 앞서 언급한 앱1, 앱2, 앱3이 사실은 각각 로그인 기능, 결제 기능, 검색 기능의 작은 기능들이라고 생각하면 된다. 만약 서비스의 결제 기능에 에러가 난다면 모든 서비스가 중단되는 것이 아니고, 로그인과 검색 기능은 제공되는 서비스로 유지될 수있다. 또 필요에 따라 결제 관련 데이터를 검색 기능이 필요로 할 수 있는데, 각각의 기능들은 gateway를 통해 출입이 관리된다. 이렇게 유지 보수가 정교해지고 가벼워진다(CI/CD).
앱1,앱2가 각각 구 버전의 앱, 신 버전 앱이라고 가정한다면 버전 관리도 수훨해진다. 새로운 버전의 앱을 배포했는데 문제가 생긴다면, 배포를 멈추고 고치는 동안 구버전을 배포하면 된다. 그 외에 권한 배분, 데브옵스 등과 같은 이유로 쿠버네티스는 필요하고 개발자의 미래이다.

정리

경영학과 수업 중 '조직관리'라는 과목이 있다. 인력을 각자의 역할에 맞게 나누고, 한 부서의 일이 많으면 일이 적은 부서의 인원이 해당 일을 도와주게 한다. 직급에 따라 권한을 다르게 하며, 업무의 효율을 위해 빠른 의사결정을 도출하는 것이 중요하다. 이렇게 조직이 잘 돌아가게 하기 위한 '시스템'이 존재한다.
쿠버네티스는 경영학과의 '조직관리'를 IT 서비스에 그대로 옮긴 것이다. 서비스가 최소한의 자원사용으로 최적의 형태로 편리하게 운영될 수 있도록 길잡이 기능을 해주는 플랫폼이다.

profile
삼성전자 C-Lab 21기 Creative Leader SW개발자 (쪼랩)

0개의 댓글