물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식이다. PC 한 대에 윈도우를 하나 설치하고, 여러 가지 프로그램을 깔아서 사용하는 방식이라고 생각하면 된다. 가장 오래되고 단순한 방식이다.
하지만 한 대의 컴퓨터에서 모든 것을 처리하려고 하면 어떤 프로그램 동작이 다른 프로그램의 동작을 간섭하거나, 특정 프로그램이 성능을 독점할 경우 또 다른 프로그램의 성능이 떨어지는 단점이 있다. 성능이 떨어지는 정도에 그치지 않고 프로그램의 중단까지도 유발할 수도 있다.
그림에서 보는 가상머신(Virtual Machin)은 말 그대로 가상 컴퓨터이다. 컴퓨터이기 때문에 컴퓨터를 조립할 때 CPU, 메모리 및 SSD를 장착하듯이, 가상머신에도 CPU, 메모리, 저장 장치 등을 개별적으로 할당한다. 하나의 컴퓨터 안에서 두 개의 가상화된 컴퓨터가 동작하기 때문에 두 개의 프로그램이 구동되더라도 서로 간섭을 일으키지 않게 된다. 가상머신 성능을 조절해 CPU와 메모리가 더 필요한 프로그램에는 좀 더 많은 CPU와 메모리를, 다른 프로그램에는 적은 CPU와 메모리를 할당하여 사용할 수 있다. 또한 서버와 같이 다중화와 분산 처리가 중요한 시스템이라면 시스템 자원 상황에 따라 가상머신 개수를 늘리고 줄이는 것도 좀 더 유연하게 처리할 수 있다.
이 방식이 전통적 배포 방식보다는 효율적이지만, 가상머신은 완전한 컴퓨터이고 가상머신에 일일이 운영체제를 설치해야 하기 때문에 무거운 편이다.
가상화 배포와 비교해보면, 하이퍼바이저라는 부분이 Container Runtime으로, Virtual Machine은 Container로 대체되었다. 컨테이너는 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없다. 그림에서 보는 것과 같이 OS는 하나만 사용한다.
하나의 OS 상에서 구동하기에 전통적 배포와 비슷하다고 생각할 수 있겠지만, 여러 프로그램이 각각 실행되면서 ‘이 컴퓨터에서 나만 구동되고 있다’라고 판단할 수 있도록, 실제로 두 프로그램 간에 간섭을 일으킬 수 없는 장벽을 친다.
장벽을 치는 것과 동시에 OS는 하나의 프로그램과 또 다른 프로그램이 사용할 수 있는 CPU, 메모리 등의 자원 또한 독립적으로 사용할 수 있도록 할당하고 관리한다.
컨테이너 중심의 배포는 하나의 운영체제를 사용하기 때문에 가상화 배포보다 더 가볍다. 하지만 컨테이너는 OS를 공유하는 방식이기 때문에, 한 프로그램의 문제가 OS에 문제를 일으킬 경우에는 OS에서 구동 중인 전체 컨테이너의 문제가 될 가능성이 있다.
도커는 ⑴컨테이너를 다루는 도구(컨테이너 런타임) 중 하나이며 이미지를 컨테이너에 띄우고 실행하는 기술이다.
컨테이너를 사용할 때 필요한 도구가 컨테이너 런타임이다. 컨테이너 런타임은 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구이며 종류가 여러 가지이다. 즉 그중 가장 유명한 것이 도커이다.
도커는 한 개의 컨테이너를 관리하는데 최적이라고 할 수 있다.
쿠버네티스는 '컨테이너 오케스트레이션 툴' 이다.
즉 컨테이너화된 애플리케이션의 관리를 자동화할 수 있도록 도와주는 플랫폼이다.
컨테이너 그 수가 많아지게 되면, 관리와 운영에 있어서 어려움이 따른다. 따라서 쿠버네티스는 컨테이너를 노드에 분산해서 배치하고, 문제가 생긴 컨테이너를 교체하거나, 컨테이너가 사용할 비밀번호나 환경 설정을 관리하는 등 컨테이너의 상태 관리 및 컨테이너의 구동 환경까지 관리하는 역할을 한다. 이것을 컨테이너 오케스트레이션이라고 한다.
쿠버네티스는 컨테이너를 다루기 위해 도커 이외에도 다양한 컨테이너 런타임 소프트웨어를 사용할 수 있다.
⑴컨테이너 : 컨테이너는 환경과 상관없이 실행을 위해 필요한 모든 요소를 포함하는 소프트웨어 패키지이다. 컨테이너라는 분리된 공간에 애플리케이션과 운영 환경이 모두 들어있고, 그 덕에 분리된 공간마다 다른 환경을 제공할 수 있다. 애플리케이션을 실행하기 위한 컴퓨팅 작업을 패키징하여 이미지로 만들기 때문에 경량화되어 있다. 또한 운영 환경에 구애받지 않으니 환경을 구축하고 테스트하는데 시간이 오래 걸리지 않고 독립적이다. 또한 고객의 니즈에 맞춰 수정이나 교체도 용이하다. 즉, 소프트웨어를 컨테이너화시키면 인프라와 상관없이 어디서나 동일하게 실행할 수 있다. 따라서 애플리케이션을 포장하고 실행하기에 최적의 방법이라고 할 수 있다.
1) https://www.samsungsds.com/kr/insights/220222_kubernetes1.html
2) https://www.codestates.com/blog/content/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4
3) 애플리케이션 실행 환경의 변화 이미지
https://kubernetes.io/ko/docs/concepts/overview/