https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/
쿠버네티스란 무엇인가? 에 대한 질문에 공식문서에서는
쿠버네티스는 컨테이너화 된 워크로드와 서비스를 관리하기 위한 이식할 수 있고 확장 가능한 오픈소스 플랫폼
이라고 나와있네요. 그런데 무슨 말인지 잘 모르겠어요
컨테이너화 된 워크로드란 무엇일까요?
컨테이너란 무엇일까요?
컨테이너가 무엇인지 알아보기 위해서는 가상화란 무엇인지 먼저 알아봐야 할 거 같아요
아무래도 가상화부터 거꾸로 알아가 보는 게 좋겠어요.
가상화 이전의 전통적인 배포 방식은 하나의 물리서버 위에 하나의 운영체제를 올리고 하나의 애플리케이션을 실행하는 방식이었어요. 뭐. 애플리케이션을 2개 3개 올려서 서비스할 수도 있지만 각각 서버들의 환경설정이나 요구사항들이 다를 수 있고 각 애플리케이션마다 간섭이 있을 수 있어서 그런지는 몰라도 각기 다른 솔루션, 애플리케이션을 하나의 서버 위에 올리는 경우는 드물었나 봐요.
이러한 사용형태는 리소스를 충분히 사용할 수 없다는 문제도 있었고 리소스 사용량이 만을 때 서버를 증설하는데도 문제점이 있었어요. 리소스 사용량이 적을 때는 남는 리소스만큼 인프라에 과잉 투자를 하게 된 것이고 반대로 리소스 사용량이 많아서 서버를 증설하기로 했다면 서버의 성능을 올릴 것인지 서버의 개수를 늘려서 L4, L7으로 묶어줄 것인지 여러 가지를 고민해야 했고 그 고민이 끝나도 바로 도입할 수 있는 것도 아니고 서버를 구매하고 설치하고 서비스를 올리는 것도 모두 고려해야 할 문제였어요.
이러한 한계를 극복하고자 나온 기술이 가상화 기술이고 가상화는 크게 전가상화와 반가상화로 나눌 수 있는데 그 건 다음에 알아볼게요. 우리가 알고 싶은 건 컨테이너 즉, 격리 기술이니까요.
하이퍼바이저라는 소프트웨어가 물리 리소스를 풀의 형태로 가상화하고 다시 가상 머신에게 파티셔닝해주면 하나의 물리서버를 여러 가상머신에서 사용할 수 있게돼요. 가상머신은 파일의 형태로 동작하고 다른 서버로 이동도 가능하고 어디서나 동일하게 동작 가능해요. 또 가상머신에 할당된 리소스는 물리서버에 비해서 축소와 추가가 자유로워요.
물리서버를 통으로 하나의 애플리케이션이 사용하는 것에 비해서 가상화는 더욱 유연한 사용이 가능하지만 가상화된 리소스들 위에 다시 운영체제를 설치하고 바이너리/라이브러리를 설치하고 애플리케이션을 올려야 해서 오버헤드가 큰 편이었어요. 이러한 단점을 보완하고자 나온 기술이 컨테이너, 격리 기술이에요.
컨테이너 기술은 cgroup과 네임스페이스 등을 이용해 이미 host의 OS, 바이너리, 라이브러리 등에서 공통되는 부분은 같이 쓰되 호스트와 구분을 지어서 사용하고 필요한 바이너리/라이브러리 혹은 애플리케이션만 이미지의 형태로 만들어서 그 이미지를 가지고 빌드해서 컨테이너화 해서 사용해요. 이렇게 하면 리소스를 가상화해서 그 위에 또다시 운영체제를 올리고 필요한 바이너리/라이브러리 등을 다시 올려서 사용하는 가상화 기술에 비해서 경량화해서 사용할 수 있으니 얼마나 좋겠어요?
아주 가끔 도커가 컨테이너 자체라고 오해하는 사람들이 있는데 컨테이너 기술은 엄청 오래전에 나왔어요. 그동안은 몇 가지 이유로 크게 인기를 끌지 못하다가 도커가 나오면서 사용하기 편해지면서 널리 알려지게 됐어요. 사실 저도 컨테이너를 처음 알게 된 계기가 도커였으니까요. 이러만 컨테이너를 사용할 수 있게 해주는 런타임에는 여러 종류가 있고 대표적으로 도커, CRI-O, RKT 등이 있어요.
그럼 여기까지 해서 컨테이너가 무엇인지 컨테이너화 된 워크로드는 무엇인지 감은 잡았는데 그럼에도 불구하고 왜 쿠버네티스를 써야 하는지는 잘 모르겠는데요 그 건 도커를 사용하다 보면 도커의 한계에 부딪히고 내가 불편한 것들을 해결해줄 다른 기술이나 방법은 없나 찾아보게 될 거예요. 이제 쿠버네티스가 나와요.
도커는 단일 호스트 위에 도커 이미지를 사용해서 컨테이너를 만들고 컨테이너와 호스트 간에 네트워크 설정을 통해서 외부와 통신할 수 있게 되고 이런 방법으로 서비스를 제공할 수 있는데 도커 호스트가 하나로 부족해서 2개 3개 10개 100개로 늘어나게 된다면 그 관리는 어떻게 할 수 있을까요? 그리고 각각 컨테이너끼리의 통신은요? 이에 대한 다른 솔루션들은 많이 나와있어요. 그중 가장 유명한 게 쿠버네티스에요.
그럼 쿠버네티스가 무엇인지는 여기까지만 알아보고 쿠버네티스가 할 수 있는 일이 무엇인지는 더 공부해보도록 할게요. 같이 공부할 사람 있었으면 더 좋겠어요.