사붐이개발일기

[쿠버네티스 .1] 쿠버네티스와 컨테이너, 도커에 대한 기본 개념 본문

Study

[쿠버네티스 .1] 쿠버네티스와 컨테이너, 도커에 대한 기본 개념

sabeom 2023. 8. 17. 10:55

용어 정리

용어
컨테이너 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술
컨테이너 런타임 컨테이너를 다루는 도구
도커 컨테이너를 다루는 도구 중 가장 유명한 것
쿠버네티스 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구
오케스트레이션 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위

컨테이너란, 우리가 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서, 어디서든 쉽게 실행할 수 있도록 해 주는 기술

여러분이 PC에 프로그램을 설치할 때를 떠올려보세요. 특정 경로에 맞춰 설치를 해야 하거나, 내 컴퓨터에 필요한 옵션을 일일이 맞춰주느라 설치 과정에서 힘들었던 경험이 있을 텐데요. 컨테이너는 이러한 환경까지 모두 포함하여 독립적으로 프로그램을 실행할 수 있도록 도와주는 기술입니다. 컨테이너 환경을 묶어서 배포한 컨테이너 이미지라는 프로그램을 내려받아 구동하면 실행되기 때문에, 각종 설정 과정이 줄어 들어서 좀 더 편하게 사용할 수 있어요.

 

컨테이너 런타임이란, 컨테이너를 쉽게 내려 받거나 공유하고 구동할 수 있도록 해주는 도구이다. 종류도 여러가지 있다.

그중 가장 유명한 것이 도커. 도커가 사용하는 컨테이너 규격은 표준화되어 있기 때문에 도커가 아닌 다른 컨테이너 런타임들도 도커로 만든 컨테이너를 사용할 수 있다.

 

쿠버네티스란, 컨테이너 런타임을 통해 컨테이너를 다루는 도구이다. 쿠버네티스가 해주는 일은 여러 서버(노드)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하거나, 컨테이너가 사용할 비밀번호나 환경 설정을 관리하고 주입해 주는 일 등을 한다. 이것을 컨테이너 오케스트레이션이라고 한다.


애플리케이션 배포 환경의 변화

Traditional Deployment(전통적 배포)는 가상화 이전에 쓰이던 방식이다. 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식. 프로그램이 다른 프로그램을 간섭할 수 있기에 성능이 떨어지고 심하면 중단까지 유발한다.

이 방식이 가진 문제점에 대해 한 번 생각해 볼까요? 인터넷 뱅킹을 위해 보안 프로그램을 많이 설치했더니 게임이나 웹 브라우저 성능이 떨어지는 걸 경험, 누구나 한 번쯤 해보셨을 텐데요. 한 대의 컴퓨터에서 모든 것을 처리하려고 하면 어떤 프로그램 동작이 다른 프로그램의 동작을 간섭하거나, 특정 프로그램이 성능을 독점할 경우 또 다른 프로그램의 성능이 떨어지는 단점이 있습니다. 성능이 떨어지는 정도에 그치지 않고 프로그램의 중단까지도 유발할 수도 있죠. 그렇다면 이 문제를 해결하기 위해서는 어떻게 해야 할까요? “인터넷 뱅킹 전용 컴퓨터를 구입해 두 대를 쓰면 되지 않을까? 그럼 게임도 쾌적하게 하고 인터넷 뱅킹은 필요할 때만 할 수 있을 테니!” 이렇게 생각해 볼 수도 있겠지만, 그러기엔 비용이 너무 많이 들겠죠!

 

Virtualized Deployment(가상화 배포)는 가상머신(Virtual Machine)을 기반으로 배포를 하는 방법이다. 중간에 위치한 하이퍼바이저는 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해주는 중간 계층을 의미한다. 그리고 App은 실행하고자 하는 프로그램, Bin/Library는 프로그램이 실행하는데 필요한 환경과 관련된 파일이다.

가상머신에 일일이 운영체제를 설치해야하기 때문에 컨테이너 중심의 배포(Container Deployment)보다는 무거운 편이다.

가상머신은 말 그대로 가상 컴퓨터입니다. 컴퓨터이기 때문에 우리가 컴퓨터를 조립할 때 CPU, 메모리 및 SSD를 장착하듯, 가상머신에도 CPU, 메모리, 저장 장치 등을 개별적으로 할당할 수 있죠. 앞에서 말한 게임 프로그램과 인터넷 뱅킹 보안 프로그램이 간섭을 일으켜 문제가 된다면 두 프로그램을 각각의 가상머신에서 실행시켜보세요. 하나의 컴퓨터 안에서 두 개의 가상화된 컴퓨터가 동작하기 때문에 서로 간섭을 일으키지 않게 됩니다. 가상머신 성능을 조절해 게임 컴퓨터에는 좀 더 많은 CPU와 메모리를, 인터넷 뱅킹용 컴퓨터에는 적은 CPU와 메모리를 할당하여 사용할 수 있겠죠? 또한 서버와 같이 다중화와 분산 처리가 중요한 시스템이라면 시스템 자원 상황에 따라 가상머신 개수를 늘리고 줄이는 것도 좀 더 유연하게 처리할 수 있습니다.

 

