1.1 가상화 개요
가상화 배경
- 가상화는 1960년대에 처음 소개되었지만 2000년대에 주목받기 시작
- 가상화가 주목받기 시작한 이유는 하드웨어 기술의 성장과 보급 증가로 성능이 우수한 하드웨어를 구하기 쉬워졌기 때문
- 이로 인해 시스템의 리소스 활용률은 낮아졌고, 활용하지 않는 자원을 사용하려는 기술들이 개발되어 현재의 가상화가 되었음
가상화 종류
- 현재 대부분의 클라우드 서비스들은 다양한 가상화 기술을 사용
- 서버 가상화
- 네트워크 가상화
- 스토리지 가상화
- 컨테이너 가상화
서버 가상화
- 서버 가상화는 가장 일반적인 기술이며, 서버를 가상의 머신으로 만들어 사용하는 기술
- 하드웨어 기술이 발달하면서 리소스 활용률이 낮아져, 리소스 활용률을 높이고자 CPU나 메모리 등을 논리적으로 나누어 사용하는 기술
- 이를 위해서는 소프트웨어가 필요
네트워크 가상화
- 최근 가장 인기 있는 가상화 분야
- 하드웨어 어플라이언스 형태로 존재했던 L2, L3, L7 스위치와 네트워크 방화벽 그리고 보안 장비들을 모두 가상 머신으로 구현가능하고 하나로 통합된 여러 개의 물리적 환경의 장치들을 다시 가상으로 쪼개어 사용할 수 있음
- 물리적으로 보면 통합된 네트워크이지만 가상으로 네트워크를 나누어 자원으로 사용하고 필요하지 않으면 다시 회수하는 형태로 사용할 수 있음
- 따라서, 네트워크 가상화를 사용하면 네트워크를 더욱 유연하고 빠르게 제공할 수 있음
- 현재 대표적인 네트워크 가상화 기술은 NFV(Network Function Virtualization)와 SDN(Software Defined Nerwork)
스토리지 가상화
- 스토리지 가상화는 디스크 RAID처럼 여러 개의 물리적인 드라이브를 하나의 논리적인 드라이브처럼 사용하는 기술
- 디스크를 효율적으로 사용할 수 있을 뿐만 아니라 확장도 쉬워짐
- 현재 주목받는 스토리지 가상화 기술은 SDS(Software Defined Storage)
- 대표적인 오픈소스 SDS 스토리지는 Ceph 와 Glusterfs 가 있음
컨테이너 가상화
- 컨테이너 가상화는 호스트 운영체제에서 논리적인 구역을 만들어 서로 독립적인 애플리케이션을 실행하는 기술
- 이 논리적인 구역을 컨테이너라 함.
- 컨테이너에 애플리케이션과 필요한 라이브러리를 추가할 수 있음.
- 주로 커널 기능을 사용하며, 이는 서버 가상화보다 리소스를 효율적으로 사용하거나 애플리케이션을 빠르게 배포할 수 있음.
1.2 서버 가상화
서버 가상화 개요
- 서버 가상화는 가장 일반적인 가상화, 가상 머신을 생성할 때 사용하는 기술
- 가상 머신을 생성하려면 CPU나 메모리와 같은 시스템 자원을 나누어 주는 파티셔닝 기술이 필요
- 파티셔닝 기술은 하드웨어 파티셔닝과 소프트웨어 파티셔닝이 있음. (현재 소프트웨어 파티셔닝 기술이 주로 사용되고 있음)
- 소프트웨어 파티셔닝은 소프트웨어를 사용하여 가상 머신에게 시스템 자원을 할당하게 됌. 이때 사용하는 소프트웨어를 하이퍼바이저라고 함
하이퍼바이저
- 하이퍼바이저는 호스트가 소프트웨어 파티셔닝을 할 수 있게 만들어주는 소프트웨어
- 역할은 가상 머신의 리소스 관리뿐만 아니라 서로 독립적인 환경을 사용할 수 있도록 리소스간 접근 방지 기능도 가지고 있음
- 가상 머신도 실제로는 하나의 메모리에 올라가기 때문에 서로 접근이 가능하다고 생각할 수 있지만 보안상 치명적인 문제가 발생할 수 있기에 하이퍼바이저는 이를 방지하는 기능을 가지고 있음.
- 가장 기본적인 기능은 리소스 관리
- 가상 머신이 어느 정도의 가상 리소스를 할당 받을지를 정하고 실제 물리적인 자원을 사용할 수 있도록 도와줌.
- 또한 소프트웨어마다 리소스 사용량을 모니터링 하여 확인할 수 있음.
- 대중적인 하이퍼바이저는 VMware, Xen. 오픈 소스로는 VirtualBox, KVM 이 있음
1.3 리눅스 컨테이너
리눅스 컨테이너 개요
- 리눅스 컨테이너는 컨테이너 가상화 기술을 사용
- 리눅스 컨테이너에는 애플리케이션이나 이에 필요한 라이브러리 및 설정파일 등이 포함
- 리눅스 컨테이너를 설명할 때 빠지지 않는 것이 가상머신과의 비교
- 리눅스 컨테이너는 가상 머신과 다르게 가상화 계층이 없고 커널이 별도로 존재하지 않기 때문에 가상 머신에 비해 가볍고 실행 속도 또한 빠름
- 리눅스 컨테이너는 오래전부터 사용되었지만 극히 일부 기업에서만 사용되었고, 도커가 개발된 이후부터 활발하게 사용되고 있다.
- 도커는 리눅스 컨테이너를 다루는 도구이며, 요즘은 컨테이너 런타임이라고 한다.
사용하는 기술
- 리눅스 컨테이너를 사용할 때 가장 핵심 기술 두 가지는 cgroup과 namespace
cgroup (Control Group)
- 프로세스 또는 쓰레드를 그룹화 하여 관리하는 기능과 시스템 리소스(CPU, 메모리, 디스크 입출력 등)의 사용을 제한하는 기술
- 리눅스 컨테이너는 호스트의 리소스를 공유하여 사용할 수 있음. 이때 cgroup을 사용하여 컨테이너가 사용하는 리소스의 양을 제한할 수 있음
- 또한 같은 호스트에서 동작하는 서로 다른 컨테이너에 영향을 주지 않도록 막아주는 역할도 하고 있음
namespace (이름공간)
- namespace에 다수의 오브젝트를 격리할 수 있음
- 예를 들어 동일한 호스트에서 동일한 PID를 가질 수 없지만 서로 다른 namespace에서는 동일한 PID를 가질 수 있음
namespace의 종류
이름 | 설명 |
---|---|
PID namespace | namespace에서 독립적인 PID 사용 |
Network namespace | namespace에서 독립적인 네트워크 기능사용 |
UID namespace | namespace에서 독립적인 UID 사용 |
Mount namespace | namespace에서 독립적인 Mount Point 사용 |
UTS namespace | namespace에서 독립적인 호스트네임 사용 |
IPC namespace | namespace에서 독립적인 IPC 사용 |
'도커 > 개념 및 실습' 카테고리의 다른 글
1, 2, 3장 연습문제 (0) | 2021.06.02 |
---|---|
03장-3, 컨테이너 관리 (0) | 2021.06.02 |
03장-2, 컨테이너 실행 (0) | 2021.06.01 |
03장-1, docker 명령 - 이미지 다운로드 (0) | 2021.05.31 |
02장, 도커 개요, 설치 (0) | 2021.05.31 |