이 블로그에서는 다음을 사용하여 카우치베이스 도커 컨테이너를 실행하는 방법을 설명합니다. Amazon EC2 컨테이너 서비스 (Amazon ECS).

많은 분들께 감사드립니다. 무비올론 를 통해 개념을 이해하고 이 설정을 실행하는 데 도움을 받을 수 있습니다.

Amazon ECS란 무엇인가요?

Amazon ECS는 Amazon EC2 인스턴스 클러스터에서 Docker 컨테이너를 쉽게 실행, 중지 및 관리할 수 있는 컨테이너 관리 서비스입니다. Amazon ECS는 다른 AWS 인프라와 잘 통합되며 다음과 같은 작업을 수행할 필요가 없습니다.
자체 클러스터 또는 구성 관리 시스템으로 전환할 수 있습니다.
ec2-container-service

한 가지 분명한 질문은 이것이 다음과 같은 다른 컨테이너 오케스트레이션 프레임워크와 어떻게 다른가 하는 것입니다. 도커 스웜, Kubernetes또는 Mesos.
첫 번째 큰 차이점은 이러한 각 프레임워크가 오픈 소스라는 점입니다. Amazon은 현재 독점적인 오케스트레이션 프레임워크를 사용합니다. ECS의 가장 큰 장점은 다른 AWS 인프라와 마찬가지로 이 프레임워크도 관리형 서비스.
따라서 인프라에 대한 걱정 없이 컨테이너 배포에만 신경 쓰면 됩니다.

ECS를 더 잘 비교하면 다음과 같습니다. AWS/Azure용 Docker (새로 도입된 도커의 스웜 모드), Google 컨테이너 엔진 (쿠버네티스 지원), DC/OS (Mesos가 지원)도 관리형 서비스이기 때문입니다. ECS의 장점은 다음과 같습니다. AWS 인프라와 원활하게 통합 컨테이너 인스턴스 배포와 같은
사용 CloudFormation 템플릿을 사용하여 컨테이너를 확장하고 자동 스케일링 그룹를 사용하여 포트 매핑 보안 그룹,
다음을 사용하여 들어오는 컨테이너 트래픽을 관리합니다. 탄력적 로드 밸런서를 사용하여 로그 보기 CloudWatch 및 기타. 이미 구매한 경우
아마존 인프라가 필요하다면 ECS가 적합할 것 같습니다.

AWS용 Docker도커콘에서 발표된 도커콘도 이 분야에서 비슷한 제품입니다.

하지만 몇 가지 주의해야 할 단점도 있습니다:

  • 휴대성 - 애플리케이션 설계 도커 스웜는 Amazon, Azure, GCE, OpenStack, 온프레미스, VMWare, 베어메탈 데이터센터 등 다양한 플랫폼에서 실행할 수 있습니다. 하지만 ECS는 Amazon에만 연결되어 있습니다. 여러분은
    공급업체 종속이라고 생각하시나요? Amazon은 오케스트레이션 플랫폼이나 스케줄러를 독립형 제품으로 출시할 수 있지만 이는 일반적인 경우는 아닙니다.
  • 컨테이너 형식 - ECS 서비스는 Docker 컨테이너에만 초점을 맞추고 있습니다. 적어도 현재로서는 이것이 모든 실용적인 목적을 위해 완벽하게 괜찮을 수 있습니다. 저는 다음과 같은 배포를 듣거나 본 적이 없습니다. Rkt 또는
    다른 컨테이너 형식을 사용할 수 없습니다. 그러나 다음과 같은 경우 변경될 수 있습니다. OCI-호환 런타임은 향후에 표시되기 시작합니다.

개념과 코드를 살펴보기 전에 마지막으로 한 가지 더 말씀드리자면, Amazon EC2 컨테이너 서비스에는 추가 요금이 없습니다. 애플리케이션을 저장하고 실행하기 위해 생성하는 AWS 리소스(예: EC2 인스턴스 또는 EBS 볼륨)에 대한 비용을 지불하면 됩니다.

Amazon ECS 개념

