본문
VM과 컨테이너 가상화기술 비교
■ VM vs Container
1. VM 가상화기술
a) 장점
- 보안적 측면: VM은 Geust OS가 뚫려도 다른 Geust OS나 Host OS와는 완벽히 분리가 되어있기때문에 각OS간 피해를 입지 않는다.
- Geust OS를 설치하여 다양한 OS를 한 서버에서 사용할 수 있다.
b) 단점
- 효율성 저하: VM가상화를 위해 무거운 OS를 띄워야하는 이슈
2. 컨테이너 가상화기술(도커)
a) 장점
- 하나의 OS를 공유하는 구조: 서비스간 자원을 격리하는데 OS를 별도로 띄울 필요가 없다.
- 이에 VM에 비해 OS 기동시간이없어 자동화시 빠르고, 자원 효율도 매우 높다.
- OS에서 제공하는 자원격리기술을 이용하여 컨테이너 단위로 서비스를 분리할 수 있도록 만듦.
→ 개발환경 및 의존성 호환에 대한 걱정없이 서비스 배포가 가능하다.
P.S. Linux 격리기술
- namespace:커널에 관련된 영역 분리
- cgroups :자원에 관련된 영역 분리
→ 도커는 namespace, cgroups를 기반으로 여러 컨테이너들의 호스트자원을 분리(격리)한다.
하나의 서비스를 만들때, 하나의 언어(java)를 이용하여 여러 모듈들이 서비스로 돌아간다.
만약 A와 B모듈은 괜찮지만 C모듈에 부하가 많이 발생하는 상황이라면 VM을 생성하여 서비스를 하나 더 띄우게 된다,
자원사용과 성능 입장에서 Geust OS가 2개가 올라가고 A,B 모듈은 사실상 확장할 필요는 없는데 하나의 패키지이기에 그대로 따라 올라간다.
반면 컨테이너 환경에서는 서비스 설계시
1. 모듈 기능별로 컨테이너를 구분하고
2. 각 모듈에 최적화된 언어를 사용하여 서비스의 성능을 최적화한다.
3. 또한 추후에 k8s를 이용하여 필요한 pod만을 확장하여 불필요한 자원낭비를 방지할 수 있다.
이렇게 컨테이너는 시스템을 모듈별로 쪼개서 개발하고 k8s로 관리할 경우, 큰 효과를 발휘할 수 있다.
* k8s는 여러 컨테이너를 하나의 pod로 묶을 수 있고, 한 컨테이너를 하나의 pod로도 담을 수 있다(pod == 배포단위).
b) 단점
- 다수개의 OS 사용 불가. (리눅스OS에서 Windows용 컨테이너를 사용할 수 없음)
- 보안적 측면: 한 컨테이너가 뚫려서 OS영역에 접근하게되면 다른 컨테이너들도 위험해질 수 있다.
(하지만 점점 컨테이너 기술이 업그레이드되고 보완되고 있는 추세)
댓글