[Docker] 컨테이너 오케스트레이션

junghan·2023년 8월 8일
0

Docker

목록 보기
5/6
post-thumbnail

도커 컨테이너로 서비스를 한다는 것은?

도커 컨테이너로 서비스를 하게 되면 하나의 도커 이미지 안에 서비스 운영에 필요한 모든 것들이 들어 있어 개발자들이 손쉽게 협업을 할 수가 있습니다. 또한 서비스 운영 환경과 개발 환경의 느슨한 결합으로 한쪽의 에러에도 다른 한쪽은 작업을 계속해서 이어 나갈 수가 있습니다. 도커컨테이너는 배포가 쉽고 빠르며 시스템 의존성을 쉽게 업그레이드할 수 있어 스케일 아웃에 용이합니다. CPU limit, Memory limit 등의 시스템 자원을 효율적으로 활용할 수가 있고 무엇보다도 가상머신 보다 성능 면에서 뛰어납니다.

하지만 이렇게 컨테이너화된 애플리케이션도 역시 관리를 해야 합니다. 컨테이너화된 어플리케이션이 다운이 되면 직접 재실행 시켜야 합니다.

전통적인 방식과 VM보다 관리가 용이하지만 컨테이너의 스케일 아웃 장점 때문에 관리해야 하는 컨테이너 수가 많아지게 되면 그 또한 해결해야 하는 과제로 남습니다.


컨테이너 오케스트레이션이란?

오케스트레이션(Container Orchestration)이란?
수많은 연주자들이 지휘에 맞춰 연주하는 것을 “오케스트라”라고 합니다.

컨테이너 오케스트레이션은 말 그대로 컨테이너들을 지휘하는 메인 컨트롤러가 있고 그 지휘에 맞춰 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 것을 말합니다. 컨테이너를 사용하는 어떤 환경에서든 사용할 수 있습니다.


컨테이너의 계층구조

아래 이미지에서 컨테이너의 계층 구조를 잠깐 살펴보겠습니다. 컨테이너 상위계층에 오케스트레이션이 자리 잡고 있습니다. 5단계의 도커 엔진으로 구현되고 있는 컨테이너를 재설계할 필요없이 각기 다른 환경 전반에 동일한 애플리케이션을 배포하는 데 도움이 됩니다.


컨테이너 오케스트레이션의 기능

  • 컨테이너 클러스터링(Clustering):

    • 여러 대의 노드(node)를 하나의 클러스터(cluster)로 묶어,
      애플리케이션을 분산하여 실행하고, 자원을 효율적으로 활용하는 기능
    • 여러 대의 물리적인 또는 가상의 서버를 하나의 시스템 처럼 동작하게 하는 기술
    • 컨테이너를 실행하는 호스트의 자원을 효율적으로 분배, 컨테이너가 안정적으로 실행 되도록 함.
    • 여러 대의 컨테이너를 묶어 하나의 서버처럼 사용 할 수 있도록 지원.
  • 서비스 디스커버리(Service Discovery):

    • 컨테이너를 자동으로 발견하고, 서비스 이름과 IP 주소 등을 관리하여,
      애플리케이션 간의 연결을 관리하는 기능
    • 클라우드 환경에서의 컨테이너 생성, 배치, 이동에 따른 IP, Port 정보 업데이트 및 관리
  • 자동 스케일링(Autoscaling):
    - 애플리케이션의 트래픽 양에 따라 자동으로 컨테이너 수를 조절하여, 자원 사용량을 최 적화하고, 가용성을 보장하는 기능

  • 로드 밸런싱(Load Balancing):
    - 여러 대의 노드에서 실행 중인 컨테이너들을 조절하여, 트래픽을 균등하게 분배하여, 애 플리케이션의 성능을 최적화하는 기능

  • 롤아웃과 롤백(Rollout and Rollback):
    - 새로운 버전의 애플리케이션을 롤아웃하고, 이전 버전으로 롤백하는 기능입니다.

  • 자동 복구(Automatic Recovery):
    - 컨테이너나 노드의 장애 시 자동으로 복구하는 기능입니다.

  • 모니터링과 로깅(Monitoring and Logging):
    - 컨테이너나 노드의 상태를 모니터링하고, 로그를 수집하여,

애플리케이션의 성능과 문제점을 분석하는 기능

  • 보안과 네트워크 관리(Security and Network Management):
    - 컨테이너와 노드의 보안을 관리하고, 네트워크 설정을 관리하는 기능

대표적인 컨테이너 오케스트레이션

datadog report for cloud


대표적인 컨테이너 오케스트레이션 툴/서비스

1. 도커 스웜

  • Docker Inc.이 개발한 도커 컨테이너 오케스트레이션 도구
  • Docker Swarm은 2015년 Docker 1.12 버전에서 처음 발표됨
  • 이전에는 Docker Swarm Classic이라는 이름으로,
    Swarm 모드가 추가되기 전에 도커 엔진에 통합되기 전에 독립적으로 배포
  • Docker Swarm은 쿠버네티스가 등장하기 전까지
    가장 대중적인 컨테이너 오케스트레이션 도구 중 하나
  • 간단하게 작동하고, 설정이 쉬움