다음은 ECS의 주요 개념에 대한 개요입니다:
amazon-ecs-concepts

  • 컨테이너 인스턴스: 컨테이너 실행을 위해 준비된 AMI 인스턴스입니다. 기본적으로 각 Amazon 인스턴스는 Amazon ECS에 최적화된 Linux AMI.
    ECS 컨테이너 서비스를 실행하는 데 권장되는 이미지입니다. 이 기본 이미지의 주요 구성 요소는 다음과 같습니다:

    • Amazon Linux AMI
    • Amazon ECS 컨테이너 에이전트 - ECS를 대신하여 컨테이너 라이프사이클을 관리하고 클러스터에 연결할 수 있도록 합니다.
    • Docker 엔진(이 글을 쓰는 현재 버전은 1.11.1)

    CoreOS, Suse 또는 Ubuntu와 같은 다른 이미지도 다음을 충족하도록 구성할 수 있습니다. 컨테이너 인스턴스 AMI 사양으로 설정합니다. 이렇게 할 수 있는 이유는 다음과 같습니다. ECS 에이전트 코드 는 오픈 소스로 제공됩니다.

  • 작업: 작업은 JSON 파일로 정의되며 하나 이상의 컨테이너 정의가 포함된 애플리케이션을 설명합니다. 일반적으로 레지스트리, 포트/볼륨 매핑 등의 Docker 이미지를 가리킵니다.
  • 서비스: ECS는 애플리케이션의 "원하는 상태"를 유지합니다. 이는 서비스. 서비스는 다음을 지정합니다.
    지정된 시간에 실행해야 하는 작업 정의의 인스턴스 수입니다. 서비스의 작업이 상태가 좋지 않거나 실행이 중지되면 서비스 스케줄러가 작업을 바운스합니다. 이는 원하는 상태와 실제 상태를 보장합니다.
    가 일치합니다. 서비스 내의 새로운 작업은 클러스터의 가용성 영역 간에 균형을 유지하며 ECS의 복원력을 제공합니다. 서비스 스케줄러는 서비스의 요구 사항을 충족할 수 있는 컨테이너 인스턴스를 파악하여 스케줄링합니다.
    를 최적의 가용성 영역(실행 중인 작업 수가 가장 적은 영역)의 유효한 컨테이너 인스턴스에서 실행합니다.

Amazon EC2 컨테이너 서비스 시작하기

로그인 AWS EC2 콘솔 을 클릭하고 EC2 컨테이너 서비스:
aws-ec2-container-1

를 클릭하고 시작하기 버튼을 눌러 애플리케이션을 정의합니다.

ECS 작업 만들기

ECS에서 Docker 워크로드는 작업으로 정의됩니다. 작업에는 여러 개의 컨테이너가 포함될 수 있습니다. 작업의 모든 컨테이너는 동일한 머신에 공동 배치됩니다. 그림과 같이 값을 입력합니다:
aws-ec2-container-2
몇 가지 항목
이 단계에서 지정합니다:

  • 작업 정의 는 하나 이상의 컨테이너 정의가 포함된 애플리케이션에 대한 설명입니다.
  • 컨테이너 이름은 이 작업의 일부로 시작되는 컨테이너에 부여될 이름입니다.
  • Image를 사용하면 이 애플리케이션의 일부로 컨테이너로 시작해야 하는 이미지를 하나 이상 지정할 수 있습니다. 여기에 지정된 이미지는 카우치베이스:최신 를 기본 이미지로 사용하고 Couchbase REST API 에
    서버를 구성합니다. 도커파일 를 클릭하면 이 이미지의 준비 방법에 대한 자세한 내용을 확인할 수 있습니다.
  • 최대 메모리는 컨테이너에 할당해야 하는 메모리입니다( -m Docker CLI 스위치). 카우치베이스는 개발 환경에서 실행하는 데 1GB가 필요하므로 여기에 지정되어 있습니다.
  • 마지막으로 포트 매핑(-p 를 클릭합니다.) 포트 8091은 Couchbase 관리를 위해 필요합니다.

이에 대한 자세한 내용은 다음에서 확인할 수 있습니다. 작업 정의 매개변수.

ECS 서비스 만들기

를 클릭합니다. 다음 단계 를 클릭하여 서비스를 구성합니다.
aws-ec2-container-3

