쿠버네티스란 무엇인가

양성연·2023년 1월 26일
0

안녕하세요.

최근 공부하고 있는 IT 기술인 쿠버네티스에 대해 소개 해드리고자 합니다.

쿠버네티스? 그게 뭔가요? 먹는 건가?

최근 NHN사의 클라우드 교육을 다녀왔었습니다. 클라우드는 이제 많은 사람이 쉽고 편하게 사용하는 기술이지요? 매킨토시를 쓰거나, 윈도우를 쓸 때 icloud, OneDrive등의 기능을 쓰시는 분이 많을테고, 구글에서도 구글 드라이브에 자료를 저장하는 등의 경험이 있으실 것 같습니다. 그런 클라우드 시장에서 주목하는 기술 중 하나가 쿠버네티스 입니다.

쿠버네티스에 대해 처음 들으시는 분들이 계실 것 같습니다. 저도 몇달 전만 하더라도 일전에 한 번도 들어본 적 없는 이름이었습니다. 그래서 일까요? 왠지 신기술 처럼 느껴졌었네요. 하지만 쿠버네티스가 유명해 진 것이 최근이라고 하더라도 따끈따끈한 존재라기엔 나이가 꽤나 있습니다. 무려 8년 전인 2014년에 등장한 존재이지요. 구글과 리눅스 재단이 설립한 CNCF(Cloud Native Computing Foundation)에서 공식으로 쿠버네티스를 오픈소스화 하였습니다. 지금까지 지속적으로 업데이트 되고 있구요. 이미 기술적으로 성숙화 단계에 있다고들 하네요.

쿠버네티스는 ‘가상화’나 ‘컨테이너’ 혹은 ‘도커’와 ‘MSA(마이크로서비스 아키텍쳐)’ 등의 키워드와 아주 밀접한 관계에 있습니다. 그렇기에 클라우드 환경과 아주 어울리는 기술이 되고 많은 이들의 주요한 관심을 끌고 있지요. 현재 클라우드 환경과 마이크로서비스 아키텍쳐가 가지는 장점과 매력은 세간에서 각광받는 키워드 일 것 같습니다. 아마 여러분 중에서도 마이크로서비스 아키텍쳐에 대해 이미 들어보신 분도 있을테고 실제로 활용해보신 분도 계실 것 같습니다. MSA를 채택한 가장 유명한 회사로 넷플릭스가 있습니다.

혹시, 위에 언급된 여러 키워드 중에, 얼핏 들어보았는데 생소하거나 아니면 무슨 이야기를 하려는 지 전혀 감이 오지 않으시는 분 있으실까요? 정말 다행이네요. 이 글은 쿠버네티스를 처음 들어보시는 분들을 위해 약간의 도움을 드리고자 작성되었습니다. 한 번쯤 스쳐 지나가면서 보면 좋겠다 싶은 느낌으로요! (솔직히 쿠버네티스를 접한지 얼마되지 않았기 때문에 아주 깊은 수준의 기술을 설명해드릴 자신이 없네요 😅  )

쿠버네티스에 대해 처음 들어보시는 분들께 제가 알고 있는 한에서 최대한 쉽게, 무엇을 위한 기술인지 설명 드리고자 합니다. 또한 어떤 이유로 쿠버네티스를 공부하고 있는지, 이것으로 뭘하고 있는지, 뭘 하려고 하는지 설명드릴 수 있는 기회가 되었으면 좋겠습니다.

음…, 먹는 건 아니군요.

우선 쿠버네티스라는 말 자체와 친해져볼까요? Kubernetes란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어입니다. IT 기술 용어치고는 꽤나 특이한 의미를 가지고 있네요. 일종의 상징이나 비유 같은 걸까요? 실제로 쿠버네티스 로고 이미지는 배에서 사용할 법한 키로 되어있습니다. 심지어 바다를 떠올리게 하는 푸른색으로 뒤덮혀있지요.

우리는 배 위에서 키를 잡는 사람을 선장이라 부릅니다. 선장은 바다 위를 누비며 자신을 따르는 선원들을 지휘하고 관리합니다. 영화 캐리비안의 해적에서 잭 스패로우가 그랬듯이요. 선장은 간단한 표현으로 배 위의 모든 것을 운영을 하는 사람입니다. 쿠버네티스의 로고가 ‘키’로 만들어진 이유가 바로 이것입니다. 모든 리더가 그러하듯, 키잡이(쿠버네티스)의 핵심적인 요소가 바로 ‘운영’ 혹은 ‘관리’거 든요.

구체적으로 무엇을 운영 혹은 관리 하는 것 일까요? 먼저 잭 스페로우가 뭘 했는지 부터 되새겨 봅시다.