2. Kubernetes

  • 배경
    - Gmail, Youtube, 검색 등 다양한 웹 서비스가 있고, 대용량 트래픽을 감당해야함
    - 이를 감당하기위해, Kubernetes 프로젝트를 시작, 실제 서비스에 적용함

  • 오픈 소스 기반.

  • 구글에서 설계, 현재 리눅스 재단에 의해 관리.

  • 쿠버네티스 v1.0은 2015년 7월 21일에 출시됨.

  • 대규모에 적합
    - 스케일링 기능 강화 (Replication Controller: 컨테이너 수를 동적으로 조절)
    - 서비스 디스커버리 기능 강화 (DNS 기반)

  • 가장 기능 이 풍부하고 널리 사용되는 컨테이너 오케스트레이션 프레임워크

  • 베어 메탈, VM환경, 퍼블릿 클라우드 등의 다양한 환경에서 작동하도록 설계되어 있음.

공식 문서 (한국어 지원)

3.GKE(Google Kubernetes Engine)

  • Google Cloud Platform(GCP)에서 제공하는 Kubernetes 기반의
    관리형 컨테이너 오케스트레이션 서비스
  • 따라서 GKE는 Kubernetes를 기반으로 하고, Kubernetes의 기능을 모두 제공

4.EKS (Amazon Elastic Kubernetes Service)

  • AWS 제공하는 관리형 Kubernetes 서비스
  • EKS는 Kubernetes 기반으로 구축되어 있음
  • 사용자는 Kubernetes API를 사용하여 EKS 클러스터를 관리할 수 있습니다.

5.ECS (Amazon Elastic Container Service)

공식문서

  • AWS에서 제공하는 관리형 컨테이너 오케스트레이션 서비스
  • Docker 컨테이너를 실행하기 위한 기능을 제공
  • 사용자는 ECS를 사용하여 컨테이너를 배포, 관리, 스케일링


ECS란?

Amazon Elastic Container Service(Amazon ECS)는 컨테이너화된 애플리케이션을 쉽게 배포, 관리, 스케일링할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스입니다.

Amazon ECS에는 세 가지 계층이 있습니다.

용량 - 컨테이너가 실행되는 인프라

컨트롤러 - 컨테이너에서 실행되는 애플리케이션을 배포하고 관리합니다.

프로비저닝 - 스케줄러와 인터페이스하여 애플리케이션과 컨테이너를 배포하고 관리하는 데 사용할 수 있는 도구

다음 다이어그램은 Amazon ECS 레이어를 보여줍니다.

            용량, 컨트롤러 및 프로비저닝 계층을 보여주는 다이어그램.
        
        

Amazon ECS 용량

Amazon ECS 용량은 컨테이너가 실행되는 인프라입니다. 용량 옵션에 대한 개요는 다음과 같습니다.

  • 클라우드의 AWS Amazon EC2 인스턴스 인스턴스 유형, 인스턴스 수를 선택하고 용량을 관리합니다.
  • 클라우드에서의 서버리스 (AWS Fargate (Fargate)) AWS Fargate는 서버리스 컴퓨팅 엔진입니다. pay-as-you-go Fargate를 사용하면 서버를 관리하거나, 용량 계획을 처리하거나, 보안을 위해 컨테이너 워크로드를 격리할 필요가 없습니다.
  • 온프레미스 가상 머신 (VM) 또는 서버 Amazon ECS Anywhere는 외부 인스턴스(예: 온프레미스 서버 또는 가상 머신(VM))을 Amazon ECS 클러스터에 등록하도록 지원합니다.

용량은 다음 AWS 리소스 중 하나에서 찾을 수 있습니다.

  • 가용 영역
  • Local Zones
  • Wavelength Zone
  • AWS 리전
  • AWS Outposts

Amazon ECS 컨트롤러

Amazon ECS 스케줄러는 애플리케이션을 관리하는 소프트웨어입니다.

Amazon ECS 프로비저닝

Amazon ECS를 프로비저닝하기 위한 여러 가지 옵션이 있습니다.

  • AWS Management Console - Amazon ECS 리소스 액세스에 사용할 수 있는 웹 인터페이스를 제공합니다.
  • AWS Command Line Interface(AWS CLI) - Amazon ECS를 포함하여 다양한 AWS 서비스에 대한 명령을 제공합니다. Windows, Mac, Linux에서 지원됩니다. 자세한 정보는 AWS Command Line Interface을 참조하세요.
  • AWS SDK - 언어별 API를 제공하고 많은 연결 세부 정보를 처리합니다. 서명 계산, 요청 재시도 처리 및 오류 처리가 여기에 포함됩니다. 자세한 정보는 AWS SDK를 참조하세요.
  • Copilot - 개발자가 Amazon ECS에서 프로덕션 지원 컨테이너식 애플리케이션을 구축, 릴리스 및 운영할 수 있는 오픈 소스 도구를 제공합니다. 자세한 내용은 GitHub 웹 사이트의 Copilot 을 참조하세요.
  • AWS CDK - 익숙한 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 모델링하고 프로비저닝하는 데 사용할 수 있는 오픈 소스 소프트웨어 개발 프레임워크를 제공합니다. AWS CDK는 AWS CloudFormation을 통해 안전하고 반복 가능한 방식으로 리소스를 프로비저닝합니다.
profile
42seoul, blockchain, web 3.0

0개의 댓글