[Site Map]  [가상화, 클라우드 목차]

 

연관토픽

  1. [상위] 운영체제 수준 가상화(OS level virtualization)
  2. [연관] 쿠버네티스(Kubernetes)

 

개념 : PaaS의 핵심기술

  • 하나의 호스트 운영체제 위에 여러 개의 격리된 시스템 환경을 구축할 수 있는 운영체제 수준의 가상화 기술[각주:1]
  • 운영체제를 가상화하여 만들어진 가상화된 운영체제에 어플리케이션을 올려 운영하는 가상화 방식 (프로세스 격리)
  • 게스트 운영체제가 설치되지 않고, 프로세스 레벨의 분리가 가능한 컨테이너를 사용하는 가상화 방식은 성능 측면에서 게스트 운영체제로 인한 성능 저하가 발생하지 않기 때문에 경량화 가상화로 분류됨
  • 컨테이너는 가상머신과 달리 운영체제를 제외하고 애플리케이션 실행에 필요한 모든 파일을 패키징(packaging)한다는 점에서 'OS레벨 가상화[각주:2]'라고도 함
  • 애플리케이션 실행 환경 및 필요한 라이브러리 등을 하나의 패키지로 묶어 배포할 수 있도록 하는 소프트웨어 도구

 

 

 

등장배경

  • 처음등작은 2000년대 중반부터 리눅스에 내장된 LXC(LinuX Container) 기술로 소개됨
  • 등장계기는 개발한 프로그램이 구동환경의 달라짐에 따라 예상하지 못한 각종 오류를 발생시키는 것을 해결하기 위함
  • 오류가 발생하는 이유는 구동환경마다 네트워크, 스토리지, 보안 등의 정책이 각각 다르기 때문이며, 결국 SW를 하나의 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 이동하더라도 안정적으로 실행하는 방법을 모색하여 나온 방법

 

 

 

컨테이너의 특징

구분 설명
경량화 - 운영체제를 제외하고 애플리케이션 실행에 필요한 모든 파일을 패키징
- 가볍기때문에파생되는속도,이식성등의향상효과
적은 시스템
요구사항
컨테이너 크기가 작아 수십 MB에 불과
- OS가포함되지않아부팅필요없기때문에서비스시작시간짧음
자원 배분 용이 - 컨테이너에서 실행중인 서비스에 더 많은 가용성이 필요하거나 반대로 필요 없을 때, CPU에 대한 사용량이나 사용자가 설정한 임계치에 따라 자동으로 확장 또는 축소 가능
구동 방식 간단 - 특정 클라우드 애플리케이션이 실행되기 위한 모든 라이브러리와 바이너리 파일 등이 패키지화되어 있어서, 그저 기존의 시스템에서 실행하면 됨
  • 컨테이너 방식은 기존 가상머신 방식보다 시스템이 경량화되어 더 많은 App을 하나의 물리적 서버에서 구동 가능

 

 

 

컨테이너 기반 가상화 구조

  • 애플리케이션의 실행에 필요한 라이브러리(Library, Libs)[각주:3], 바이너리(Binary, Bins)[각주:4], 기타 구성파일 등을 패키지로 묶어서 배포하면, 구동환경이 바뀌어도 실행에 필요한 파일이 함께 따라다니기 때문에 오류를 최소화 

 

 

컨테이너 기술 아키텍처

 

컨테이너 기반 가상화의 구성요소

구성요소 설명 요소기술
Linux Kernel LXC 구동을 위한 Core OS LXC지원, Linux Kernel 
version/build
Cgroups 시스템 자원의 세밀한 할당 및 제어 자원제어, 우선순의,
계정연동 등
Namespaces 컨테이너별 고립된 View 제공 PID, Mount, Network, 
IPC, User 등
Container 실행환경 및 자원, 지원 Lib 패키징 Runtime 환경, Library 
통합 패키지
SELinux 컨테이너간 상호 간섭을 격리하기 위한 역할기반의 접근 제어 보안 기술 MAC/RBAC, 표준 리눅
스 보안(DAC)
LXC 단일 리눅스 호스트에 다중의 독립된 리눅스 컨테이들을 운영하기 위해 운영-시스템-레벨 가상화 기술 OS레벨 가상화, 
Cgroups, Namespaces

 

 

 