캐리비안의 해적 1편의 메인 소재였던 수많은 금화가 담긴 거대한 (저주 받은) 보물 상자를 기억하시나요? 잭 스패로우를 포함한 당대 해적, 그 중 선장들은 선원들을 부리며 단 하나의 목표에 사로 잡혀 있었습니다. 바로 보물을 찾아 영원한 명성과 부귀영화를 누리는 것 입니다. 보물 상자가 배 위에 올라온 순간 키잡이에게는 하나의 임무가 생깁니다. 육지까지 안전하게 보물을 운송하는 것입니다.

위험의 요소는 참으로 많습니다. 다른 해적들에게서 지켜내는 게 최우선이구요. 또한 내부적으로 보물 상자를 훔쳐 달아나려는 선원도 관리해야 하고요. 또는 이외에 기이한 날씨 같이 기상천외한 현상으로부터 항해를 방해는 요소도 있었지요. 영화를 보면서 느낀 점이지만, 저런 환경에서는 참 살기 힘들었을 것 같아요.

평화의 시대인 오늘날의 키잡이들은 상황이 좀 더 낫습니다. 과거보다 위험의 요소가 더 적다고 할까요? 단적으로 아래 사진처럼 모두가 탐내던 배 위의 귀중한 ‘보물 상자’는 수많은 ‘컨테이너 상자’로 대체 되었습니다. 여전히 바다 위로 선박을 노리는 해적들이 간간히 나타난다지만, 아주 극소수의 해프닝이 되었네요 (허나 무서운 일이지요). 저는 이분들 덕분에 아마존에서 주문한 해외 스타워즈 굿즈가 컨테이너 속에 담겨 안전하게 배송되어 너무나 행복합니다.

IT기술을 설명한다면서 웬 뚱딴지 같은 이야기인가 싶으시겠지요? 너그러운 마음으로 이해를 돕기위한 긴 준비 단계였다고 생각해주세요. 사실은요, IT기술 쿠버네티스도 위의 예시들과 별반 다르지 않습니다.

쿠버네티스는 컨테이너를 관리 운영하는 데 사용합니다. 그래서 컨테이너 오케스트레이션(Container Orchestration) 도구라고도 불리지요. 컴퓨터 세상에도 여러가지 위험요소 같은 것들이 많잖아요? 예를 들어 프로그램 켜놓고 까먹는다 던가, 필요한 파일을 필요할 때 못 찾는다던가 하는 느낌으로요. 컨테이너를 관리하는 데도 비슷한 일이 있는데요 …

잠깐, 제가 아는 그 컨테이너가 맞아요?

아, 컨테이너가 뭔지부터 설명을 드려야 겠네요.

위의 사진 같이 실생활 용품 가득 넣어진 화물 컨테이너를 생각하신다면, 아닙니다. 만약 그런거라면 쿠버네티스는 해운사에서 사용하는 프로그램쯤 되려나요? 😁

IT 세계에서 언급되는 컨테이너는 하나의 ‘운영 체제 커널’에서 다른 프로세스에 영향을 받지 않고 ‘독립적으로 실행되는 프로세스’ 상태를 의미 합니다. 제 표현이긴 하지만 컴퓨터 세상의 화물 컨테이너라고 해도 무관해보여요. 실제로 컨셉을 저기서 많이 따온 것 이구요.

어떤 컨셉인지 화물 컨테이너와의 연관점으로 쉽게 이해해 봅시다. 우리가 사진으로 보듯 화물 컨테이너 외부는 다들 색깔만 다르지 비슷한 모양과 크기로 쌓여져 있습니다. 여러 화물 컨테이너가 같은 선박 위에 놓여있는 상황은 여러 인스턴스들이 ‘하나의 운영 체제 커널 위’에 있는 것과 비슷합니다.

또, 중요한 것은 내부입니다. 화물 컨테이너 겉만 봐서는 내부에 어떤 물건이 놓여있는 지는 전혀 감을 잡을 수가 없습니다. 또 외부의 환경으로부터 대체로 분리되어 있고요. ‘독립적으로 실행되는 프로세스’라는 것이 바로 외부로 부터 지켜지는 ‘내부의 스타워즈 굿즈’와 같은 개념 입니다.

정말 컴퓨터 세계에서 사용하는 화물 컨테이너라고 할 수 있겠죠? 다만, 내부에 좀 컴퓨터 적인 친구들을 담고 있을 뿐이죠. 가령 우분투나 센토스 같은 리눅스 운영체제 이미지 같은 거 말이에요. 컨테이너를 실행(컴퓨터 세상이다보니까 운송하는 대신 실행합니다)하는 외부의 환경이 윈도우 운영체제라도 문제 없습니다. 내부의 물건은 외부로부터 지켜지고 있거든요!

