Study/CS

컨테이너와 컨테이너 오케스트레이션의 개념

찬 주 2023. 8. 29. 10:09
Cloud Native DevOps with Kubernetes를 참고해서 작성하였습니다. 틀린 내용이 있다면 알려주세요!

컨테이너

발전 과정

소프트웨어를 배포하려면 소프트웨어 의존성(라이브러리, 인터프리터, 서브 패키지, 컴파일러..)이 필요하다. 구성 또한 필요하다. 즉, 설정, 사이트별 세부 정보, 라이선스 키와 같이 원시 소프트웨어를 사용 가능한 서비스로 바꾸는 모든 것이 필요하다.

 

초기에는 코드(퍼핏, 앤서블..)로 소프트웨어를 설치, 실행, 구성, 업데이트하는 구성 관리 시스템을 사용했다. 뿐만 아니라 옴니버스 패키지, 가상머신을 사용하기도 했다. 이러한 방식은 규모가 너무 크고 다루기 힘들며 구축과 유지 보수 시간이 오래 걸린다. 또한, 운영하기 어려우며 다운로드나 배포가 느리고 성능과 리소스 사용이 매우 비효율적이다.

 

옴니버스 패키지: 애플리케이션이 필요한 모든 것을 단일 파일에 밀어넣는 것을 말한다. 옴니버스 패키지는 소프트웨어, 구성, 소프트웨어 컴포넌트, 컴포넌트의 구성, 컴포넌트의 의존성을 포함한다. 예를 들어, 자바 옴니버스 패키지는 자바 런타임 뿐만아니라 애플리케이션의 JAR 파일을 포함한다.

 

컨테이너의 등장

이러한 문제를 해결하기 위해 IT 업계는 해운 산업의 컨테이너에서 영감을 얻었다. 트럭 트레일러에서 짐을 내리고 다시 배에 싣는 과정에서 단순하게 트럭의 짐칸을 떼어내 배에 싣는 방법을 생각한 것이다. 

 

소프트웨어의 컨테이너도 해운 산업의 컨테이너와 같은 의미이다. 컨테이너 형식에는 애플리케이션 실행에 필요한 모든 것이 포함되어 있으며 컨테이너 런타임이 실행할 수 있는 이미지 파일에 저장한다.

 

가상 머신과 컨테이너의 차이점

가상 머신 이미지도 애플리케이션 실행에 필요한 모든 것을 포함하지만 그 외에도 불필요한 많은 것을 포함한다. 가상 머신에는 관련 없는 프로그램, 라이브러리, 애플리케이션이 사용하지 않는 많은 것이 포함되어 있어서 공간 대부분이 낭비된다.

 

또한 가상 머신은 가상 환경에서 작동한다. 가상 머신이 실행하는 CPU는 물리 CPU를 실제와 같이 에물레이션하여 구현한다. 이 때문에 가상화 레이어는 성능에 극적이고 부정적인 영향을 미친다.

 

컨테이너는 일반 바이너리 실행 파일과 마찬가지로 가상화 오버헤드 없이 실제 CPU에서 직접 실행된다. 컨테이너는 필요한 파일만 보유하므로 VM 이미지보다 훨씬 작다. 또한 컨테이너 간에 공유하고 재사용할 수 있는 주소 지정 방식의 파일 시스템 레이어를 사용한다.

예를 들어, 동일한 데비안 리눅스 베이스 이미지에서 파생된 두 개의 컨테이너가 있는 경우 베이스 이미지를 한 번만 다운로드하면 각 컨테이너에서 간단하게 참조할 수 있다.

 

플러그 앤 플레이 애플리케이션

컨테이너는 배포 및 패키징 단위일 뿐만 아니라 재사용 단위, 스케일링 단위, 리소스 할당 단위이다. 개발자는 여러 리눅스 배포판, 여러 라이브러리와 언어 버전 등을 실행하기 위해 소프트웨어 관리하지 않아도 된다. 컨테이너가 의존하는 것은 운영체제 커널뿐이다. 컨테이너 이미지로 애플리케이션을 제공하면 표준 컨테이너 형식을 지원하고 호환 가능한 커널이 있는 모든 플랫폼에서 실행할 수 있다.

재사용: 동일한 컨테이너 이미지는 다양한 서비스의 컴포넌트로 사용될 수 있다.

리소스 할당: 컨테이너는 자신의 특정 요구에 맞는 충분한 자원이 있는 곳이라면 어디서나 실행될 수 있다.

 

 

컨테이너는 밀폐된 상태로 봉인되어 의존성을 전달하며 배포 신호(성공/실패)를 제공하여 데이터 센터나 클라우드의 소프트웨어 배포 기술을 크게 개선했다. 하지만 컨테이너는 더 나은 배포 수단이 될 가능성이 있다. 우리는 컨테이너가 객체지향 소프트웨어 시스템의 객체와 유사해져서 분산 시스템 디자인 패턴을 개발할 수 있을 것으로 기대한다. - [컨테이너 기반 분산 시스템 디자인 패턴, Brendan Burns, David Oppenheimer]

컨테이너 오케스트레이션

운영 팀은 컨테이너로 워크로드를 단순화할 수 있다. 다양한 종류의 시스템, 아키텍처, 운영체제를 관리하는 대신에 컨테이너 오케스트레이터만 실행하면 된다. 

 

컨테이너 오케스트레이터

컨테이너 오케스트레이터는 다양한 머신을 하나의 클러스터로 결합하도록 설계된 소프트웨어의 한 종류다. 일반적으로 스케줄링, 오케스트레이션, 클러스터 관리를 담당하는 단일 서비스를 말한다. 여기서 클러스터는 일종의 통합 컴퓨팅 기판으로 사용자에게는 컨테이너를 실행할 수 있는 매우 강력한 컴퓨터와 같다. 

 

오케스트레이션은 서비스의 공통적인 목표를 위해 서로 다른 역할을 조정하고 나열하는 것을 의미하고. 스케줄링은 사용 가능한 리소스를 관리하고 가장 효율적으로 실행할 수 있는 워크로드를 할당하는 것을 의미한다. 클러스터 관리는 여러 개의 물리 또는 가상 서버를 신뢰할 수 있고 fault-tolerant(장애 허용)를 유지하는 원활한 그룹으로 통합한다.