본문 바로가기

내직업은 IT종사자/기타

쿠버네티스(kubernetes)와 도커(docker)의 개념 쉽게 정리

반응형

 

 

 

 목차

 

 

1. 쿠버네티스와 도커의 차이점 


쿠버네티스란?

컨테이너를 오케스트레이션 하는 도구

(예를 들어 여러 서버 (노드)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하거나, 컨테이너가 사용할 비밀번호나 환경 설정을 관리하고 주입해 주는 일 등, 컨테이너를 분산 배치, 상태관리 및 컨테이너의 구동환경까지 관리해주는 역할을 하는 도구)

 

도커란?

컨테이너를 다루는 도구 , 컨테이너 런타임 프로그램 중 가장 유명하고 많이 쓰이는 종류입니다.

 

*오케스트레이션 이란?
여러개의 컴퓨터 시스템, 애플리케이션 또는 서비스를 조율하고 관리하는 것으로, 여러개의 작업을 함께 연결하여 크기가 큰 워크 플로우나 프로세스를 실행하는 방식을 뜻합니다. 이러한 프로세스는 여러개의 자동화된 작업으로 구성될 수 있으며 관련되는 시스템도 여러개 일 수 있습니다. 

오케스트레이션의 목표는 빈도가 높고 반복할 수 있는 프로세스의 실행을 간소화 및 최적화하여 복잡한 작업과 워크플로우를 간편하게 관리하도록 돕는 것 입니다. 

 

* 용어정리
-컨테이너: 앱이 구동되는 환경까지 감싸서 어디서든 쉽게 실행할 수 있도록 하는 격리 기술
-컨테이너 런타임: 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구 (예: 도커)
-도커: 컨테이너를 다루는 도구 중 가장 유명한 것
-오케스트레이션: 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위 
-쿠버네티스: 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구

 

 

 

 

2. 쿠버네티스의 역할


  • 자동화된 복구(self-healing) 
    • 컨테이너를 모니터링 하면서 컨테이너가 죽는 즉시 쿠버네티스는 그것을 빠르게 재시작 시킵니다.
  • 로드밸런싱
    • 서비스 웹사이트의 니즈에 따라 컨테이너의 숫자를 자동으로 조절하고, 접속하는 유저가 많을 수록 쿠버네티스는 구동하는 컨테이너의 숫자를 늘리고, 유저가 적어지면 컨테이너의 숫자를 줄입니다.
  • 무중단 서비스
    • 점진적 업데이트를 통해 서비스를 중단하지 않고도 서비스 업데이트를 가능하게 합니다.
  • 호환성
    • 서로 다른 클라우드 사이의  호환문제를 해결하여 사용자들이 특정 업체에 종속되는 일 없이 환경을 이전할 수 있도록 해줍니다. 

 

 

 

 

3. 예전  배포 방식과 컨테이너배포방식 차이 (어플리케이션 배포 환경의 변화)


 

왼쪽부터 (1) 옛날 전통 배포방식, (2)가상화 배포, (3) 컨테이너배포 라고 칭하겠습니다.

?하이퍼바이저(Hypervisor)
하나의 시스템 상에서 가상 컴퓨터를 여러개 구동할 수 있도록 해주는 중간계층을 의미 
?App
실행하고자 하는 프로그램
?Bin/Library
프로그램이 실행하는데 필요한 환경과 관련된 파일 

 

(1) 은 물리적인 찐 컴퓨터 한대에 하나의 OS(operating System)을 깔고 여러 프로그램을 설치하는 방식입니다.

예를 들어 PC 한대에 윈도우 하나를 설치하고 여러가지 게임이나 프로그램을 깔아서 사용하는 비슷한방식 입니다. 

 

이 방식의 문제점은  한대의 컴퓨터에서 모든것을 처리하려고 하면 어떤 프로그램 동작이 다른 프로그램의 동작에 영향을 끼치거나, 특정 프로그램이 성능을 독점할 경우 또 다른 프로그램의 성능이 떨어지는 단점이 있습니다.  성능이 떨어지는 정도에 그치지 않고 프로그램의 중단까지도 유발할 수 잇습니다. 

 

이 단점을 보완하기 위해 (2)가상화 배포가 나왔습니다.

