우노
[Kubernetes] VM 과 Container 의 차이 본문
들어가기 앞서,
- 해당 포스트는 인프런의 ‘대세는 쿠버네티스 [초급~중급]’ 강의를 기반으로 작성되었으며,
- [기초편] 기초 다지기 - ‘VM vs Container’ 에 해당하는 내용입니다.
구조적인 측면에서, VM 과 Container 의 차이
하단의 좌측 그림은 VM Server 를 의미하고, 우측 그림은 Container Server 를 의미합니다.
- VM Server
- 우선, VM Server 와 Container 서버는, 공통적으로 Host OS 가 올라갑니다.
- 이후, VM Server 는, Host OS 위에 VM 을 가상화시키기 위해, 여러 Hypervisor 들을 올립니다.
- 마지막으로, 원하는 Guest OS 기반의 VM 을 생성하게 됩니다.
- 이 때, Guest OS 는 Host OS 와 독립적인 OS 입니다.
- Container Server
- 우선, VM Server 와 Container 서버는, 공통적으로 Host OS 가 올라갑니다.
- 이후, Container Server 는, Host OS 위에 Container 를 가상화시키기 위해, 여러 소프트웨어들을 올립니다.
- 현재 가장 많이 사용되는 소프트웨어는 Docker 입니다.
- VM Server
Container 란?
예를 들어, Linux 6 버전의 개발 환경과 Linux 7 버전의 개발 환경이 있다고 가정해봅시다.
- 이러한 개발 환경은, 해당 버전에 따라서, 기본적으로 설치되는 Library 들이 달라지게 됩니다.
- 만약, Linux 6 버전에서 개발을 진행한다면, Linux 6 에 설치되어있는, 1.6 버전의 OpenJDK Library 들을 사용하게 됩니다.
- 그렇다면, Linux 6 버전에서 개발된 서비스가 Linux 7 버전에서는 잘 작동할까요?
- 아뇨, 분명 버전에 따른 문제가 발생할 것입니다.
따라서, 우리는 Docker 를 사용해, 한 서비스와 서비스가 돌아가는데 필요한 Library 들을 전부 포함해, Container Image 라는 형식으로 사용할 수 있으므로,
Server 가 Linux 7 버전일지라도, Linux 6 버전의 Container 환경 안에서 개발이 가능하게 됩니다.
따라서, Container 를 사용한다면, Linux 7 환경에서도 Service 별 개발 환경에 대한 걱정 없이 배포가 가능하게 됩니다.
- 또한, Docker 는 여러 Container 들간에, Host 자원을 분리해서 사용할 수 있도록 해줍니다.
- 이때 사용되는 Linux 고율 기술이 namespace 와 cgroups 입니다.
- namespace 는 커널과 관련된 영역을 Host 로부터 분리해주고
- cgroups 는 자원과 관련된 영역을 Host 로부터 분리해주는 역할을 합니다.
구조적인 측면에서, VM 과 Container 의 차이 요약
- VM
- 각각의 Guest OS 를 띄우는 개념입니다.
- 장점
- Host OS 가 Window 여도, Guest OS 로 Linux 를 사용할 수 있습니다.
- 보안적으로, Guest OS 가 뚫렸을 경우, 다른 Guest OS 와 Host OS 가 완벽하게 분리되어 있기 때문에, 각각의 VM 에 피해가 가지 않습니다.
- 단점
- VM 마다 무거운 Guest OS 를 띄우기 때문에, Container 에 비해 속도가 느립니다.
- Container
- 하나의 Host OS 를 공유하는 개념입니다.
- 장점
- Host OS 를 공유하기 때문에, Container 별로 무거운 OS 를 띄우지 않아, Container 의 속도가 훨씬 빠릅니다.
- 단점
- Host OS 가 Window 라면, Guest OS 로 Linux 를 사용할 수 없습니다.
- 보안적으로, Container 가 뚫렸을 경우, 다른 Container 와 Host OS 가 위험해질 수 있습니다.
서비스 개발 측면에서, VM 과 Container 의 차이
예를 들어, VM Server 에 하나의 Service 가 구동중이며, 해당 서비스는 한 가지 언어로 개발되고, Module A, B, C 로 구성되어 있다고 가정해봅시다.
하지만 만약, Module C 에 부하가 생긴다면, VM Server 는 VM 을 하나 더 생성하게 됩니다.
- 이때, Module A, B 는 사실상 확장할 필요가 없음에도 불구하고, 한 패키지이기 때문에, 같이 생성하게 되며
- Guest OS 가 1개 더 올라가게 되므로, 비용 측면에서 비효율적이게 됩니다.
반면에, Container 를 사용한다면, 하나의 서비스를 생성할 때, Module 별로 쪼개서 생성할 수 있게 되며, 각각의 Module 별로 최적화 되어 있는 언어를 사용할 수 있게 됩니다.
이때, Kubernetes 를 사용한다면, 여러 Container 들을 pod 라는 개념으로 묶을 수 있게 되고, 확장이 필요한 pod 만 확장할 수 있게 됩니다.
- 따라서, Kubernetes 는 서비스를 모듈별로 쪼개서 개발할 때, 큰 효과를 발휘할 수 있습니다.
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] MacOS Kubernetes 및 Dashboard 설치 (0) | 2022.02.20 |
---|---|
[Kubernetes] 간단한 일반 서버, 도커, 쿠버네티스 비교 실습 (0) | 2022.02.16 |
[Kubernetes] 쿠버네티스를 사용해야하는 이유 (0) | 2022.02.16 |
[Kubernetes] CKA (Certified Kubernetes Administrator) 자격증이란? (5) | 2022.02.14 |
[Kubernetes] 쿠버네티스 기본 개념 (8) | 2020.09.18 |
Comments