오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-02 05:05
관리 메뉴

우노

[Kubernetes] VM 과 Container 의 차이 본문

DevOps/Kubernetes

[Kubernetes] VM 과 Container 의 차이

운호(Noah) 2022. 2. 16. 16:45

들어가기 앞서,

  • 해당 포스트는 인프런의 ‘대세는 쿠버네티스 [초급~중급]’ 강의를 기반으로 작성되었으며,
  • [기초편] 기초 다지기 - ‘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 입니다.

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 는 서비스를 모듈별로 쪼개서 개발할 때, 큰 효과를 발휘할 수 있습니다.
Comments