[컨테이너 서비스] docker & ECS Rolling Updates & Amazon ECR & Amazon EKS

728x90

docker

  • 도커는 앱을 배포하는 소프트웨어 개발 플랫폼으로 컨테이너 기술을 사용한다.
  • 앱을 컨테이너에 포장하여 어떤 운영체제든 상관없이 실행된다.
  • 즉, 앱이 한 번 컨테이너에 들어가면 어디든 상관없이 호환성 문제없이 프로그램이 실행된다는 것이다.
  • 동작이 예측 가능하기 때문에 처리할 일이 줄어들고 배포와 유지가 수월하여 모든 언어로 사용이 가능하다.
  • 도커 컨테이너는 도커 이미지로부터 생성된다. 도커 이미지들은 도커 리포지토리에 저장되고 도커 허브라고 불리는 레포지토리가 존재한다.
  • AWS 에서 제공하는 사설 도커 레포지토리인 Amazon ECR 도 존재한다.
  • 도커도 일종의 가상화 기술이지만 엄밀히 따지자면 아니라고 할 수 있다.
  • 리소스들은 호스트와 공유되기 때문에 한 서버에서 여러 컨테이너를 띄울 수 있다는 뜻이다.
  • 도커를 사용하는 가장 큰 이유는 다른 앱들과 격리가 가능하기 때문이다. 고립!!
  • 도커 이미지를 작성하기 위해서는 도커 파일을 생성해야 한다. 도커 파일에는 기본적인 OS 이미지나, 스크립트 등을 작성할 수 있다. 해당 도커 파일을 빌드하면 도커 이미지가 생성되고 도커 이미지를 실행하면 도커 컨테이너가 띄워진다.
  • AWS 에선 도커 컨테이너를 ECS, Fargate, EKS 서비스들을 사용하여 관리한다.

ECS Rolling Updates

  • ECS 서비스를 버전 1에서 버전 2로 업데이트 할 때 한 번에 몇개의 태스크가 실행되고, 누가 먼저 실행되는지 제어할 수 있다.
  • ECS 업데이트를 보면 Minimum healthy percent 와 Maximum percent 를 설정한다. 디폴트 값으로 100, 200을 갖는다.
  • Minimum healthy percent 는 ECS 서비스에 실행 중인 태스크가 10개가 있고 이 태스크의 갯수는 실제 실행 가능한 용량이다. Minimum healthy percent 가 50으로 설정될 경우 50% 만큼만 태스크를 ECS 서비스에 띄우겠다는 뜻이다.
  • Maximum percent 는 버전 1에서 버전 2로 업데이트 할 때 얼마 만큼 태스크를 생성할지 나타낸다.
  • 예를 들어, Min 이 50% 이고 Max 가 100% 이다. 4개의 태스크가 실행된다. 최소가 50% 로 잡혔기 때문에 오래된 태스크 2개가 종료된다. 최대는 100% 로 설정됐기 때문에 다시 2개가 생성된다. 최소가 50% 이기 때문에 또 다시 오래된 태스크 2개가 종료되고, 다시 2개가 생성된다.
  • 위처럼 무한히 순환하여 태스크가 생성되는데 이를 롤링 업데이트라고 부른다. 태스크가 종료되고 다시 실행되는 이유는 최소가 50% 최대가 100% 이기 때문이다.

Amazon ECR - Elastic Container Registry

  • 아마존에서 제공하는 컨테이너 저장소이다. AWS 에서 컨테이너를 저장, 관리 및 배포하기 위해 사용하며 사용하고 있는 용량에 따라 비용이 청구된다.
  • Amazon ECS 에 완전 통합된 서비스이며 보안 메커니즘을 위해 IAM 을 사용한다.
  • Amazon ECS 에 업로드 된 이미지는 모두 S3 에 저장된다.
  • 이미지 취약성, 스캔, 버전 관리, 태깅 및 이미지 수명 주기를 지원한다.
  • EC2 인스턴스에서 이미지를 풀 받아서 도커 컨테이너를 생성해야 하는 경우에 IAM 역할을 사용해서 해당 이미지를 풀링해온다.
  • ECR 서비스에 태스크가 있기 위해서는 로컬 환경에서 도커 푸시 명령을 내리면 된다. 자동화하기 위해 CI/CD 를 사용한다.
  • CodeBuild 를 사용하면 자동으로 도커 이미지를 만들고 Amazon ECR 에 푸시해서 ECS 를 업데이트 할 수 있다.

Amazon EKS 개요

  • Amazon Elastic Kubernetes Service 로 아마존에서 관리형 쿠버네티스 클러스터를 실행하는 방법이다.
  • 쿠버네티스는 컨테이너화 된 애플리케이션을 자동으로 배포, 스케일링 관리할 수 있다. ECS 의 대안으로 사용되며 컨테이너를 실행하려는 목적은 비슷하지만 API 는 아주 다르다.
  • EC2 인스턴스 등 워크 노드를 배치할 때는 EC2 인스턴스를 사용하고, EKS 클러스터에 서버리스 컨테이너를 배치할 때는 Fargate 를 사용한다.
  • 주로 온프레미스에서 쿠버네티스를 사용하거나, 다른 클라우드에서 쿠버네티스를 사용하거나, 쿠버네티스 API 를 사용하거나, AWS 의 쿠버네티스 클러스터를 관리하고자 할 때 Amazon EKS 를 사용한다.
  • 쿠버네티스는 Azure, GCP 등 어떤 클라우드에서 사용 가능하다. 즉, 클라우드나 컨테이너 사이를 옮겨 다니려면 Amazon EKS 를 사용하는 게 훨씬 편리하다.
728x90