컨테이너 기술 (VM, Docker, Kubernetes)

y_cat·2023년 1월 11일
0

Devops

목록 보기
1/3

컨테이너 기술의 발전

전통적인 배포 방식

Hardware, 즉 컴퓨터 위에 OS(Linux, Windows)가 설치되어 Application 구동에 필요한 Library나 Framework 등을 OS 위에 설치하여 Application을 배포하고 운영하는 방식.

하지만, 다양한 서비스들을 운용해야하는 필요성이 점차 늘어나게 되고 비용과 컴퓨팅 자원 등을 효율적으로 최대한 잘 쓸 수 있는지(Utilization) 고민거리가 생기게 된다.


만약 전통적인 배포 방식에서 3개의 App을 띄우고 각 Library들의 버전들을 틀리게 줄 수 있도록 설계한다고 가정한다면, 하나의 OS 위에 각 Library들이 고정된 버전으로 공유하여 올리기 때문에 충돌이 일어날 수 있다. (물론 이런 문제를 우회할 수 있는 방법들이 존재한다.)

이러한 문제를 해결하기 위해 하나의 서버에서 App1, App2, App3를 각각 격리된 환경으로 운영할 수 있도록 가상화 기술이 나오게 되었다.



가상화 배포 방식

Host OS 위에서 가상 머신(Virtual Machine)들을 관리하게 되는 Hypervisor라는 컴포넌트가 추가된다. 각각의 가상 머신들에서 CPU, RAM, 저장 디스크 등의 컴퓨팅 자원들을 에뮬레이팅하여
Guest OS를 구동한다.

Guest OS 내에서 Library와 Framework를 독립된 의존성을 가지고 되고, 다른 가상머신과는 격리된 환경을 제공해준다. (1VM -> 1APP)

하지만 가상 머신을 이용한 배포 방식에도 몇가지 단점이 존재한다. 하드웨어 자원들을 에뮬레이팅을 하게 되니 성능의 효율성이 Host OS에 비해 떨어지고 컴퓨팅 자원들의 사이즈가 꽤나 크다보니 자원의 오버헤드가 많이 발생하게 된다. 이러한 문제들을 풀기 위해서 가상화 기술을 경량화 시킬 수 있을 지 고민이 또 생긴다. 그래서 나온 것이 컨테이너 기술이다.



컨테이너 배포 방식

Host OS 위에 가상머신들을 관리하는 Hypervisor를 대신하여 메이저한 컨테이너 엔진Docker를 구동하게 된다. Docker Engine이 프로세스 + 격리된 기술(Chroot, Namespace, ...)이 부합된 격리 프로세스인 컨테이너라는 것을 관리한다.

컨테이너 기술은 Host OS 위에서 구동을 하게 되다보니까 가상화 배포 방식에 비해 성능 효율성이 크고, 자원 오버헤드가 적다 보니 많은 기업들에서 사용한다.



Kubernetes

쿠버네티스(Kubernetes, k8s)는 메이저한 컨테이너 오케스트레이션 시스템이다. 컨테이너 엔진은 하나의 서버 위에서 컨테이너를 관리하는 소프트웨어이고, 컨테이너 오케스트레이션 시스템은 여러 서버로 구성된 클러스터 위에서 컨테이너를 관리하는 소프트웨어이다.




역사




출처

profile
토이 프로젝트와 기술들 정리하는 블로그

0개의 댓글