Container Deployment(컨테이너 중심의 배포)에서 하이퍼바이저라는 부분은 Container Runtime으로 대체되었고, Virtual Machine이라고 된 부분은 Container로 대체되었다. 컨테이너는 OS를 공유하는 방식이기 때문에, 어떤 프로그램의 문제가 다른 프로그램을 간섭할 수는 없다. 그러나 내 프로그램의 문제가 OS에 문제를 일으킬 경우에는 OS에서 구동 중인 전체 컨테이너의 문제가 될 가능성이 있다.

앞에서 게임과 인터넷 뱅킹 프로그램이 한 컴퓨터에 설치된다면, 서로 간섭을 일으켜 성능 저하나 오류를 발생시킬 수 있다고 말씀드렸죠. 지금부터 이 문제를 컨테이너 중심의 배포 방식에서는 어떻게 해결하는지 알아보기 위해 게임과 인터넷 뱅킹 소프트웨어가 각각 컨테이너로 배포된다고 가정해 보겠습니다.(물론 이럴 일은 없겠지만, 동작 방식의 예시라고 생각해 주세요)

이때 게임과 인터넷 뱅킹은 하나의 OS 상에서 구동됩니다. 이것만 보면 전통적 배포에서 하나의 OS 위에 프로그램을 여러 개 구동시킨 것과 별 차이가 없어 보여요. 그렇지만 컨테이너 중심의 배포는 여기서 중요한 기술적인 차이점이 하나 있습니다. 게임과 인터넷 뱅킹이 각각 실행되면서 ‘이 컴퓨터에서 나만 구동되고 있다’라고 판단할 수 있도록, 실제로 두 프로그램 간에 간섭을 일으킬 수 없는 장벽을 쳐요. 이러한 장벽을 치는 것과 동시에 OS는 게임과 인터넷 뱅킹이 사용할 수 있는 CPU, 메모리 등의 자원 또한 독립적으로 사용할 수 있도록 할당하고 관리합니다. 이러한 과정을 통해 게임과 인터넷 프로그램은 스스로를 ‘서로 다른 컴퓨터에서 깔려 있다’고 생각하게 됩니다. 물론 OS의 관점에서 보자면 둘 다 OS 상에서 구동되는 프로그램이지만 말이죠. 이와 같은 컨테이너 동작 방식을 OS 커널을 공유하는 가상화라고 표현하기도 해요.

 

  전통적인 배포 가상머신 기반 배포 컨테이너 기반 배포
컴퓨터 물리적인 컴퓨터 1대 물리적인 컴퓨터 1대에 다수의 가상머신 존재 컴퓨터 형태에 영향 받지 않음
OS 물리적인 컴퓨터 1대에 OS 1개가 설치됨 물리적인 컴퓨터 OS 1대 + 다수의 가상머신에 각각 OS설치 컴퓨터 형태와 관련 없이 설치된 OS 1개
리소스 컴퓨터 1대의 자원을 여러 프로그램이 나눠 씀 하이퍼바이저를 통해 가상머신 별로 개별적 자원 할당 OS에서 프로그램별로 자원을 할당하고 관리함
격리 수준 격리되지 않아 프로그램 간 간섭 발생 각 가상머신이 완전하게 격리됨 프로그램 실행 환경은 격리되지만 OS 환경은 공유됨
문제 전이 가능성 특정 프로그램의 문제가 시스템 전체의 중단을 가져올 수 있음 특정 가상머신의 문제가 다른 가상머신의 문제로 전이될 가능성이 낮음 특정 프로그램의 문제가 다른 프로그램에 간섭을 일으키지는 않지만, 특정 프로그램의 문제가 OS 문제를 유발할 경우 시스템 중단 가능성 있음

 

 

 

 

 

 

 

 

 

 

 

 

 


참고

 

쿠버네티스 알아보기 1편: 쿠버네티스와 컨테이너, 도커에 대한 기본 개념

https://www.samsungsds.com/kr/insights/220222_kubernetes1.html

 

쿠버네티스 알아보기 2편: 쿠버네티스를 만나는 여러 가지 방법   (읽어보기)

https://www.samsungsds.com/kr/insights/kubernetes-2.html

 

쿠버네티스 알아보기 3편: 쿠버네티스를 이루고 있는 여러 가지 구성 요소   (읽어보기)

https://www.samsungsds.com/kr/insights/kubernetes-3.html