Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

2,356 views

Published on

컨테이너를 활용하여 마이크로서비스를 구성할 때는 효과적으로 컨테이너 및 서비스를 관리할 수 있는 방법이 필요합니다. 본 세션에서는 유연하게 컨테이너 환경을 관리/모니터링 할 수 있는 Amazon EC2 Container Service 및 EC2 Container Registry를 소개합니다. 아울러 Amazon ECS/ECR 환경에서 효과적인 자원 및 로그 관리, 마이크로서비스 관리에 대해서 자세히 살펴봅니다.

Published in: Technology

Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)

  1. 1. © 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 김기완, 솔루션즈 아키텍트 2017년 11월 1일 Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기
  2. 2. 강연 중 질문하는 법 자신이 질문한 내역이 표시되며, 전체 공개로 답변된 내용은 검은색, 질문자 본인에게만 공개로 답변된 내용은 붉은 색으로 돌아옵니다.
  3. 3. 본 세션의 주요 주제 • 마이크로서비스 아키텍쳐 이해 • 도커 컨테이너에 대하여 • Amazon EC2 Container Service • Amazon EC2 Container Registry • AWS에서 Service Discovery 구성하기 • ECS/ECR 기반의 DevOps 환경
  4. 4. 마이크로서비스 아키텍쳐
  5. 5. 마이크로서비스 아키텍쳐란? In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies. James Lewis & Martin Fowler, https://martinfowler.com/articles/microservices.html Monolithic vs. Microservice Libraries vs. Services 개별적인 기능별로 구성된 팀 vs. 비즈니스 중심의, 기능이 섞여 있는 서비스 단위 팀 차세대 vs. 소리소문 없는 끊임없는 기능 업데이트
  6. 6. 마이크로서비스 아키텍쳐의 이점 • 빠른 개발 속도 : 개발 언어 선택의 자유로움, 서비스 팀의 역량만으로 가능 • 빠른 배포 속도 및 병렬 배포 : 각 마이크로서비스간 독립된 배포 파이프라인 (CI/CD) • DevOps팀과 통합된 운영 : 서비스에 대한 Ownership! • 확장성, 가용성 : 마이크로서비스 특성에 맞는 확장성/가용성 설계 • 비즈니스 도메인과 밀접하게 연결 : Lean Cycle
  7. 7. 마이크로서비스 아키텍쳐 공통 구성 요소 • 모든 서비스들에 적용되는 공통 요소들 : • 서비스 등록 및 제거 (Registration/Deregistration) • 서비스 검색 (Discovery) 및 가용성 관리 (Healthiness) • 서비스 메타데이터 관리 (Oauth, …) • 서비스 버전 관리 • 서비스 별 Cache 관리 • 빠르고 효율적인 배포 환경 관리 • 자동화된 관리 및 모니터링
  8. 8. 마이크로서비스 설계의 고려 사항 • 모든 마이크로서비스는 : • 탄력적(Elastic)이어야 함 (다른 서비스들과는 무관한 스케일 업/다운) • 단위 리소스의 장애를 견디어야 함 (Resilient) • 통일된 API 인터페이스를 가져야 함 (Composable) • 작게 유지되어야 함 (Minimal) • 다른 서비스들과는 독립적이어야 함 (Complete)
  9. 9. 마이크로서비스 구성 요소 Client Data Store DiscoveryGateway Business Domain Microservices API
  10. 10. 마이크로서비스 구성 요소 + DevOps Client Data Store DiscoveryGateway Business Domain Version Control Repository Continuous Integration Continuous Delivery Microservices API DevOps Pipeline
  11. 11. 마이크로서비스 구성 요소 + DevOps Client Data Store DiscoveryGateway Business Domain Version Control Repository Continuous Integration Continuous Delivery Microservices API DevOps Pipeline API Gateway Elastic Load Balancing Amazon ECSElastic Beanstalk Lambda DynamoDB RDS AWS CodeCommit Amazon ECR AWS CodeDeploy AWS CodeBuild AWS CodePipeline AWS CodeStar AWS X-Ray
  12. 12. 도커 컨테이너
  13. 13. 마이크로서비스 vs. 도커 컨테이너 “Capital One은 빠르게 클라우드에 최적화된 마이크로서비스 아키텍쳐를 받아들이고 있으며, 새로운 워크로드 및 기존의 워크로드에도 적용해 나가고 있습니다. 마이크로서비스 적용을 고도화하고, 클라우드 자원들의 효율성을 높이며 인프라스트럭쳐로부터 어플리케이션 레이어를 분리하기 위해서 Docker를 사용하여 워크로드들을 컨테이너화 (Containerize)하기 시작하였고, Amazon EC2 Container 서비스를 사용하여 컨테이너들을 관리하고 있습니다. 도커를 통하여 과거에는 수 분, 여러 시간, 여러 날들이 걸리던 배포를 수 초만에 어디든지 원하는 곳에 (Dev/QA/Performance/Prod) 배포할 수 있게 되었습니다.” https://aws.amazon.com/blogs/compute/microservice-delivery-with-amazon-ecs-and-application-load-balancers/ 도커 컨테이너는: • 작게 유지되고, • 빠르게 배포되며, • 스케일 업/다운이 쉽고 빠르며, • 인프라스트럭쳐에 대한 종속성이 없음 마이크로서비스는: • 작게 유지되어야 하고 (Minimal), • 빠르게 병렬로 배포되며, • 스케일 업/다운이 쉽고 빨라야 하며, • 서비스간의 종속성이 없어야 함
  14. 14. 하지만,,, Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS Server Guest OS
  15. 15. 도커를 마이크로서비스에 적용시 고려사항 1. 도커 컨테이너에 대한 Orchestration 2. 마이크로서비스를 사용하기 위한 배포 파이프라인 구성 3. 마이크로서비스에 대한 서비스 Discovery 방법 4. 마이크로서비스에 대한 모니터링 (가용성, 성능관리)
  16. 16. 도커 컨테이너에 대한 Orchestration • 도커 컨테이너에 대한 스케줄링 (배치? 서비스?) • 컨테이너 클러스터에 대한 자원 사용량 모니터링 및 자원 분배 • Auto Scaling / Load Balancing • 이미지 레파지토리 관리 Docker Swarm: https://docs.docker.com/docker-for-aws/ Kubernetes: https://aws.amazon.com/quickstart/architecture/heptio-kubernetes/ 오늘은 Amazon EC2 Container Service, EC2 Container Registry에 대해 자세히 알아봅니다!
  17. 17. Amazon EC2 Container Service
  18. 18. 시작하기 전에…
  19. 19. Amazon EC2 Container Service (ECS) 유연한 컨테이너 배치 기능 모든 규모의 컨테이너 관리 AWS 에서 플랫폼으로 통합 별도의 어플리케이션이 필요 없는 컨테이너 운영 매니지드 서비스
  20. 20. Amazon ECS 구성 요소 • 클러스터 • 작업이 실행되는 EC2 인스턴스의 함대 • 작업 정의 (Task Definitions) • 작업에 대한 컨테이너 및 환경의 정의 • 작업 (Task) • 인스턴스에서 실행되는 실제 컨테이너 작업 클러스터 관리 엔진 클러스터 리소스 및 작업 상태 관리 스케줄러 클러스터 상태를 고려한 작업 배치 에이전트 EC2 인스턴스 및 매니저와 통신
  21. 21. Amazon ECS 구성 요소: 클러스터 Docker Task EC2 instance Container Docker Task EC2 instance Task Docker EC2 instance Task AZ 1 AZ 2 Container Container Container
  22. 22. Amazon ECS 구성 요소: 클러스터 관리 엔진 Docker Task EC2 instance Container Docker Task EC2 instance Task Docker EC2 instance Task AZ 1 AZ 2 Container Container Container Cluster Management Engine
  23. 23. Amazon ECS 구성 요소: 클러스터 관리 엔진 Docker Task EC2 instance Container Docker Task EC2 instance Task Docker EC2 instance Task AZ 1 AZ 2 Container Container Container Cluster Management Engine ECS agentECS agentECS agent Agent Communication Service
  24. 24. Amazon ECS 아키텍쳐 ALB ALB AZ 1 AZ 2 user/scheduler Scheduler Cluster State Service Placement Engine Event Stream Internet ECS agent ECS agent ECS agent
  25. 25. Amazon ECS 구성 요소: 작업 정의 (Task Definition) Volume definitions Container definitions
  26. 26. Amazon ECS 구성 요소: 작업 정의 (Task Definition) ◉ AWS 관리 콘솔 u ECS u Task Definitions u Create new Task Definitions u Add container u Add volumes
  27. 27. Amazon ECS 구성 요소: 작업 정의 (Task Definition) ◉ AWS 관리 콘솔 u ECS u Task Definitions u Create new Task Definitions u Configure via JSON
  28. 28. Amazon ECS 구성 요소: 작업 (Task) Data Volume Containers 스케줄링 EC2 instance Volume definitions Container definitions • ECS 클러스터에서 업무를 수행하는 단위 • 관련 있는 하나 혹은 하나 이상의 컨테이너들의 모임 • ECS 클러스터에 속하는 인스턴스에 배포
  29. 29. Amazon ECS 구성 요소: 서비스 (Service) • 작업 정의와 작업 개수를 기반으로 클러스터 내 서비스 생성 • 설정한 작업 개수로 컨테이너 이상 시 자동 복구 • Elastic Load Balancing을 통한 컨테이너 부하 분산 설정 가능 • Auto Scaling 설정 가능
  30. 30. Amazon ECS 구성 요소: 서비스 (Service) ◉ AWS 관리 콘솔 u ECS u Clusters u Services u Create
  31. 31. Amazon ECS 구성 요소: 서비스 (Service) ◉ AWS 관리 콘솔 u ECS u Clusters u Services u Create
  32. 32. Amazon ECS: 스케줄링 – 컨테이너 배치 클러스터 제약 조건 커스텀 제약 조건 배치 전략 필터 적용 CPU, 메모리 및 포트 요구 사항 위치, 인스턴스 유형, AMI, 사용자 정의 속성 제약에 대한 필터링 배치 전략을 충족하는 인스턴스 식별 배치 할 최종 컨테이너 인스턴스 선택 Name Example AMI ID attribute:ecs.ami-id == ami- eca289fb Availability Zone attribute:ecs.availability- zone == us-east-1a Instance Type attribute:ecs.instance-type == t2.small Distinct Instances type=“distinctInstance” Custom attribute:stack == prod
  33. 33. Amazon ECS: 스케줄링 – 컨테이너 배치 전략 Binpacking Spread Affinity Distinct Instance
  34. 34. Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (1) g2.2xlarge t2.small g2.2xlarge g2.2xlarge 특정 인스턴스 타입에 배치
  35. 35. Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (2) 특정 인스턴스 타입 및 AZ를 선택하여 배포 g2.2xlarge t2.small t2.micro t2.medium t2.medium t2.small g2.2xlarge t2.small t2.small t2.medium us-east-1aus-east-1d
  36. 36. Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (3) Availability Zone별 분산 (spread) g2.2xlarge t2.small t2.micro t2.medium t2.medium t2.small g2.2xlarge t2.small us-east-1aus-east-1d g2.2xlarge t2.medium t2.micro t2.small us-east-1c
  37. 37. Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (4) Availability Zone별 분산 후 Binpack (메모리에 따라) g2.2xlarge t2.small t2.micro t2.medium t2.medium t2.small g2.2xlarge t2.small us-east-1aus-east-1d g2.2xlarge t2.medium t2.micro t2.small us-east-1c
  38. 38. Amazon ECS: 스케줄링 – 컨테이너 배치 전략 (6) t2.medium g2.2xlarge t2.micro t2.small t2.small t2.small g2.2xlarge t2.small t2.small t2.small g2.2xlarge t2.small
  39. 39. Amazon ECS: 스케줄링 – 컨테이너 배치 예 ◉ AWS 관리 콘솔 u ECS u Clusters u Services u Create u Task Placement
  40. 40. Amazon ECS: 모니터링 로깅 – ECS 메트릭 • 2개 Dimensions • ClusterName • ServiceName • 4개 지표 • CPUReservation • MemoryReservation • CPUUtilization • MemoryUtilization Container Instance … Cluster Task definition Task Service CloudWatch ECS Metrics #docker top CloudWatch EC2 Metrics Container Instance
  41. 41. Amazon ECS: 모니터링 로깅 – ECS 클러스터 모니터링 • Reservation • 클러스터 인스턴스의 task들이 예약한 CPU,메모리의 백분율 • Utilization • 클러스터 인스턴스의 task들이 사용한 CPU,메모리의 백분율 (Total CPU units / MiB of memory used by tasks in cluster) ------------------------------------------------------------------------------------------- x 100 (Total CPU units / MiB of memory registered by container instances in cluster) (Total CPU units / MiB of memory reserved by tasks in cluster) ------------------------------------------------------------------------------------------- x 100 (Total CPU units / MiB of memory registered by container instances in cluster)
  42. 42. Amazon ECS: 모니터링 로깅 – ECS 클러스터 모니터링 ◉ AWS 관리 콘솔 u ECS u Clusters u Metrics
  43. 43. Amazon ECS: 모니터링 로깅 – ECS 서비스 모니터링 • Utilization • CPU, 메모리 기준 서비스에 지정된 Task가 사용하는 CPU 및 메모리의 백분율 예) c4.large 인스턴스 (2,048 CPU, 3,768 MiB) ---------------------------------------------- 서비스 내 Task1개 (512 CPU, 1024MiB 예약) 일정 기간 Task가 CPU 단위 2,048개 사용, 메모리 512MiB 사용 -> CPU 사용률 400%, 메모리 사용률 50% 보고됨 (Total CPU units / MiB of memory used by tasks in cluster) ----------------------------------------------------------------------------------------------------- x 100 (Total CPU units / MiB of memory reserved in task definition) x (number of tasks in service)
  44. 44. Amazon ECS: 모니터링 로깅 – ECS 서비스 모니터링 ◉ AWS 관리 콘솔 u ECS u Clusters u Services u Metrics
  45. 45. Amazon ECS: 모니터링 로깅 – CloudWatch Logs를 활용한 로그 처리 CloudWatch Logs Amazon S3 Amazon Kinesis AWS Lambda Amazon Elasticsearch Service Amazon ECS Store Stream Process Search CloudWatch Logs CloudWatch Logs CloudWatch Logs
  46. 46. Amazon ECS: 모니터링 로깅 – CloudWatch Logs logging driver
  47. 47. Amazon ECS: 오토 스케일링
  48. 48. Amazon ECS: 오토 스케일링: 컨테이너 드레이닝 ECS cluster instances Auto Scaling “scale in” event
  49. 49. Amazon ECS: 오토 스케일링: 컨테이너 드레이닝 ECS cluster instances Amazon SNS Auto Scaling Lifecycle hook
  50. 50. Amazon ECS: 오토 스케일링: 컨테이너 드레이닝 ECS cluster instances Amazon ECS Lambda function Amazon SNS Set (instance_ID, “draining”)
  51. 51. Amazon ECS: 오토 스케일링: 컨테이너 드레이닝 ECS cluster instances Amazon ECS Lambda function Amazon SNS Set (instance_ID, “draining”) If ECSDescribeTasks(instance_ID) == NULL CompleteLifecycleAction(instance_ID) Else Print(“Still running some tasks”)
  52. 52. Amazon ECS: 오토 스케일링: 컨테이너 드레이닝 ECS cluster instances Amazon ECS Lambda function Amazon SNS Set (instance_ID, “draining”) If ECSDescribeTasks(instance_ID) == NULL CompleteLifecycleAction(instance_ID) Else Print(“Still running some tasks”) Complete Lifecycle hook
  53. 53. Amazon ECS: 로드 밸런싱: ELB & ALB • ELB port와 컨테이너 port의 고정적 관계 필요 • 예) ELB port 80 -> 컨테이너 port 3030 매핑가능 ELB port 80 -> 컨테이너 port 3030과 다른 컨테이너 port 4040 동시 매핑 불가 Classic Load Balancer Application Load Balancer 동적 호스트 Port 매핑 지원 예) 컨테이너 port 80 지정 -> 호스트 port 0 지정 시 임시 포트 범위 (Amazon ECS AMI 기준 32768 ~ 61000) 에서 포트 동적 할당 -> Port 기반 라우팅, 우선 순위 규칙 지원으로 다른 여러 서비스에 단일 ALB 동일한 리스너 port 사용 가능
  54. 54. Amazon ECS: 로드 밸런싱: ELB & ALB HTTP/HTTPS TCP/SSL ELB example.com/app2 example.com/app1 app1 app2 app1/ app2 ELB EC2 Instance EC2 Instance EC2 Instance EC2 Instance EC2 Instance EC2 Instance ALB
  55. 55. Amazon ECS: 로드 밸런싱: ALB를 활용한 ECS 컨테이너 로드 밸런싱 Container Instance Container Container Target Group Container Container Target GroupALB
  56. 56. Amazon EC2 Container Registry
  57. 57. Amazon EC2 Container Registry (ECR) • 보안 • IAM 리소스 기반 정책 활용 • 전송 및 저장시 이미지 암호화 (HTTPS, SSE) • 손쉬운 이미지 관리 및 배포 • ECS와 통합 • 독립적인 서비스 • Docker CLI와 통합 • 관리 콘솔 & AWS CLI를 통한 제어 • 가용성 & 성능 • S3 기반 • Regional Endpoints • 수백 건의 동시 pull처리
  58. 58. Amazon ECR 셋업 # Authenticate Docker to your Amazon ECR registry > aws ecr get-login > docker login -u AWS -p <password> -e none https://<aws_account_id>.dkr.ecr.us- east-1.amazonaws.com > docker login -u AWS -p <password> -e none https://<aws_account_id>.dkr.ecr.us- east-1.amazonaws.com # Create a repository called ecr-demo > aws ecr create-repository --repository-name ecr-demo # Push an image to your repository > docker push <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/ecr-demo:v1
  59. 59. Amazon ECR Docker Credential Helper • https://github.com/awslabs/amazon-ecr-credential- helper • docker-credential-ecr-login 바이너리를 PATH에 설정 • ~/.docker/config.json 파일 설정: { "credsStore": "ecr-login" } • Push and pull images from ECR without docker login
  60. 60. Service Discovery options on AWS
  61. 61. Service Discovery 구성 요소 Registry Health Checks Metadata store
  62. 62. Service Discovery: ELB 사용 • CloudWatch Events, Lambda 및 Route53 private hosted zone을 사용하여 자동으로 구성 • Route53이 service registry로 사용됨 • ECS의 Service API에 따라 Lambda를 사용하여 레코드를 추가/삭제
  63. 63. Service Discovery: ELB 사용 https://github.com/awslabs/ecs-refarch-service-discovery
  64. 64. Service Discovery: ELB 사용
  65. 65. Service Discovery: DNS 사용 • 컨테이너 인스턴스에 agent를 설치하여 사용 (open source, ecssd_agent.go) • Agent가 service name, IP, port를 route53 private hosted zone에 추가 (SRV record) • lambda_health_check.py를 통해 문제가 있는 service를 cleanup (scheduled lambda function)
  66. 66. Service Discovery: DNS 사용 https://github.com/awslabs/service-discovery-ecs-dns
  67. 67. Service Discovery: DNS 사용
  68. 68. Service Discovery: 여러 AWS Service 활용 Route53Registry Health Checks Metadata store DynamoDB
  69. 69. Service Discovery: 여러 AWS Service 활용 Registry Health Checks Metadata store DynamoDB ELB Parameter Store
  70. 70. Service Discovery: 3rd party tools • Weaveworks • Consul • etcd • Zookeeper • Eureka • and more
  71. 71. Service Discovery: Consul
  72. 72. Service Discovery: Consul
  73. 73. ECS/ECR 기반의 DevOps 환경
  74. 74. Amazon ECS Continuous Deployment https://github.com/awslabs/ecs-refarch-continuous-deployment
  75. 75. 질문에 대한 답변 드립니다. 발표자료/녹화영상 제공합니다. http://bit.ly/awskr-webinar 더 나은 세미나를 위해 여러분의 의견을 남겨 주세요!

×