서비스 이름을 입력합니다. 여기에서 원하는 상태를 지정할 수 있습니다. 지금은 간단하게 단일 노드 Couchbase 컨테이너를 실행하겠습니다. 그리고 원하는 상태는 단일 컨테이너를 실행하므로 ELB가 필요하지 않습니다. 이에 대한 자세한 내용은 다음을 참조하세요.
in 서비스 정의 매개변수.

ECS 클러스터 생성

작업은 컨테이너 인스턴스에서 실행되며, 이러한 인스턴스는 클러스터에 등록해야 합니다. 이렇게 하면 나중에 더 많은 컨테이너를 실행할 수 있도록 클러스터를 확장/축소할 수 있습니다. 클러스터에서 다음 단계 를 클릭해 클러스터를 구성합니다.

aws-ec2-container-4

이 이미지에서:

  • 기본 클러스터 이름을 사용합니다.
  • 컨테이너 인스턴스의 균일한 클러스터가 생성됩니다. m3.medium 는 초기 개발 단계에서 카우치베이스 노드를 실행하기에 적합한 크기입니다. A c3.xlarge 또는 더 큰 이미지가
    를 프로덕션에 사용할 수 있습니다. 다음 내용을 반드시 읽어보세요. 카우치베이스 요구 사항 에서 최소 및 권장 하드웨어와 소프트웨어 요구 사항을 확인하세요.
  • 이전에 생성한 보안 키를 선택합니다. 이렇게 하면 컨테이너 인스턴스에 대한 ssh 연결을 열 수 있습니다.
  • ECS 에이전트가 ECS 서비스와 통신할 수 있도록 새로운 IAM 역할이 만들어집니다.

클러스터의 컨테이너 인스턴스는 여러 가용성 영역에 걸쳐 있을 수 있으며 ELB로 균형을 맞출 수 있습니다. 지정된 모든 옵션을 검토하세요:
aws-ec2-container-5
클릭
on 인스턴스 시작 및 서비스 실행 버튼을 클릭하여 서비스를 시작합니다. 서비스가 생성되면 다음과 같은 상태가 표시됩니다:
aws-ec2-container-6

출력에는 클러스터, 서비스 및 작업 정의가 생성되었음을 보여줍니다. 인스턴스가 프로비저닝 및 초기화되고 작업이 실행되는 데는 몇 분 정도 걸립니다.

ECS 서비스 및 작업 보기

를 클릭합니다. 서비스 보기 버튼을 클릭하면 새로 생성된 서비스를 확인할 수 있습니다.

aws-ec2-container-7

이 이미지에는 몇 가지 사항이 있습니다:

  • 서비스에 작업 정의가 표시됩니다. 카우치베이스:6. 각 서비스에는 작업 정의가 할당되며 여러 버전은 뒤에 오는 번호로 표시됩니다. 이 경우 몇 가지 버전이 더 일찍 만들어졌지만 그렇지 않은 경우
    버전 번호는 1.
  • 원함 및 실행 횟수는 1로 표시됩니다.
  • 최소 정상 비율 그리고 최대 퍼센트 는 새 버전의 작업 정의를 배포해야 하는 경우에 사용됩니다. 100% 및 200%에 해당하는 값을 사용하면 작업의 새 버전이 먼저 배포됩니다.
    로 변경되며 이전 버전은 종료됩니다. 다음 블로그에서 이 숫자에 대해 자세히 살펴보겠습니다.
  • 실행 중인 작업이 화면 하단에 표시됩니다. 실행 중인 작업에 대해 자세히 알아보려면 UUID를 클릭합니다.

aws-ec2-container-8

작업 정의에는 실행 중인 EC2 인스턴스, 현재 상태, 포트 매핑 및 기타 여러 유용한 정보가 표시됩니다. 우리가 살펴봐야 할 중요한 부분은 외부 링크. 이 URL은 Couchbase 웹 콘솔에서 다음과 같이 작동합니다.
에 액세스할 수 있어야 합니다.

카우치베이스 웹 콘솔

이 링크를 클릭하면 다음과 같은 새 탭이 열립니다. 카우치베이스 웹 콘솔:
aws-ec2-container-10

로그인 정보를 다음과 같이 입력합니다. 관리자 로 설정하고 비밀번호는 비밀번호. 이러한 구성은 아룽업타/카우치베이스 이미지. 그리고 여기
카우치베이스 웹 콘솔의 모든 것을 확인하세요!

 aws-ec2-container

