상세 컨텐츠

본문 제목

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

보안/java

by MustThanks 2022. 9. 15. 06:25

본문

반응형

컨테이너          : 응용프로그램이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 결리 기술
컨테이너 런타임 : 컨테이너를 다루는 도구
도커               :  컨테이너를 다루는 도구 중 유명한 제품
쿠버네티스       : 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구
오케스트레이션  : 여러 서버에 걸친 컨테이너 및 사용하는 환경에 대한 설정을 관리하는 행위


컨테이너란  사용자가 구동하려는 응용프로그램을 실행할 수 있는 환경까지 감싸서 어디서든 쉽게 실행할 수 있게 해 주는 기술

컨테이너 런타임 : 컨테이너를 사용할 때 필요한 도구로 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구로
                       종류도 여러가지가 있는데 그중 유명한 것이 도커
                       도커가 사용하는 컨테이너 규격은 표준화되어 있기 때문에 도커가 아닌 다른 터네이너 런타임드로 도커로 만든
                        컨테이너를 사용할 수 있음

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


쿠버네티스의 역할은 컨테이너를 분산 배치, 상태관리 및 컨테이너의 구동 환경까지 관리해 주는 도구이고 도커는 컨테이너를 다루는 도구(컨테이너 런타임)
중 하나 이다, 쿠버네티스는 컨테이너를 다루기 위해 도커 이외에도 다양한 컨테이너 런타입 소프트웨어를 사용 할 수 있다

애플리케이션 배포 환경의 변화(Traditional Development) 출처 : https://kubernetes.io/ko


Traditional Deployment(전통적 배포)
 - 가상화 이전, 오래전부터 쓰이던 방식. 
 - 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식
 - 우리는 PC 한 대에 윈도우를 하나 설치하고, 여러 가지 게임이나 워드프로세서 등을 깔아서 사용하는 비슷한 방식이라고 생각하면 됩니다. 
 - 가장 오래되고 단순한 방식이며 단일 목적 시스템이라면 이것으로도 별 무리가 없음.

 단점
 - 인터넷 뱅킹을 위해 보안 프로그램을 많이 설치했더니 게임이나 웹 브라우저 성능이 떨어지는 걸 경험, 누구나 한 번쯤 해보셨을 텐데요. 
 - 한 대의 컴퓨터에서 모든 것을 처리하려고 하면 어떤 프로그램 동작이 다른 프로그램의 동작을 간섭하거나,
   특정 프로그램이 성능을 독점할 경우 또 다른 프로그램의 성능이 떨어지는 단점이 있습니다. 
 - 성능이 떨어지는 정도에 그치지 않고 프로그램의 중단까지도 유발할 수도 있음.

 해결책

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

 * 가상머신
   - 말 그대로 가상 컴퓨터
   - 컴퓨터이기 때문에 우리가 컴퓨터를 조립할 때 CPU, 메모리 및 SSD를 장착하듯, 
     가상머신에도 CPU, 메모리, 저장 장치 등을 개별적으로 할당할 수 있음.
   - 앞에서 말한 게임 프로그램과 인터넷 뱅킹 보안 프로그램이 간섭을 일으켜 문제가 된다면 
     두 프로그램을 각각의 가상머신에서 실행하면 하나의 컴퓨터 안에서 
     두 개의 가상화된 컴퓨터가 동작하기 때문에 서로 간섭을 일으키지 않게 됩니다. 
   - 가상머신 성능을 조절해 게임 컴퓨터에는 좀 더 많은 CPU와 메모리를, 
     인터넷 뱅킹용 컴퓨터에는 적은 CPU와 메모리를 할당하여 사용할 수 있음
   - 또한 서버와 같이 다중화와 분산 처리가 중요한 시스템이라면 시스템 자원 상황에 따라 
     가상머신 개수를 늘리고 줄이는 것도 좀 더 유연하게 처리할 수 있습니다.
   - 이 방식이 전통적 배포 방식보다는 분명 효율적이지만, 
     가상머신은 완전한 컴퓨터이고 가상머신에 일일이 운영체제를 설치해야 하기 때문에 
     컨테이너 중심의 배포(Container Deployment)보다는 무거운 편.

 

애플리케이션 배포 환경의 변화(Container Development)


 Container Deployment(컨테이너 중심의 배포)
 - 하이퍼바이저라는 부분이 Container Runtime으로 대체
 - Virtual Machine이라고 된 부분은 Container로 대체

  * 컨테이너
  - 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없음
  - 그림에서 보는 것과 같이 OS는 하나만 사용합니다.

  * 컨테이너 기반 배포
  - 전통적 배포 위에 Container Runtime이 올라가 있는 것 같은데 물리적인 컴퓨터 상에서만 유효한 것만은 아니다
  - 컨테이너 런타임 위에 OS와 하드웨어가 층으로 쌓여 있는 그림을 보고 전통적인 배포 위에서 
    컨테이너 런타임을 올렸다고 오해를 하곤 하는데, 컨테이너는 OS 하단이 어떻게 동작하는지 직접 관심을 두지 않음. 
  - 가상머신 위에 올라간 OS에서 컨테이너 기반 배포를 하는 것이 가능.


  * 게임과 인터넷 뱅킹 프로그램이 한 컴퓨터에 설치된다면, 서로 간섭을 일으켜 성능 저하나 오류를 발생시킬 수 있음
     - 컨테이너 중심의 배포 방식에서는 어떻게 해결하는지 알아보기 위해 게임과 인터넷 뱅킹 소프트웨어가 각각 컨테이너로 배포된다고 가정.
     - 게임과 인터넷 뱅킹은 하나의 OS 상에서 구동
       = 이것만 보면 전통적 배포에서 하나의 OS 위에 프로그램을 여러 개 구동시킨 것과 별 차이가 없음
       = 그렇지만 컨테이너 중심의 배포는 여기서 중요한 기술적인 차이점이 하나 있음
       = 게임과 인터넷 뱅킹이 각각 실행되면서 ‘이 컴퓨터에서 나만 구동되고 있다’라고 판단할 수 있도록, 
          실제로 두 프로그램 간에 간섭을 일으킬 수 없는 장벽을 만듬
       = 이러한 장벽을 만드는 것과 동시에 OS는 게임과 인터넷 뱅킹이 사용할 수 있는
          CPU, 메모리 등의 자원 또한 독립적으로 사용할 수 있도록 할당하고 관리
       = 이러한 과정을 통해 게임과 인터넷 프로그램은 스스로를 ‘서로 다른 컴퓨터에서 깔려 있다’고 생각
       = OS의 관점에서 보자면 둘 다 OS 상에서 구동되는 프로그램
       = 이와 같은 컨테이너 동작 방식을 OS 커널을 공유하는 가상화라고 표현하기도 해요.

     - 이때 주의할 점이 하나 
       = 컨테이너는 OS를 공유하는 방식이기 때문에, 어떤 프로그램의 문제가 다른 프로그램을 간섭할 수는 없음
       = 그러나 내 프로그램의 문제가 OS에 문제를 일으킬 경우에는 OS에서 구동 중인 전체 컨테이너의 문제가 될 가능성이 있음.

 

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

 

 

'보안 > java' 카테고리의 다른 글

SOLID 원칙  (0) 2023.04.04
AOP 설명  (0) 2023.03.17
쿠버네티스[10] 권장 레이블 20220913  (0) 2022.09.13
쿠버네티스 [9] 필드셀렉터 20220912  (1) 2022.09.12
쿠베네티스[9] 어노테이션 20220908  (1) 2022.09.08

관련글 더보기

댓글 영역