컨테이너와 쿠버네티스 (Container & Kubernetis)
안녕하세요 퓨처링입니다.
이번시간에는 컨테이너와 쿠버네티스를 알아보도록 하겠습니다.
먼저, 컨테이너에 대한 기초 설명을 보실 분들은 아래 링크를 통해 확인해 보세요.
컨테이너 글 보러가기
VM과 컨테이너의 차이가 뭐지?
VM과 컨테이너, 위 링크의 포스팅을 읽어도 어렵게 느껴지나요? 조금 더 쉽게 이해할 수 있도록 일상에서 접근을 해보도록 하죠.
우리가 배틀그라운드같은 게임을 하기 위해 컴퓨터가 없는 상태에서 시작한다면,
- 용산, 쇼핑몰 등에서 견적을 받거나 서치를 하는 등의 사전 작업을 한다.
- 돈을 모은다 (요즘 컴퓨터 비쌉니다 🥲)
- 컴퓨터를 구입한다.
- 윈도우(OS)를 설치한다. (업데이트 필수)
- 인터넷에 연결한다.
- 윈도우에서 사용할 기본 프로그램들을 다운로드하여 설치한다.
- 배틀그라운드를 설치한다.
이런 과정을 거칠 수 있습니다. 서버를 운영하는 회사라면, 배틀그라운드라는 프로그램(어플리케이션)이 아닐 뿐 동일한 과정을 거쳐야 합니다.
VM(가상머신)은 위의 과정에서 1,2,3번을 생략하고 바로 소프트웨어를 실행할 수 있습니다. 물론, VM 자체가 소프트웨어(어플리케이션)이기 때문에 한번은 1~3번의 과정을 거쳐야 하지만, 한번의 설정으로 여러 개의 가짜 컴퓨터들을 만들어낼 수 있는 것이죠.
개인적인 용도라면 개발이나 테스트 등에 한해 VM을 사용하겠지만, 비즈니스에 쓰이는 도구들은 비용이나 환경에 따라 다양한 OS 및 환경설정을 요구합니다. 어떤 서버는 윈도우를 사용하지만, 어떤 서버는 리눅스를 사용하기도 하고, 또 어떤 서버는 유닉스 시스템이 필요하기도 하지요. 이런 서버 어플리케이션을 구동하기 위해 수많은 컴퓨터를 구입한다면, 비즈니스 관점에서는 여러 대를 구매하고, 관리하고, 그에 따른 비용 등.. 굉장히 비효율적이겠죠. 그래서, VM은 이런 환경들을 비용과 관리 효율적으로 사용하기 위해 하나의 컴퓨터에 여러 환경의 VM을 만들어 어플리케이션을 구동하게 됩니다. 또한, 새로운 환경을 구성하는 시간이 엄청 단축 됩니다. 1~3번을 건너뛰고 자리에 앉아서 클릭 몇 번으로 새 컴퓨터와 운영체제를 설치하니까요. 단, VM은 새로운 운영체제를 생성할 때마다 4~8번의 과정을 거쳐야 합니다. OS를 설치하고, 구성하고, 어플리케이션을 설치하고, 구동해야 하죠.
컨테이너는 OS를 공유합니다. 즉, 1~5번까지가 기본적으로 설정되어 있죠. 사용자는 어플리케이션을 구성하고, 구동하기만 하면 됩니다. VM이 물리적 하드웨어를 쪼개기 한다면, 컨테이너는 OS의 리소스까지 쪼개기 합니다. VM 환경에서 컨테이너를 설치한다면 OS 리소스를 할당 받은 수많은 컨테이너를 생성할 수 있습니다.
그럼 VM이나 컨테이너는 느리지 않아?
상황에 따라 다르기는 하지만, 아마도 가상화 없이 작동하는 어플리케이션이 훨씬 빠를 것입니다.
하지만, 어플리케이션이 필요로 하는 리소스가 컴퓨터의 전체 리소스만큼 필요하지 않다면 VM이나 컨테이너를 통해 컴퓨터를 좀더 효율적으로 사용할 수 있겠죠.
컨테이너는 마이크로서비스와 같은 좀 더 작은 단위의 분할된 작업에 최적화 되어 있습니다.
또한, VM이나 컨테이너 모두 이미지 (구동환경을 통째로 떠 놓은 파일) 를 통해 빠르게 구동할 수 있어 린(Lean)한 작업이 필요한 요즘 세대의 기업에게는 많은 각광을 받고 있죠.
쿠버네티스(Kubernetes, k8s)는 뭐야?
컨테이너를 운용하고 서비하는 기업들은 보통 하나의 컨테이너만을 사용하지 않습니다.
몇 십개 부터 몇 백개, 몇 천개 까지 수많은 마이크로서비스들을 가지고 있죠.
그럼, 이런 컨테이너들을 어떻게 관리할까요? 이들을 모아서 관리해주고, 환경설정과 삭제 배포를 용이하게 할 수 있는 툴이 쿠버네티스 입니다.
쿠베네티스(Kubernetes)는 Google이 참여한 프로젝트중의 하나였습니다. 조종사를 의미하는 그리스어가 유래로, k8s라는 약칭으로 불리기도 합니다. (K와 S 사이에 8개의 단어가 있어서 k8s라고 약어를 만들었다고 합니다.)
그럼 쿠버네티스로 뭘 할 수 있는데?
각각의 컨테이너들은 각자 도생(?)하느라 정신이 없습니다. 즉, 컨테이너 = 공장직원 입니다. 이들의 출퇴근, 업무할당, 근무지 설정 등은 누가 할까요? 공장장 또는 관리자가 그 임무를 맡아서 하겠죠.
쿠버네티스는 이런 컨테이너들을 배포하고, 문제가 있는 컨테이너들을 갈아치우며 (컴퓨터를 교체하는 것이 아니니까 순식간이겠죠.) 업무 과부하를 일으키는 인원(컨테이너)을 적절히 분배할 수 있는 관리자 역할을 하고 있습니다.
이런 쿠버네티스와 같은 컨테이너 관리 시스템을 컨테이너 오케스트레이션 플랫폼이라고 합니다. 비슷한 제품으로는 CentOS로 유명한 레드햇(RedHat) 사의 OpenShift가 있습니다.
그럼, 모두가 컨테이너와 쿠버네티스 환경으로 바뀌고 있겠네?
그렇지는 않습니다. 위에서 말했듯이, 컴퓨터의 리소스를 효율적으로 사용하는데는 좋겠지만, 많은 데이터를 다루는 큰 종합 데이터베이스 등 사이즈가 큰 경우라면
VM이나 클라우드, 또는 온프레미스 (로컬에 컴퓨터 구축) 형태로도 많이 사용하고 있습니다.
또한, 컨테이너의 경우 VM이나 온프레미스 환경과는 다르게 OS(운영체제)를 공유하다보니, OS가 문제가 생기면 포함된 컨테이너 모두가 문제가 발생하게 됩니다.
만약 워크로드가 이중화되어 있다면 다른 컴퓨터에서 이미지를 띄우는 것은 순식간이긴 하지만, 한번에 문제가 크게 발생할 가능성이 있어 백업 플랜을 세워두는 것이 중요하죠.
온프레미스나 VM은 OS 한 개가 망가져도 다른 컴퓨터나 VM에 영향을 주지 않아 독립적으로 운용이 가능하죠.
그래서 컨테이너는 전체 서비스를 잘개 쪼개서 하나의 독립적인 상태로 제공되는 마이크로 서비스에 특화되어 있다고 할 수 있습니다. 이렇게 함으로써 개발도 좀 더 체계적인 개발을 할 수 있다고 합니다.
오늘은 컨테이너와 쿠버네티스에 대해 간략히 알아보았고, 다음 시간에는 CI/CD, 그리고 통합 관리 솔루션을 알아보도록 하겠습니다.
다음에 봐요!
김에디터
B2B IT 제품 커머스 플랫폼 - 퓨처링