https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/

 

쿠버네티스란 무엇인가?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하

kubernetes.io

 

쿠버네티스란 무엇인가? 에 대한 질문에 공식문서에서는 

쿠버네티스는 컨테이너화 된 워크로드와 서비스를 관리하기 위한 이식할 수 있고 확장 가능한 오픈소스 플랫폼

이라고 나와있네요. 그런데 무슨 말인지 잘 모르겠어요

 

컨테이너화 된 워크로드란 무엇일까요?

 

컨테이너란 무엇일까요?

 

컨테이너가 무엇인지 알아보기 위해서는 가상화란 무엇인지 먼저 알아봐야 할 거 같아요

아무래도 가상화부터 거꾸로 알아가 보는 게 좋겠어요.

 

Traditional and virtual architecture server comparison.

 

가상화 이전의 전통적인 배포 방식은 하나의 물리서버 위에 하나의 운영체제를 올리고 하나의 애플리케이션을 실행하는 방식이었어요. 뭐. 애플리케이션을 2개 3개 올려서 서비스할 수도 있지만 각각 서버들의 환경설정이나 요구사항들이 다를 수 있고 각 애플리케이션마다 간섭이 있을 수 있어서 그런지는 몰라도 각기 다른 솔루션, 애플리케이션을 하나의 서버 위에 올리는 경우는 드물었나 봐요.

 

전통적 방식에서의 서버 사용률

이러한 사용형태는 리소스를 충분히 사용할 수 없다는 문제도 있었고 리소스 사용량이 만을 때 서버를 증설하는데도 문제점이 있었어요. 리소스 사용량이 적을 때는 남는 리소스만큼 인프라에 과잉 투자를 하게 된 것이고 반대로 리소스 사용량이 많아서 서버를 증설하기로 했다면 서버의 성능을 올릴 것인지 서버의 개수를 늘려서 L4, L7으로 묶어줄 것인지 여러 가지를 고민해야 했고 그 고민이 끝나도 바로 도입할 수 있는 것도 아니고 서버를 구매하고 설치하고 서비스를 올리는 것도 모두 고려해야 할 문제였어요.

 

이러한 한계를 극복하고자 나온 기술이 가상화 기술이고 가상화는 크게 전가상화와 반가상화로 나눌 수 있는데 그 건 다음에 알아볼게요. 우리가 알고 싶은 건 컨테이너 즉, 격리 기술이니까요.

 

하이퍼바이저라는 소프트웨어가 물리 리소스를 풀의 형태로 가상화하고 다시 가상 머신에게 파티셔닝해주면 하나의 물리서버를 여러 가상머신에서 사용할 수 있게돼요. 가상머신은 파일의 형태로 동작하고 다른 서버로 이동도 가능하고 어디서나 동일하게 동작 가능해요. 또 가상머신에 할당된 리소스는 물리서버에 비해서 축소와 추가가 자유로워요.

 

가상화와 켄터이너의 차이점

물리서버를 통으로 하나의 애플리케이션이 사용하는 것에 비해서 가상화는 더욱 유연한 사용이 가능하지만 가상화된 리소스들 위에 다시 운영체제를 설치하고 바이너리/라이브러리를 설치하고 애플리케이션을 올려야 해서 오버헤드가 큰 편이었어요. 이러한 단점을 보완하고자 나온 기술이 컨테이너, 격리 기술이에요.

 

컨테이너 기술은 cgroup과 네임스페이스 등을 이용해 이미 host의 OS, 바이너리, 라이브러리 등에서 공통되는 부분은 같이 쓰되 호스트와 구분을 지어서 사용하고 필요한 바이너리/라이브러리 혹은 애플리케이션만 이미지의 형태로 만들어서 그 이미지를 가지고 빌드해서 컨테이너화 해서 사용해요. 이렇게 하면 리소스를 가상화해서 그 위에 또다시 운영체제를 올리고 필요한 바이너리/라이브러리 등을 다시 올려서 사용하는 가상화 기술에 비해서 경량화해서 사용할 수 있으니 얼마나 좋겠어요?

 

아주 가끔 도커가 컨테이너 자체라고 오해하는 사람들이 있는데 컨테이너 기술은 엄청 오래전에 나왔어요. 그동안은 몇 가지 이유로 크게 인기를 끌지 못하다가 도커가 나오면서 사용하기 편해지면서 널리 알려지게 됐어요. 사실 저도 컨테이너를 처음 알게 된 계기가 도커였으니까요. 이러만 컨테이너를 사용할 수 있게 해주는 런타임에는 여러 종류가 있고 대표적으로 도커, CRI-O, RKT 등이 있어요. 

 

그럼 여기까지 해서 컨테이너가 무엇인지 컨테이너화 된 워크로드는 무엇인지 감은 잡았는데 그럼에도 불구하고 왜 쿠버네티스를 써야 하는지는 잘 모르겠는데요 그 건 도커를 사용하다 보면 도커의 한계에 부딪히고 내가 불편한 것들을 해결해줄 다른 기술이나 방법은 없나 찾아보게 될 거예요. 이제 쿠버네티스가 나와요.

 

Container Orchestration Tools

도커는 단일 호스트 위에 도커 이미지를 사용해서 컨테이너를 만들고 컨테이너와 호스트 간에 네트워크 설정을 통해서 외부와 통신할 수 있게 되고 이런 방법으로 서비스를 제공할 수 있는데 도커 호스트가 하나로 부족해서 2개 3개 10개 100개로 늘어나게 된다면 그 관리는 어떻게 할 수 있을까요? 그리고 각각 컨테이너끼리의 통신은요? 이에 대한 다른 솔루션들은 많이 나와있어요. 그중 가장 유명한 게 쿠버네티스에요. 

 

그럼 쿠버네티스가 무엇인지는 여기까지만 알아보고 쿠버네티스가 할 수 있는 일이 무엇인지는 더 공부해보도록 할게요. 같이 공부할 사람 있었으면 더 좋겠어요.