[쿠버네티스] 쿠버네티스를 왜 쓸까? + VM, 컨테이너
쿠버네티스를 알기 전에 쿠버네티스가 왜 등장했는지? 또, 가상머신과 컨테이너에 대해 알아야 할 것 같아 다음 내용을 조사해 보았습니다.
가상 머신(Virtual Machine)이란?
- 실재하는 컴퓨터 상에 소프트웨어로 논리적으로 만들어낸 컴퓨터
- 하나의 물리 자원(컴퓨터) 위에 하나의 환경(OS)만 있는 것을 효율화하고자 가상화층을 만들고 그 위에 OS를 새로 설치하는 기법
VM을 왜 사용할까?
- 실제로 있는 컴퓨터 시스템을 여러 명의 사용자가동시에 사용할 수 있게 하기 위해서(효율성 증가)
- 하나의 컴퓨터를 여러 명의 사용자가 동시에 사용할 수 있도록 여러 대의 작은 컴퓨터로 분할 사용하거나, 운영체계나 하드웨어 등의 구성을 달리하여 운영하고자 할 때 주로 사용된다.
물리 서버에 여러 개의 가상 서버를 만들기 위해서는 어떤 과정이 필요할까?
- 가상 서버를 만들어달라는 요청을 하이퍼바이저라는 소프트웨어에 전달.
- 요청을 받은 하이퍼바이저는 새로운 가상 서버를 생성하고 물리 서버가 가진 컴퓨팅 리소스를 각 가상 서버에 할당
- 컴퓨팅 리소스에는 CPU, 메모리, 스토리지, 네트워크 등이 포함
- 리소스 할당 후 각 서버에 필요한 운영체제(OS) 설치
VM의 장점
- 격리된 환경을 제공하므로 VM 내에서 어떤 대상이 실행되든 다른 시스템을 방해하지 않는다.
- 독립적인 OS를 갖기 때문에 단일 서버에서 WIndows, MAC, Linux 등 다양한 OS를 사용할 수 있다.
- 유지/관리 및 자원 활용률 측면에서도 장점을 갖는다.
VM의 단점
- VM이 많을수록 전통적인 방식 대비 성능의 안정성이 떨어지고 실행 속도가 느려진다.
- 모든 VM이 각각의 OS를 갖고 있는 것이 부담이 된다. (Windows OS 용량은 약 5GB)
다음과 같이 한 Hypervisor에 3개의 운영시스템을 가진 VM이 바로 가상머신입니다.
VM에 가장 적당한 하드웨어를 할당함으로써 자원을 효율적으로 사용할 수 있다는 장점을 가질 수 있습니다.
이 때, 만약 서버에 과부하가 와서 오류가 난다면??? 서비스를 사용할 수 없게 됩니다.
이를 막기 위해선 다음 이미지와 같이 VM을 늘리는 수밖에 없습니다. 즉 Scale-Out을 하게 됩니다. (Scale-up 보다는 Scale-out을 선호하기에)
그런데 생각해보면... 똑같은 app을 동작시키는데 위의 사진처럼 구성하게 되면 3개의 운영체제를 깔아야 합니다.
다음과 같이 요즘 ubuntu 운영체제는 5.8GB에 달하는 용량을 차지하기에 자원을 낭비하는 느낌을 받을 수 있습니다.
반면 컨테이너는 이 단점을 해결할 수 있습니다.
컨테이너란?
VM에서는 App을 동작시키기 위해서 OS가 있어야 했지만 컨테이너에서는 OS를 필요로 하지 않습니다. 즉 컨테이너가 확장성이 더 빠르고 배포가 빠릅니다.
단순히 생각해봐도 OS를 가진 VM을 늘리는 시간과 서비스만을 가지고 있는 컨테이너를 늘리는 시간을 비교해보면 컨테이너 Scale-out하는 시간이 더 빠를거라고 쉽게 예상할 수 있습니다.
위와 같은 이미지에서 한 서비스가 장애가 나게 되어도 즉 node1이 정상적인 기능을 하지 못해도 node2에서 제 기능을 하기에 정상적으로 운영할 수 있습니다.
하지만
서버가 한 두개일 때, 각 서버에 WebServer, Python, Node 등 App을 관리하는 것은 괜찮다 쳐도 그 서버가 수 십개, 수 백개가 된다면? 이를 개발자들이 일일히 개발할 수 있을까요?
그래서 등장한게 컨테이너 오케스트레이션입니다.
컨테이너 오케스트레이션은 말 그대로 컨테이너들을 지휘하는 메인 컨트롤러가 있고 그 지휘에 맞춰 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 것을 말합니다.
어플리케이션을 어떻게 배치했을 때 최적의 서비스를 완성할 수 있는지, node가 다운된 것을 파악하고 다른 node로 옮겨주는 것이 control plane입니다. (왼쪽에 있는)
이 컨테이너 오케스트레이션에서 강한 경쟁률을 띄고 있는게 바로 쿠버네티스입니다.
kubernetes : 그리스어로 조타수라는 뜻
k8s : k와 s 사이에 8글자가 있다는 의미
쿠버네티스 특징
- 워크로드 분리
- 어디서나 실행가능 - 온프레미스, 퍼블릭 클라우드(AKS, EKS, GKE 등)
- 선언적 API
- ex) 쿠버네티스야 나 웹서버 3개 실행해줘! 라는 선언만 해주면 control plane에서 알아서 해준다.
이러한 이유들 때문에 쿠버네티스가 등장하게 되었고, 쿠버네티스를 실질적으로 사용하는 것은 다음 블로그 글에서 진행하겠습니다.