이 블로그에서는 다음을 사용하여 카우치베이스 도커 컨테이너를 실행하는 방법을 설명합니다. Amazon ECS.

향후 블로그에서는 ...

  • ECS를 사용하여 Couchbase 클러스터 설정하기
  • Docker Compose를 사용하여 멀티 컨테이너 애플리케이션 배포(이제 V2가 지원됩니다.)
  • CLI를 사용하여 ECS 클러스터 설정

Amazon ECS 및 Couchbase 레퍼런스

작성자

게시자 Arun Gupta, 개발자 지원 부문 부사장, Couchbase

아룬 굽타는 Couchbase의 개발자 지원 담당 부사장입니다. 그는 Sun, Oracle, Red Hat에서 10년 이상 개발자 커뮤니티를 구축하고 이끌었습니다. 그는 콘텐츠, 마케팅 캠페인 및 프로그램의 전략, 계획 및 실행을 개발 및 실행하는 교차 기능 팀을 이끄는 데 있어 깊은 전문성을 보유하고 있습니다. 그 전에는 Sun에서 엔지니어링 팀을 이끌었으며 Java EE 팀의 창립 멤버입니다. Gupta는 기술에 관한 블로그 게시물을 2,000개 이상 작성했습니다. 40여 개국에서 수많은 주제에 대해 광범위한 강연 경험을 가지고 있으며, 3년 연속 JavaOne Rock Star로 선정되었습니다. 또한 미국에서 Devoxx4Kids 지부를 설립하여 어린이를 대상으로 한 기술 교육을 지속적으로 장려하고 있습니다. 기술에 관한 여러 권의 책을 저술했으며, 열렬한 마라토너이자 지구를 횡단하는 사람, Java 챔피언, JUG 리더, NetBeans 드림팀 멤버, Docker 캡틴이기도 한 그는 @arungupta에서 쉽게 만나볼 수 있습니다.

댓글 하나

  1. 안녕하세요 아룬,

    카우치베이스 도커 리포지토리와 공식 카우치베이스 도커의 차이점이 뭔지 알고 싶어요. https://hub.docker.com/r/_/couchbase/? 클러스터 크로스 AZ를 실행해 본 경험이 있나요?

    Tiger

  2. 안녕하세요 아룬,

    AWS에 카우치베이스 도커 컨테이너를 성공적으로 배포했습니다. 로그인하여 Couchbase UI를 사용할 수 있습니다. 그러나 내 로컬 컴퓨터에서 실행 중인 자바 코드에서 Couchbase에 연결할 수 없습니다.
    스프링 부트 스프링 데이터 자바 프레임워크뿐만 아니라 CouchbaseClient를 사용하여 연결을 시도해 보았습니다.

    오류는 다음과 같습니다:

    유효한 버킷 구성을 가져올 수 없습니다.
    2018-12-09 19:04:12.035 WARN com.couchbase.client.vbucket.ConfigProviderHTTP: URI 연결 문제 http://asadss.dsdsad.asd4:8091/pools/default ...건너뛰기

  3. 안녕하세요 아룬,

    내 의견을 무시하세요. TCP 통신을 위해 포트 8091-8093 및 11210을 사용할 수 있도록 ECS 서비스에서 인바운드 규칙을 만들지 못했습니다. 규칙을 설정한 후 이제 연결할 수 있습니다.

  4. 이후에는 컨테이너를 다시 시작하면 컨테이너의 IP 주소가 변경되므로 위의 접근 방식이 작동하지 않습니다.

    CloudFormation을 사용하여 ECS 클러스터, 작업 및 서비스를 롤아웃하는 경우, CB 컨테이너에 할당된 호스트 이름을 미리 예측할 수 없습니다.

    참조:
    https://github.com/couchbase/docker/issues/82
    https://github.com/couchbase/kubernetes/issues/27

  5. 프라이빗 서브넷과 여러 ECS 컨테이너 인스턴스를 사용하여 ECS의 Couchbase 클러스터에 보다 고급 배포를 하려면 체크아웃을 확인하세요:
    https://anton.belodedenko.me/couchbase-aws-ecs-docker/

    특히 동적인 클라우드 환경에서 IP 주소를 변경하는 데에는 몇 가지 문제가 있습니다.

    - ab1

댓글 남기기