본문 바로가기

Infra/Cloud

[Docker & Kubernetes] 도커, 그리고 쿠버네티스

도커(Docker), 그리고 Kubernetes에 관해

출처: Docker Homepage & Kubernetes Homepage


개요

  Docker와 Kubernetes를 알아보고, Docker와 Kubernetes를 비교해 조금 더 명확하게 이해해본다

 

목차

 

소개

 1. Traditional vs VM(Virtual Machine) vs Container 

 

(출처: https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/)

환경  Traditional Deployment
(전통적인 개발환경)
Virtualized Deployment
(가상환경에서의 개발환경)
Container Deployment
(컨테이너에서의 개발환경)
특징 1. 하나의 물리서버에서 실행

2. 여러 애플리케이션의 자원의 한계를 정할 수 없어 자원 할당의 문제

3. 여러 물리서버에 각 애플리케이션을 할당
하면 자원을 충분히 활용하지 못하는 문제가 발생

4. 하나의 애플리케이션이 많은 자원을 사용할 시 다른 애플리케이션은 사용이 불가능하게 되는 문제가 발생
1. 단일 물리서버의 CPU에서 여러 가상시스템(VM)을 실행

2. VM간에 환경이 독립적이여서
보안성을 제공

3. 물리서버에서 자원을 보다 효율적으로 사용 가능하며 각 VM의 모든 자원을 활용 할 수 있다.

4. 쉽게 애플리케이션을 추가하거나 업데이트 할 수 있고, 하드웨어의 비용을 절감할 수 있어 더 나은 확장성을 제공

5. 각 VM은 하드웨어상에 자체적인 O.S를
포함한 모든 구성요소를
실행하는 하나의 완전한 머신
1. 애플리케이션들은 서로 O.S를 공유하기
때문에 VM보다 가벼움

2. 공유하는 O.S의 자원을 필요한 만큼 격리시켜 각 컨테이너에 할당

3. VM과 마찬가지로 자체적인
file system, CPU 점유율, 메모리, 프로세스 공간 등이 존재

4. 기본 인프라와의 종속성을
끊었기 때문에 다른 클라우드나 O.S 배포본에 이식성 우월

 

 2. Docker 그리고 Container 

A. 도커(Docker)란?

  도커는 위에서 언급된 Container Deployment 기반의 오픈소스 가상화 플랫폼이다. 조금 더 나아가, 소프트웨어 혹은 소프트웨어에 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 자원)을 하나의 파일시스템 안에 감싼것이다.

 

B. 컨테이너(Container)란? 

   애플리케이션과 애플리케이션 사이에 환경을 서로 독립적이도록 격리시킨 공간이다. 애플리케이션은 이러한 개별적인 컨테이너 공간안에서 실행되며, 큰 애플리케이션들은 서비스별로 세분화 되어 각 컨테이너로 구분해 작은 단위로 나누어 빠르게 배포할 수 있게 된다. 따라서 하나의 작은 서비스에 문제가 생겨도, 다른 서비스에 영향을 끼치지 않는다는 이점이 있다.

 

 3. Kubernetes vs Docker 

A. 쿠버네티스(Kubernetes)란?

  컨테이너화된 애플리케이션의 관리시스템으로,확장된 오픈 소스 기반의 컨테이너 오케스트레이션 툴이다. 즉 컨테이너의 수가 증가하여 생길 수 있는 어려움을 '컨테이너 오케스트레이션 툴'을 바탕으로 다수의 컨테이너들의 생성과 소멸, 시작 및 중단 시점 제어, 스케줄링, 로드 밸런싱, 클러스터링 등의 애플리케이션을 구성하는 모든 과정의 실행을 관리 및 조율하는 시스템이라고 할 수 있다. 더 나아가 쿠버네티스는 단순 A->B->C와 같이 정의된 워크플로우만 수행하는 것이 아닌, 독립적이고 조합이 가능한 제어프로세스들로 구성되어 현재 상태에서 입력받은 상태까지 여러가지 형태로 나아갈 수 있도로 한다. 따라서 시스템이 사용하기 용이해지고, 회복력을 갖추어 유연성을 통해 확장 가능해지도록 하여준다.

 

B. 쿠버네티스(Kubernetes)의 특징

  ① 로드 밸런싱(Load balancing): 서비스의 사용자가 늘어나면, 쿠버네티스는 늘어나는 네트워크 트래픽의 수요에 맞춰 컨테이너를 자동생성하여 증가시켜주고, 트래픽이 다시 감소한다면 최소한의 컨테이너 갯수로 자동 조절 시켜준다.

 

  ② 스토리지 오케스트레이션(Storage Orchestration): 로컬 저장소, 공용 클라우드 공급자 등와 같은 저장소 시스템을 자동으로 탑재 할 수 있다.

 

  ③ 자동화된 복구(Self-Healing): 컨테이너들을 모니터링하며, 컨테이너의 상태에 맞게 재시작, 교체 혹은 제거 등의 작업을 해주며 준비를 마칠 때 까지 클라이언트에게 보여주지 않는다.

 

  ④ 자동화된 롤아웃과 롤백(Self-Rollout & Self-Rollback): 컨테이너를 원하는 상태로 기술한 설정값에 따라 변화 시킬 수 있어서, 기존의 컨테이너를 제거하고 기존의 리소스를 새로운 컨테이너에 다시 적용할 수도 있다.

 

  ⑤ 자동화된 빈 패킹(Bin Packing): 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공하여, 각 컨테이너가 요구하는 CPU & Memory 를 지시할 수 있도록한다. 이 때 쿠버네티스는 지시받은 리소스를 노드에 맞추어 가장 적합하게 제공한다.

 

  ⑥ 무중단 서비스(Fault tolerance-FT Service): 쿠버네티스는 점진적 업데이트를 제공하므로, 중간에 서비스를 중단시키지 않고도 업데이트가 가능하도록 한다.

 

  ⑦ 호환성(compatibility): 쿠버네트스는 Container Deployment 기반의 오픈소스 플랫폼인 도커를 기반으로 하므로, 특정 클라우드에 종속되지 않고 유연하게 클라우드의 환경을 이전할 수 있다. 따라서 서로 다른 업체끼리의 호환성 문제인 Vendor Lock In의 문제를 해결하여 줄 수 있도록 한다. 

 

C. Kubernetes vs Docker 의 비교

  Docker: 도커는 하나의 컨테이너를 생성 및 관리해주는 '도구'이다.

  Kubernetes: 쿠버네티스는 도커에 의해 생성된 다수의 컨테이너들을 관리하고 상황에 맞게 조절해주는 '툴'이다.

  도커에 의해 생성된 하나의 컨테이너 속에서 애플리케이션이 동작하고 있는데(Docker), 사용량이 증가하여 컨테이너의 수요가 증가하면 자동으로 컨테이너의 수를 증가시켰다가 사용량이 감소하면 다시 컨테이너의 수를 돌려놓는 작업을 해주어(Kubernetes) 이전의 수동으로 작업했던 작업들을 자동으로 할 수 있도록 만들어 주었다.

 

참고사이트

1. https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/

 

쿠버네티스란 무엇인가?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하

kubernetes.io

2. https://www.docker.com/resources/what-container

 

What is a Container? | Docker

A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. Learn more.

www.docker.com