위의 사례에 상황에서 한대의 컴퓨터로 처리하기 힘들어 졌을때 가상머신에 CPU, 메모리, 저장장치 등 개별적으로 할당해서 실존하진 않지만 여분의 추가 가상 컴퓨터 처럼 사용합니다.  그러면 위의 사례에서 직면할 수 있는 문제, 예를 들어 게임 프로그램과, 인터넷 뱅킹 보안 프로그램이 간섭되어 문제가 된다면 각 프로그램을 각각의 가상머신에서 실행시켜 서로 영향을 받지 않게 하는 것입니다.

 

게임과 같은 고성능 프로그램이 돌아가는 가상컴퓨터에는 좀더 많은 CPU와 메모리를 할당하고 그 외에는 적은 CPU와 메모리를 할당하여 사용할 수 있습니다. 또한 서버와 같이 다중화 분산처리가 중요한 시스템일때, 시스템 자원 상황에 따라 가상머신 갯수를 늘리고 줄이는 것을 좀 더 유연하게 처리할 수 있습니다. 

 

하지만 가상컴퓨터들에도 하나하나 OS(operating system)이 설치 되야하기때문에 더 가벼운 (3) 컨테이너 중심의 배포가 나왔습니다.

 

(2)에 있었던 Hypervisor( 하나의 시스템 상에서 가상 컴퓨터를 여러개 구동할 수 있도록 해주는 중간계층)가  Container Runtime으로 대체 되고 (2)Virtual Machine 부분이 Container로 대체 되었습니다.

 

컨테이너는 가상머신과 달리 프로그램 구동을 위해 OS를 각각 일일히 설치 할 필요가 없습니다.

그림과 같이 OS(operating system)은 하나만 사용합니다. 

 

 컨테이너 런타임 위에 OS와 하드웨어가 층으로 쌓여 있는 그림을 보고 전통적인 배포 위에서 컨테이너 런타임을 올렸다고 오해를 하곤 하는데, 컨테이너는 OS 하단이 어떻게 동작하는지 직접 관심을 두지 않습니다. 그래서 하나의 OS를 공유하더라도 각각의 컨테이너에서 구동되는 프로그램이 서로 간섭없이 독립적으로 배포할 수 있습니다. 

 

예를 들어 (1)에서 들었던 예처럼 하나의 OS위에  게임과 인터넷뱅킹 프로그램이 각각 실행되면서 '나는 혼자만 구동되고있다' 라고 판단할 수 있도록, 실제로 두 프로그램 간에 간섭을 일으킬 수 없는 장벽을 칩니다. 

장벽을 치는 동시에 OS는 게임과 인터넷 뱅킹이 사용할 수 있는 CPU, 메모리 등의 자원 또한 독립적으로 사용할 수 있도록 

할당하고 관리합니다. 이러한 과정을 통해 게임과 프로그램은 서로 다른 컴퓨터에 깔려있는걸로 생각하게 됩니다. 

실제 OS입장에서 보자면 둘다 같은 OS상에서 구동되는 프로그램입니다.

(저는 안들키고 두집살림하는 막장드라마 상황을 생각해보았습니다..ㅎㅎㅎㅎ)

리눅스를 기준으로 내가 실행한 프로그램이 독립된 환경에서 실행되는 것처럼 격리 시켜주고, CPU, 메모리 및 저장장치와 같은 자원도 실행한 프로그램이 독립적으로 쓸 수 있도록 해주는 namespace 및 cgroup이라는 기술이 있습니다.

 

하지만, 컨테이너는 하나의 OS를 공유하기 때문에 OS에서 문제가 발생된다면 영향을 받습니다. 

예를들어 하나의 프로그램에서의 문제가 OS에 문제를 일으킨다면 OS에서 구동중인 전체 컨테이너의 문제가 될 가능성이 있습니다. 

 

 

 

 

4. 요약


 

 

 

 

 

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

 

쿠버네티스 알아보기 1편: 쿠버네티스와 컨테이너, 도커에 대한 기본 개념 | 인사이트리포트 | 삼

요즘 IT 생태계에 관심이 많으신 분들이라면 쿠버네티스라는 단어를 들어 보셨을 텐데요. 쿠버네티스에 대해 개발자들의 관심이 높아지고 있고, 여러 대기업에서 새로운 시스템을 쿠버네티스를

www.samsungsds.com

 

 

 

 

잘못된 정보에 대한 피드백은 언제나 환영입니다  (´▽`ʃƪ)♡

반응형