1. 컨테이너란? 

운영체제에서 실행되는 프로세스를 격리하여 별도의 실행 환경을 제공해주며, 해당 프로세스는 운영체제상에서 실행되는 유일한 프로세스인 것처럼 작동한다. 즉, 운영체제에서 실행되는 여러 프로세스는 컨테이너라는 개념으로 격리되어 별도의 운영환경을 제공하는 기술이다.

 

컨테이너 환경을 제공하는 기술 

chroot

Docker

LCX

Solaris Containers(Zones)

FreeBSD Jail

WPARS(AIX)

rkt

 

2. 컨테이너 아키텍처

리눅스 시스템에서 컨테이너를 이용하여 격리 구조를 만드는 기법은, 격리를 담당하는 Linux Namespace와 리소스를 제어하는 Control Group(cgroup)을 사용하여 격리된 컨테이너 환경을 제공한다.

 

네임스페이스 종류

마운트 포인트

프로세스

네트워크 - IPC

UTS

사용자

 

제어 그룹은 프로세스 또는 컨테이너가 사용할 수 있는 리소스의 양을 제한 할 수 있다. (CPU, 메모리, 네트워크 대역폭, 디스크 입출력)

 

3. 도커 컨테이너

컨테이너 기술은 오래전부터 존재해왔던 기술이지만 Docker Inc가 만든 도커 플랫폼의 등장으로 컨테이너 플랫폼에 대해 널리 알려지고 쉽게 사용할 수 있게 되었다. 도커는 네임스페이스와 제어 그룹 기술을 사용하여 애플리케이션을 패키징, 배포 실행하는 플랫폼이다.

 

주요 개념 

이미지 : 실행할 애플리케이션과 라이브러리 및 환경을 하나의 패키지로 묶은 것

레지스트리 : 이미지를 저장하고 공유할 수 있는 스토리지

도커 허브 등과 같은 공용 레지스트리와 개인 및 특정 시스템만 사용할 수있는 사설 레지스트리를 직접 구축할 수 있다.

컨테이너 : 이미지를 실행할 컨테이너 

 

도커는 컨테이너를 주류 기술로 만든 최초의 컨테이너 플랫폼으로 , 쿠버네티스에서 기본적으로 애플리케이션을 구동하기 위한 구성요소 중 하나이다.

현재 쿠버네티스는 도커 이외에도 컨테이너 형식 및 컨테이너 런타임에 대한 개방된 표준을 만드는 OCI가 생겨, OCI표준의 컨테이너 대부분을 지원한다. (대표적으로 rkt)

 

컨테이너 vs 가상머신 

가상 머신은 애플리케이션을 동작시키기 위해서 애플리케이션이 사용하는 리소스만 사용하는 것뿐만 아니라 운영체제가 동작하기 위한 리소스가 추가로 필요하다. 그러나 컨테이너는 애플리케이션이 동작하기 위한 리소스만 사용하기 때문에 훨씬 더 빠르고 가볍게 동작한다.

 

도커와 가상머신 비교

 

쿠버네티스란?

쿠버네티스는 '조타수' '파일럿'을 뜻하는 그리스어에서 유래하였으며 K8s라고 부르는데 이는 국제화를 110n으로 표기하는 것과 같이 'ubernete' 글자 개수로 대체한 약어이다. 

 

구글은 전 세계 적으로 수십만 대의 서버를 운영하고 있으며, 소프트웨어와 인프라를 전 세계에 확장될 수 있는 훨씬 진보된 방법을 찾았고 Borg라는 내부 시스템을 개발하여 개발자와 관리자가 수천 개의 애플리케이션과 서비스를 관리하는데 도움을 주었다. 

 

이후 구글의 Borg 시스템은 쿠버네티스란 이름으로 오픈소스를 공개하고, 이를 Linux 재단 산하의 CNCF 재단에 기증하였다. CNCF는 컨테이너 기술 및 주위 기술에 대한 프로젝트를 담당한다.

 

쿠버네티스가 제공하는 기본 기능 요약

컨테이너 플랫폼

마이크로 서비스 플랫폼

이식성 있는 클라우드 플랫폼 

 

즉, 쿠버네티스는 컨테이너 기반의 분산 클러스터 환경을 제공하며 워크로드를 위해 컴퓨팅, 네트워킹 및 스토리지 인프라를 오케스트레이션 한다.

리눅스 컨테이너는 컨테이너 가상화 기술을 사용한다. 리눅스 컨테이너에는 애플리케이션이나 이에 필요한 라이브러리 및 설정 파일 등이 포함되어있다. 리눅스 컨테이너를 설명할 때 빠지지 않는 것이 바로 가상 머신과의 비교이다.

리눅스 컨테이너는 가상 머신과 다르게 가상화 계층이 없고 커널이 별도로 존재하지않기 때문에 가상 머신에 비해 가볍고 실행 속도 또한 빠르다.

 

리눅스 컨테이너는 오래전부터 사용되었지만 활용도가 낮았지만 도커가 개발된이후 활발하게 사용되고 있다. 도커는 리눅스 컨테이너를 다루는 도구이며, 컨테이너 런타임이라고도 한다.

 

가상머신과 컨테이너간 비교

컨테이너가 기존의 가상머신에서의 오버헤드를 줄이고, 바로 요청 가능하게끔 한다.

 

사용기술

리눅스 컨테이너를 사용할 때 가장 핵심기술 두 가지는 cgroup과 namespace이다.

 

cgroup

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사용

가상화 배경

가상화는 1960년대 처음 소개되었지만 2000년대에 이르러서야 주목받기 시작했다. 가상화가 주목받기 시작한 이유는 하드에어 기술의 성장과 보급증가로 성능이 우수한 하드웨어를 구하기 쉬워졌기 때문이다.

이로 인해 시스템의 리소스 활용률은 낮아졌고, 활용하지 않은 자원을 사용하려는 기술들이 개발되어 현재의 가상화가 되었다.

 

가상화 종류

서버가상화/네트워크 가상화/ 스토리지 가상화/ 컨테이너 가상화

 

1. 서버 가상화

서버 가상화는 가장 일반적인 가상화 기술이며, 서버를 가상의 머신으로 만들어 사용하는 기술이다. 하드웨어 기술이 발달하면서 리소스 활용률이 낮아져, 리소스 활용률을 높이고자 CPU, 메모리 등을 논리적으로 나누어 사용하는 기술이다.

 

2. 네트워크 가상화

최근 가장 인기있는 가상화 분야는 네트워크 가상화이다. L2,L3,L7 스위치와 네트워크 방화벽 그리고 보안 장비들을 모두 가상머신으로 구현 가능하고 하나로 통합된 여러개의 물리적 환경 장치들을 다시 가상으로 쪼개어 나누어 사용할 수 있다. 즉 네트워크를 더욱 유연하고 빠르게 제공할 수있다.

 

3. 스토리지 가상화

스토리지 가상화는 디스크 RAID 처럼 여러개의 물리적인 드라이브를 하나의 논리적 드라이브처럼 사용하는 기술이다.

이를 이용하여 디스크를 효율적으로 사용할 뿐만아니라 확장도 쉬워진다. 근래에는 SDS(software defined storage) 기술이 주목받고 있습니다.

 

4. 컨테이너 가상화

컨테이너 가상화는 호스트 운영체제에서 논리적인 구역을 만들어 서로 독립적인 애플리케이션을 실행하는 기술이다. 이 논리적인 구역을 컨테이너라 하며, 여기에 애플리케이션과 필요한 라이브러리를 추가할수있다.

+ Recent posts