일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- python
- Spring
- Baekjoon
- Computer Science
- 파이썬
- 회원가입
- 자바
- SECS-II
- c
- C++
- 백준
- CS
- 회귀
- 스포티파이
- SECS
- spring boot
- 프로그래머스
- MYSQL
- modern c++
- Spotify Api
- Spring JPA
- SWEA
- linux
- SW Expert Academy
- java
- SECS/GEM
- spotify
- Gem
- regression
- programmers
Archives
- Today
- Total
비버놀로지
[Kubernetes] VM(Virtual Machine) vs Container 본문
728x90
VM(Virtual Machine)과 Container의 차이와 Container에 대해 조금 더 알아보자.
* docker의 특징
- Linux 6에서 개발된 A라는 서비스를 Linux 7버전에서 띄우게 되면 OnpenJDK 등 버전 차이에 따른 문제가 생기기 마련인데, docker를 설치하고 Container Image를 만들어서 해결할 수 있다.
- Container Image에는 한 서비스와 그 서비스가 돌아가는데 필요한 라이브러리들이 같이 있다. 그래서 Linux 7버전에 다른 라이브러리들이 있더라도 docker를 이용하면 Container Image를 가져와서 사용했을 때 A Service가 자신의 이미지 안에 있는 라이브러리를 사용하기 때문에 안정적으로 시스템을 구동할 수 있다.
- 그리고 docker는 Linux 고유기술인 namespace와 cgroups을 사용해서 격리를 하여, 여러 Container간의 Host 자원을 분리해서 쓰도록 해준다. - namespace :: kernel에 관련된 영역을 분리 (mnt, pid, net, ipc, uts, user) - cgroups :: 자원에 관련된 영역을 분리 (memory, CPU, I/O, network)
- 정리하자면, docker와 같이 container virtualization solution들은 OS에서 제공하는 자원 격리 기술을 사용해서, container라는 단위로 service를 분리할 수 있게 만들어 주고, 이것을 사용하면 container virtualization이 깔려있는 OS에서는 개발환경에 대한 걱정 없이 배포가 가능하게 된다.
1. 시스템 구조에서 오는 차이점
Virtual Machine | Container | ||
Host Server | |||
Host OS (Linux, Mac, Window) | |||
Hypervisor (Xen, KVM, VMware) | Container virtualization software (docker, rkt, LXC) | ||
Guest OS | Guest OS | Container | Container |
A Service | B Service | A Service | B Service |
Java | Node.js | OpenJDK version 1.6 | mongoDB version 3.6 |
Apache Tomcat | mariaDB | C Service | ... |
mongoDB | ... | node.js version 10 | ... |
- 시스템 구조적으로 Container는 한 OS를 공유하는 개념, VM은 각각의 OS를 띄워야하는 구조기 때문에 Container가 훨씬 빠르다.
- VM은 Window를 사용하고 있더라도 새로운 Guest OS를 설치할 때 Linux OS를 설치하여 사용할 수 있다.
- Container는 Linux OS에서 Window용 Container를 사용할 수 없다.
- 보안적으로 VM은 Guest OS가 뚫려도 다른 Guest OS나 Host OS와는 완벽히 분리가 되어있기 때문에 각각의 VM끼리 피해가 가지 않는다.
- Container는 한Container가 뚫려서 OS영역에 접근하게 되면 다른 Container들도 위험해질 수 있다. 하지만 이런 부분들은 계속해서 보완이 될 예정
2. 시스템 개발 사상적인 부분의 차이점
Virtual Machine | Container | ||
Host Server | |||
Host OS (Linux, Mac, Window) | |||
Hypervisor (Xen, KVM, VMware) | Container virtualization software (docker, rkt, LXC) | ||
Guest OS | Guest OS | Pod | Pod |
A Service | B Service | | Container | | | Container | |
Module A | Module A | | Module A | | | Module C | |
Module B | Module B | | Container | | Pod |
Module C | Module C | | Module B | | | ... | |
- 일반적으로 한 서비스를 만들 때 한가지 언어를 사용해서 여러 모듈들이 한 서비스로 같이 돌아간다. 근데 만약 C모듈에 부하가 많이 가는 상황이라면 VM을 하나 더 생성해서 띄우게 되는데, 자원사용과 성능 입장에서 Guest OS를 하나 더 띄우고 Module A와 B는 사실상 확장을 하지 않아도 되는데 한 패키지기 때문에 그대로 따라 올라가면서 낭비가 심해진다는 것을 알 수 있다.
- 반면 Container는 한 서비스를 만들 때 Module별로 쪼개서 각각의 Container에 담는 것을 권하고 있고, Module에 맞는 최적화된 언어를 사용하면 더 좋다.
- 쿠버네티스는 여러 컨테이너들을 한 Pod라는 개념에 묶을 수 있다. 한 Pod는 하나의 배포 단위. 내가 필요한 Pod만 확장 할 수 있는데, 쿠버네티스가 쉽게 해준다.
- 이렇게 Container는 시스템을 Module별로 쪼개서 개발을 했을 때 큰 효과를 발휘할 수 있다.
728x90
'SERVER' 카테고리의 다른 글
[Docker] 서버에 docker 설치하기 (0) | 2021.10.14 |
---|---|
[Kubernetes] Why Kubernetes? (0) | 2021.10.14 |
[Kubernetes] History of Virtualization (0) | 2021.10.14 |
Comments