시스템(Linux)

Docker 와 Kubernetes 비교 Ⅰ

forward error correction Circle 2024. 10. 4. 16:07
반응형

Ⅰ. Docker(도커)란?

Docker는 애플리케이션을 컨테이너라는 가상화된 환경에서 실행하기 위한 플랫폼입니다. 컨테이너는 가볍고 독립적인 실행 환경을 제공하며, 코드와 그 코드가 실행되는 데 필요한 모든 라이브러리, 의존성 등을 포함하여 어디서나 동일하게 실행될 수 있습니다.

Ⅱ. Docker의 주요 특징

ⅰ. 컨테이너화 기술

      : 애플리케이션과 그 종속성을 패키징하고, 어디서든 일관되게 실행할 수 있게 합니다.
ⅱ. 가상머신보다 가벼움

      : Docker 컨테이너는 VM보다 훨씬 가볍고, 빠르게 실행 및 종료됩니다.
ⅲ. 이미지 관리

      : Docker 이미지를 빌드하고 저장하며, 여러 환경에서 공유할 수 있습니다.
ⅲ. 개별 컨테이너 관리

      : Docker는 개별 애플리케이션 컨테이너를 실행하고 관리합니다.

Ⅲ. Docker 사용 예

ⅰ. 단일 컨테이너 실행

  : Docker를 통해 애플리케이션 하나를 쉽게 패키징하고 실행할 수 있습니다.
ⅱ. 애플리케이션 테스트 및 개발

  : 개발 환경과 프로덕션 환경이 동일한 Docker 이미지를 사용하므로, 환경 간 불일치를 줄입니다.

Ⅳ. Docker의 한계

 자체는 단일 컨테이너 실행에 적합하지만, 복잡한 애플리케이션의 경우 수많은 컨테이너를 동시에 관리해야 합니다. 이때는 추가적인 관리 도구가 필요합니다.

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

 대규모 컨테이너 오케스트레이션(Orchestration)을 위한 오픈소스 플랫폼입니다. Docker와 같은 컨테이너 기술을 기반으로 여러 대의 호스트에서 다수의 컨테이너를 자동으로 배포, 확장, 관리합니다. 클러스터라는 개념을 사용해 여러 개의 물리적 또는 가상 서버에서 컨테이너들을 조정하고 자동화합니다.

Ⅵ. Kubernetes의 주요 기능

ⅰ. 컨테이너 오케스트레이션

      : 다수의 컨테이너가 상호작용할 때 이를 관리하고 조율합니다.
ⅱ. 자동화된 배포 및 확장

      : 애플리케이션을 자동으로 배포하고, 트래픽에 따라 자동으로 확장하거나 축소할 수 있습니다.
ⅲ. 셀프 힐링

     : 문제가 있는 컨테이너를 감지하여 자동으로 재시작하거나 교체합니다.
ⅳ. 로드 밸런싱 및 서비스 디스커버리

     : 컨테이너 간 네트워크 통신을 위한 로드 밸런싱 및 서비스 디스커버리를 자동으로 처리합니다.
ⅴ. 롤아웃 및 롤백

    : 애플리케이션 업데이트를 점진적으로 롤아웃하고, 문제가 발생하면 이전 버전으로 롤백할 수 있습니다.

Ⅶ. Kubernetes 구성 요소

 ⅰ. 노드(Node)

  : Kubernetes 클러스터 내에서 컨테이너를 실행하는 서버.
 ⅱ. 포드(Pod)

  : 하나 이상의 컨테이너가 함께 배포되고, 네트워크 및 스토리지를 공유하는 가장 작은 배포 단위.
 ⅲ. 디플로이먼트(Deployment)

  : Kubernetes에서 컨테이너 애플리케이션을 관리하는 방식으로, 애플리케이션의 상태를 선언하고 이를 유지하게 합니다.
ⅳ. 서비스(Service)

  : 특정 포드 그룹에 대한 네트워크 접근을 추상화하여, 외부 트래픽이 적절한 컨테이너에 도달하도록 합니다.
Ⅷ. 컨트롤 플레인(Control Plane)

 : 클러스터의 상태를 관리하고 제어하는 역할을 하는 컴포넌트들.

Ⅸ. Kubernetes와 Docker의 차이점

구분 Docker Kubernetes
역할 및 목적 개별 컨테이너를 생성, 실행, 관리하는 데 중점을 둡니다. 주로 개발자와 운영자가 단일 애플리케이션 컨테이너를 관리하기 위해 사용됩니다.  클러스터 내에서 다수의 컨테이너를 관리, 배포, 스케일링하는 데 사용됩니다. Kubernetes는 Docker와 같은 컨테이너 엔진 위에서 작동하며, 컨테이너가 여러 서버에 걸쳐 동작할 때 이를 조율합니다.
 컨테이너 관리 수준 주로 개별 컨테이너를 관리하며, 네트워크나 볼륨 같은 기능도 제공하지만 다수의 컨테이너를 조직화하기엔 한계가 있습니다. 다수의 컨테이너를 하나의 시스템처럼 다룹니다. 애플리케이션을 자동으로 배포하고, 확장하며, 장애를 감지하고 복구하는 작업을 처리합니다.
클러스터링 Docker 자체는 클러스터링 기능이 없습니다. 다만 Docker Swarm이라는 오케스트레이션 도구를 사용해 클러스터를 만들 수 있습니다. 그러나 Kubernetes만큼의 기능과 확장성을 제공하지는 않습니다. 클러스터링을 기본으로 하며, 대규모 시스템에서 수많은 컨테이너를 효율적으로 관리할 수 있도록 설계되었습니다.
확장성 단일 컨테이너와 단일 호스트에 적합하며, 다중 컨테이너 확장에 대한 기능은 제한적입니다. 수백, 수천 개의 컨테이너를 다양한 서버에 걸쳐 관리할 수 있는 확장성을 가지고 있으며, 애플리케이션의 트래픽 부하에 따라 자동으로 확장할 수 있습니다.
셀프 힐링(Self-healing) 컨테이너가 실패하거나 중단되면 수동으로 재시작해야 합니다. 컨테이너가 중단되거나 문제가 발생하면 자동으로 이를 감지하여 재시작하거나 대체합니다.
서비스 디스커버리와 로드 밸런싱 기본적으로 네트워킹과 서비스 디스커버리를 제공하지만, 수동 설정이 필요합니다. 자동으로 로드 밸런싱과 서비스 디스커버리를 처리하며, 트래픽이 적절한 포드로 전달되도록 관리합니다.
롤링 업데이트와 롤백 수동으로 새로운 이미지를 배포하고 롤백을 설정해야 합니다. 애플리케이션을 롤링 업데이트 방식으로 점진적으로 배포하며, 문제가 발생하면 자동으로 롤백할 수 있습니다.

 

 

반응형