컨테이너 기술은 가상 머신(Virtual Machine)과 많이 비교되곤 합니다. 둘의 공통점은 가상화 기술을 사용한다는 것 입니다. 가상화는 단일한 물리 하드웨어 시스템에서 여러 시뮬레이션 환경이나 전용 리소스를 생성할 수 있는 기술입니다. 구체적인 건 몰라도, 컨테이너 기술은 가상 머신에 비해 무척 가볍게 실행 됩니다. 가상 머신에서는 하이퍼바이저라는 것을 이용해 새로운 운영체제를 실행해야 하는데, 컨테이너는 그럴 필요가 없습니다. 그렇기에 똑같은 우분투 버전을 설치한다고 했을 때 실행 속도 측면에서도 꽤나 비교됩니다.

컨테이너를 활용하는 경우에 대한 예제를 설명 드려볼까요? 저는 학창 시절에 ‘포트란’이라는 프로그래밍 언어를 사용했습니다. 포트란의 컴파일러 중 하나인 gfortran은 리눅스 환경에서는 무료로 쉽게 설치가 가능합니다. 하지만 리눅스에 대해 일도 몰랐던 저는 처음엔 윈도우 환경에서 포트란을 사용하고자 했었죠. 하지만 곧 마음을 바꿔 먹어야 했습니다. 윈도우에서 포트란을 사용하는 방법이 아예 없던 것은 아니지만, 리눅스 환경보다는 설치가 좀 더 어려웠고, 무료버전 컴파일러가 깔끔하지도 않았거든요. 저는 결국 리눅스와 친해지기로 결심하고 우분투를 컴퓨터에 설치했는데요. 은행 업무나 아래한글 프로그램 같은 것을 활용하기에 참 힘든 환경이었기에 꽤나 고생했던 기억이 납니다. 그런데 지금와서 생각해보면 쉽게 해결될 문제였습니다. 윈도우 운영체제 위에서 컨테이너 기술을 활용해 리눅스를 구동시켰다면 말이에요.

또 다른 예시는 데이터베이스 설치입니다. 데이터베이스도 컨테이너 환경으로 쉽게 구동 할 수 있습니다. 사용하지 않을 때는 컨테이너를 내려 마치 컴퓨터에 없는 존재처럼 만들 수도 있지요. 아까 컨테이너 내부는 외부로부터 지켜진다고 하였는데, 실제로 기본적인 설정으로는(네트워크 설정을 따로 해주지 않으면) 외부에서 컨테이너 내부로 통신할 방법이 없습니다. 컨테이너 내부에 독자적인 가상 네트워크만이 설정되기 때문이죠. 그럼 데이터베이스를 사용할 방법이 없게 느껴지시겠지만, 이제 쿠버네티스(혹은 도커)가 이런 부분을 해결해 줄 수 있습니다.

도커? 쿠버네티스랑 같은 거에요?

도커랑 쿠버네티스는 다른 것입니다. 그러나 뗄 수 없는 사이 입니다.

Docker라는 영단어는 사전적으로 항만 노동자라는 의미를 가지고 있습니다. 쿠버네티스와 비슷하게 바다를 연상케 하는 단어지요. 저는 위에서 여러번 컨테이너를 ‘실행’한다 라는 표현을 사용 했습니다. 도커라는 녀석은 이를 가능케 해주는 오픈 소스 프로젝트 입니다. 쿠버네티스를 사용하기 위해서는 도커와 같은 ‘컨테이너 런타임’ 기술을 필요로 합니다.

(정확하게는 도커와 쿠버네티스가 아니라, 컨테이너 런타임과 쿠버네티스는 뗄레야 뗄 수 없는 사이라고 해야겠습니다. 최근 쿠버네티스가 도커를 버리고 다른 컨테이너 런타임과 바람을 피고 있거든요)

로고를 한 번 보고 가시죠. 귀엽게 생긴 고래 배가 수 많은 컨테이너를 실고 물 위에 떠 있습니다. 그림이 암시하는 것처럼 사실 쿠버네티스 없이 도커만 있어도 컨테이너 한두 개를 운영하는 것은 문제가 되지 않습니다.

허나, 도커가 출시된 해는 2013년이고 쿠버네티스보다 1년 정도 빠르게 등장한 기술입니다. 도커가 컨테이너 환경을 이용할 완벽한 기술이라면 쿠버네티스가 등장할 필요가 있었을까요? 쿠버네티스가 뒤늦게 등장했다는 것은 도커만으로 해결할 수 없는 문제가 있지 않을까라는 추론을 가능케 합니다. 네, 도커에는 중대한 문제가 있습니다. 한두 개가 아닌 수많은 컨테이너를 관리하기 힘들다라는 것 입니다.

아마, 이런 생각을 하실 수 있으실 것 같습니다. 컨테이너를 그렇게 많이 구동 시킬 필요가 있나? 데이터베이스든 운영체제든 아무리 많이 필요하다고 해도 손가락으로 셀 수 있을 정도 아닐까? 이 질문에 대한 답이 바로 MSA(마이크로서비스 아키텍쳐)입니다.

(다음에 계속)

profile
In the realm of astronomy once, but now becoming a dream-chasing gopher

0개의 댓글