본문 바로가기
Development/Docker & Kubernetes

컨테이너 기술의 이해

by 메정 2021. 9. 7.

가상화

가상화 : 하드웨어에 종속된 컴퓨터 리소스를 추상화한 것

운영체제에서 제공하사는 가상화

  • process, cpu 스케줄링, virtual memory, paging, swapping 등

서버 가상화

hw 기술이 발전하면서, 서버의 성능이 획기적으로 향상됨

서버가상화의 장점

1.높은 자원 활용률
ex. 용도가 다른 3개의 물리서버가 있을 때 각 30% 용량만 사용한다고 가정하면, 서버 자원을 효율적으로 사용하고 있지 않음
남은 서버들을 활용하여 1개에 60% 사용하고 남은 1개의 30%, 남은 1개는 사용 중지 시켜 냉각 및 유지관리 비용을 절감 시킬 수 있음

2.장애 고립
특정 앱이나 os의 장애가 전체 시스템으로 전파되어 다른 업무에 영향을 미치는 것을 방지할 수 있음

3.보안 강화
개별 사용자가 자신의 vm에만 접근할 수 있어, 전체 시스템에 대한 접근을 원천적으로 차단

4.신속한 자원 제공 및 백업
설정이 완료된 vm에 대해 필요 시 스토리지에서 복사 및 이전하여 신속한 자원 제공 및 백업이 가능함

가상 서버(VM)의 문제점

1.성능 오버헤드
시스템 자원의 할당/사용을 위해 hypervisor를 거쳐야 하므로 bare-metal 방식에 비해 처리에 부가적인 시간이 필요

bard-netal 방식? hypervisor가 hw위 에 바로 존재하는 방식
vm 방식? host os위에 hypervisor가 존재하고 그 위에 guest os가 존재하는 방식

2.자원 낭비
guest os를 실행하기 위한 필요 자원이 필요

3.거대한 이미지 사이즈
guest os를 실행시키기 위한 필수 라이브러리 또는 바이너리 파일, 앱 등이 포함되어 이미지 사이즈가 커짐

4.느린 시작 시간
큰 이미지 사이즈에 의해 vm migration이 느리고, 부팅 시간도 소요됨

-> 이러한 가상 서버(VM)의 문제점을 보완하기 위해 등장한게 Container

컨테이너의 기능

1.운영체제 수준의 가상화
OS 커널에서 제공하는 기능을 활용하여 여러 앱 자원을 고립시키고, 앱간의 커널을 공유
guest os 관리가 필요 없음

2.높은 효율성
guest os를 실행하기 위한 자원 낭비가 없음
1개의 물리서버에서 프로세스 만큼이나 많이 실행 가능함

vm에서도 프로세스 실행이 가능하지만, vm 내에서 guest os에 관한 메모리 할당 외 나머지 공간을 사용해야하는데 이 안에서 db, 웹서버, 앱서버 등을 한 번에 돌리게 되면 1개의 프로그램 비정상 동작 시 다른 프로그램에 영향을 줌.
또한 한 프로그램이 갑자기 메모리 사용량이 증가하면, guest os에 할당된 메모리보다 커지게 될 때 swap이 발생하면서 모든 프로그램의 성능이 급격히 하락하거나 강제로 죽어버리는 현상이 발생
-> 이렇게 각 서비스 구성요소들끼리 문제가 생겼을 때 서로 영향을 미치지 않게 하기 위해 격리가 필요
-> 컨테이너는 격리의 수준이 조금 낮아지지만, 리소스 낭비를 최소화 시켜줌

3.빠른 속도
hypervisor 실행과 관련된 오버헤드를 발생시키지 않으므로 lightweight 함
불필요한 것들은 제거하고, 필요한 것만 냅두어 bare-metal 환경에서 app 실행하는 것과 비슷한 성능으로 실행될 수 있음

4.높은 이식성
앱에 필요한 라이브러리나 의존 파일들이 이미지에 포함되어 환경에 의해 발생되는 문제가 거의 없어짐
호환되는 컨테이너 런타임 환경을 지원하는 os커널 환경에서만 실행 가능
ex. 윈도우 컨테이너를 리눅스에서 실행 불가(호환 x, y? 컨테이너는 os의 기능에 의존하므로)

장점
1.인프라 사용률 향상

  • guest os 실행을 위한 자원 낭비가 거의 없음
  • 일반적인 프로세스 실행과 거의 차이 X
  • 1개의 물리 서버에서 프로세스 만큼 많이 실행 가능

2.빠른 기동 시간

  • 컨테이너의 기동 시간 > 가상서버 or 물리서버의 기동시간 보다 빠름
  • os, 앱, 미들웨어 등 다양한 이미지를 쉽게 얻을 수 있음
  • 설치 작업이나 설정 작업이 줄어듦

3.불변 실행 환경(Immutable Infrastructure)

  • 개발자는 다양한 라이브러리나 오픈소스로 공개되는 프레임워크를 사용하여 개발을 진행함
  • 오픈소스 프로젝트는 빈번하게 버전 업, 버그 수정, 보안 패치 등이 일어나기 때문에 앱 빌드 시마다 다른 라이브러리를 사용하게 될 수도 있음
  • 컨테이너를 이용하면 특정 서버 환경에 대한 종속성을 배제할 수 있음
  • 개발환경과 운영환경의 차이를 줄여 앱 개발 진행을 편리하게 해줌

'Development > Docker & Kubernetes' 카테고리의 다른 글

chap 1. Docker를 왜 사용할까?  (0) 2022.08.18
클라우드와 클라우드 네이티브  (0) 2021.09.07

댓글