다중 컨테이너 관리를 위한 컨테이너 오케스트레이션(Orchestration) 기능

구분 설명
서비스 디스커버리
(Service Discovery)
- 서비스 탐색 기능으로 기본적으로는 클라우드 환경에서 컨테이너의 생성과 배치 이동여부를 알 수 없기에 IP, Port 정보 업데이트 및 관 리를 통해 서비스를 지원함
스케일링(Scaling) - 로드 밸런싱(Load balancing) : 생성된 컨테이너의 컴퓨팅자원 사용량의 설정 및 자동배분
- 스케줄링(Scheduling) : 늘어난 컨테이너를 적합한 서버에 나누어 배포하고, 서버가 다운될 경우 실행 중이던 컨테이너를 다른 서버에서 구동시킴
클러스터링(Clustering) - 여러 개의 서버를 묶어 하나의 서버처럼 사용할 수 있도록 지원하거나, 가상네트워크를 이용하여 산재된 서버를 연결시켜줌
로깅/모니터링
(Logging/Monitoring)
여러개의서버를동시에관리할경우한곳에서서버상태를모니 터링 하고 로그 관리를 할 수 있도록 함

 

 

 

가상머신 방식과 컨테이너 기반 가상화 방식의 차이

  • 하이퍼바이저와 게스트 OS를 포함하는 가상머신 방식은 상당한 오버헤드가 존재함
 구분 기존 방식의 가상머신(VM)  컨테이너 기반의 가상화 
이식성 
  • VM당 모놀리딕(Monolithic)한 서비스
  • VM 단위의 이동, 복제와 생성 가능 
  • 실행에 필요한 모든 종속성 및 구성을 함께 배포(실행환경의 일관성)
  • 마이크로(Micro) 서비스 구축에 최적 
효율성 
  • 1VM당 1서비스
  • 성능 오버헤드 존재 
  • 호스트 OS커널 공유이므로 필요한 만큼 자원사용 
서비스 요청에 따른
신속성 
  • 최소 수 GB 이상의 추가 VM을 생성하여 대응 
  • 게스트 OS가 없는 수 MB 단위 컨테이너 생성 
라이센스 비용 
  • VM 개수만큼 지불 
  • Host 1대의 비용만 지불
 안정성
  • 각각 독립된 VM들로 안정적인 운영 가능(완전한 분리) 
  • 통제된 영역이지만, OS커널을 공유하므로, 장애발생시 같이 영향 받음 

 

 

 

컨테이너와 가상머신의 차이

 

 

 

Traditional Deployment vs. Virtualized Deployment vs. Container Deployment

 

 

 

Reference


  1. 흔들리는 도커(Docker)의 위상 : OCI와 CRI 중심으로 재편되는 컨텐이너 생태계

 

 

 

 

 

  1. 컨테이너 기술은 2000년부터 'FreeBSD Jail', 'Unix FreeBSD', '리눅스LXC'의 하위 시스템 분할의 아이디어로 시작되었다 [본문으로]
  2. OS레벨 가상화 : 운영체제 수준의 가상화, 운영체제의 커널이 여러 개의 격리된 사용자 공간 인스턴스를 갖출 수 있도록 하는 가상화 방식 [본문으로]
  3. 라이브러리(Library, Libs) : 프로그램 구동 시에 필요하거나 공통으로 사용할 수 있는 특정 기능의 서브프로그램 또는 소스코드 집합. 라이브러리에는 주로 함수(서브루틴), 클래스에 대한 정의, 구성데이터 등 미리 작성된 코드 포함 가능 [본문으로]
  4. 바이너리(Binary, Bins) : 컴퓨터 저장과 처리 목적을 위해 2진수 형식으로 인코딩된 데이터 파일을 의미하며, 코드의 컴파일(Compile) 또는 압축된 결과물 [본문으로]

+ Recent posts