티스토리 뷰
AWS -Containers에 들어가기전에 ...
- 컨테이너(Container) 란?
애플리케이션의 코드, 구성 및 종속성을 하나의 객체로 패키징하는 표준화된 방식을 제공
컨테이너는 서버에 설치된 운영 체제를 공유하며 리소스가 격리된 프로세스 형태로 실행되므로 환경에 상관 없이 빠르고 안정적이며 일관된 배포를 보장
- 컨테이너(Container) 사용 이유
개발자가 애플리케이션을 패키징하고 배포하기 위한 방식
보안 : AWS는 210개의 보안, 규정준수 및 거버넌스 서비스와 주요 기능 제공 , 컨테이너간 보안 강력 분리, 최신 보안 업데이트 실행
안정성 : 22개 리전에 걸쳐 있는 69개 가용영역(AZ)을 갖춘 최고의 글로벌 인프라에서 실행
다양한 옵션 : 서버리스 컴퓨팅 ? AWS Fargate / 컴퓨터 환경의 설치, 구성, 관리 제어 필요? Amazon EC2 / Amazon Elastic Container(ECS), Amazon Elastic Kubernetes Service(EKS)? 컨데이너 오케스트레이터
AWS 통합 : AWS 컨테이너 서비스는 기본적으로 AWS와 깊이 통합되어 있음. AWS 클라우드 넓고 깊게 활용 가능
- Docker & Kubernetes (블로그 개념 정리 바로가기)
AWS에서는 Amazon EC2를 사용해 Kubernetes 인프라 직접 실행 및 관리 가능
Amazon EKS 사용해 자동으로 프로비저닝 되는 관리형 Kubernetes 컨트롤 플레인을 구현 가능
cf) 용어정리
프로비저닝(provisioning)? 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요한 시스템을 즉시 사용할 수 있는 상태로 미리 준비해두는 것
사용사례 | AWS 서비스 |
컨테이너 이미지 저장, 암호화 및 관리 | Amazon Elastic Container Registry(ECR) |
컨테이너식 애플리케이션 실행 또는 마이크로서비스 구축 | Amazon Elastic Container Service(ECS) |
자체 데이터 센터에서 Amazon ECS 실행 | Amazon ECS Anywhere |
Kubernetes로 컨테이너 관리 | Amazon Elastic Kubernetes Service(EKS) |
자체 인프라에서 Kubernetes 클러스터를 생성하고 운영 | Amazon EKS Anywhere |
Amazon EKS를 구동하는 Kubernetes 배포 실행 | Amazon EKS Distro |
컨테이너 및 서비리스 배포의 자동화된 관리 | AWS Proton |
서버를 관리하지 않고 컨테이너를 실행 | AWS Fargate |
서버 수준 제어를 통해 컨테이너 실행 | Amazon Elastic Compute Cloud(EC2) |
기존 애플리케이션 컨테이너화 및 마이그레이션 | AWS App2Container |
컨테이너식 애플리케이션을 빠르게 시작하고 관리 | AWS Copilot |
Amazon - Elastic Container Registry (ECR)
"컨테이너 이미지 저장, 암호화 및 관리"
- Amazon Elastic Container Registry (ECR)
=> 컨테이너 이미지 저장 및 암호화 관리
즉, 개발자가 Docker 컨테이너 이미지를 손쉽게 저장, 관리 및 배포할 수 있게 해주는 완전 관리형 컨테이너 레지스트리
이미지를 가용성이 뛰어난 고성능 아키텍처에 호스팅함으로써 컨테이너 애플리케이션용의 이미지를 안정적으로 배포할 수 있음
도커 이미지를 Amazon EC2에 옮겨서 시행 가능
=> 관리형 AWS 도커 레지스트리 서비스
도커 CLI를 사용하여 이미지 푸시, 가져오기를 할 수 있음
AWS IAM를 사용하여 리소스 기반 권한으로 프라이빗 도커 리포지토리를 지원하므로 특정 사용자나 Amazon EC2 인스턴스가 리포지토리 및 이미지에 액세스할 수 있음
cf) 용어정리
- Container Registry(컨테이너 레지스트리)
쿠버네티스, DevOps, 컨테이너 기반 애플리케이션 개발을 위한 컨테이너 이미지를 저장하는데 사용되는 Repository or Repository Collection
Container Registry의 유형 - public / private
Amazon - Elastic Container Service(Amazon ECS)
"컨테이너식 애플리케이션 실행 또는 마이크로서비스 구축"
- Amazon Elastic Container Service(Amazon ECS)
클러스터에서 컨테이너를 쉽게 실행, 중지 및 관리 할 수 있게 해주는 확장성과 속도가 뛰어난 컨테이너 관리 서비스, 즉 Docker 컨테이너를 이용하여 인프라 환경을 좀 더 편리하게 운영하고 관리할 수 있도록 해주는 서비스
AWS에서 Docker Container Application을 쉽게 실행, 확장 및 보호 할 수 있음
Local에서 Container로 packaging된 Application은 Amazon ECS가 관리하는 컨테이너와 같은 방식으로 배포하고 실행
자체 컨테이너 오케스트레이션과 클러스터 관리 인프라를 설치, 운영, 확장할 필요가 없기 때문에 컨테이너화된 애플리케이션의 리소스 요구와 가용성 요구 사항에 집중가능
- Amazon ECS 기능
1. AWS Fargate 지원
2. 개발
1) Docker 지원 - Local -> Container packaging할 때 구성 변경 필요 없이 Amazon ECS에 배포되어 실행
2) Windows 컨테이너 호환성
3) AWS Copliot CLI - Amazon ECS 및 AWS Fargate에서 프로덕션 준비 컨테이너식 애플리케이션을 구축 릴리스 및 운영하는데 사용되는 개발자용 도구
4) Repository 지원
3. 관리
1) 작업정의 - 작업 정의라고 하는 선언형 JSON 템플릿을 통해 작업 정의 가능
Docker Repository 및 이미지, 메모리 및 CPU 요구 사항 공유 데이터 볼륨, 컨테이너가 서로 연결되는 방식 등 작업에 필요한 하나 이상의 컨테이너 작업 정의 내에서 지정 가능
2) 프로그래밍 방식 제어
3) 컨테이너 배포
- Amazon ECS 이점
1) 서버리스 옵션 - Fargate 지원하여 컨테이너에 적합한 서버리스 컴퓨팅 제공 , 서버를 프로비저닝하고 관리할 필요 없어 애플리케이션 별로 리소스 지정하고 관련 비용 지불, 계획적으로 애플리케이션 격리함으로서 보안성능 향상
2) Capacity Providers를 통해 애플리케이션 집중 - 인프라 대신 애플리케이션을 구축하고 관리하는 집중 , 사용시 애플리케이션 수요에 따라 애플리케이션에 할당되는 컴퓨팅 용량 결정, EC2 및 Fargate를 애플리케이션에 대한 스팟 및 온디맨드 요금과 조합하여 유연하게 사용 가능
3) 대규모 성능 지원 - 수천개의 컨테이너 빠르게 시작 가능
4) 보안
5) 안정성
- ECS 기본적인 구성요소 - 출처 링크
1. Cluster - ECS의 가장 기본적인 단위, 논리적인 개념으로 Service나 Task가 실행되는 공간, Cluster가 없으면 ECS에서 Container을 을 실행할 수 없음. 기본적으로 컴퓨팅 자원을 포함하지 않음
2. Container Instance - Cluster에서 Service나 Task를 실행하기 위해 사용하는 컴퓨팅 자원
3. Image - ECS는 컨테이너 오케이스트레이션 도구로 컨테이너 관리함. 컨테이너는 이미지로부터 실행됨. 이미지는 특정 애플리케이션을 실행가능한 환경을 재현하기 위한 파일 집합 , ECS 사용시 이미지 = 도커이미지, 이미지빌드파일 Docker file로 관리, Docker Hub나 ECR(Elastic Container Registry)에 업로드해서 사용
4. Task Definition - ECS의 최소 실행단위인 Task를 실행하기 위한 설정을 저장하고 있는 리소스, 하나 혹은 둘 이상 컨테이너 정보를 포함, Container별로 실행하고자 하는 이미지 저장, CPU, RAM과 같은 리소스 제한 정보와 컨테이너 실행에 필요한 옵션 지정
5. Task - ECS의 최소 실행 단위, 하나 혹은 둘 이상의 Container 묶음
6. Service - Task를 지속적으로 관리하는 단위, Cluster내에서 Task가 지정된 수만큼 지속적으로 실행될 수 있도록 관리. Load Balancing과 연동해서 실행중인 Task를 찾아 자동적으로 로드 밸런서에 등록, 제거
Amazon - EKS "Kubernetes로 컨테이너 관리"
- Amazon Elastic Kubernetes Service(Amazon EKS)
AWS 클라우드 또는 온프레미스에서 Kubernetes 애플리케이션을 시작, 실행 및 조정할 수 있는 기능 제공
고가용성의 안전한 클러스터를 제공하는 데 도움이 되며 패치 적용, 노드 프로비저닝 및 업데이트와 같은 주요 태스크를 자동화
코드를 리팩터링하지 않고 표준 Kubernetes 애플리케이션을 EKS로 손쉽게 마이그레이션 할 수 있음
모든 환경의 운영을 표준화 가능
- 이점
1) 가용성 및 가관측성 개선
여러 가용 영역에 걸쳐 Kubernetes 제어 플레인 실행, 비정상 제어 플레인 노드를 자동으로 탐지하여 교체하고, 온디맨드( 특정 가용 영역의 Amazon EC2 인스턴스에 대해 원하는 기간만큼 컴퓨팅 용량 예약하는 것) 에서 가동 중단 없이 업그레이드 및 패치 제공
99.95%의 가동률 SLA(Service Level Agreement, 서비스 수준 계약) 를 제공
2) 리소스를 효율적으로 프로비저닝하고 확장
컴퓨팅 용량을 별도로 프로비저닝할 필요 없이 Kubernetes 애플리케이션을 확장 가능
AWS Fargate를 선택하여 애플리케이션에 사용할 온디맨드 서버리스 컴퓨팅을 자동으로 프로비저닝 가능
Amazon EC2 스팟 인스턴스에서 EKS 노드를 실행하면 비용을 추가로 절감하고 효율성을 개선
3) 더 안전한 Kubernetes 환경
최신 보안 패치를 클러스터 제어 플레인에 자동으로 적용
- 작동 방식
1) 클라우드에서 Amazon EKS를 사용하여 애플리케이션 배포
2) Amazon EKS Anywhere를 사용하여 애플리케이션 배포
3) 자체 도구를 사용하여 애플리케이션 배포
- 사용사례
1) 하이브리드 배포
하이브리드 환경의 Kubernetes 클러스터와 애플리케이션을 더 쉽게 관리
Amazon EKS Anywhere(2021년 제공 예정)를 사용하면 자체 데이터 센터와 AWS에서 Kubernetes를 실행
2) 일괄처리
EKS 클러스터에서 순차 또는 병렬 배치 워크로드를 실행
EKS를 사용하면 Amazon EC2, Fargate, 스팟 인스턴스 등 AWS 컴퓨팅 서비스 및 기능의 전체 범위에 걸쳐 배치 컴퓨팅 워크로드를 계획, 예약 및 실행
3) Machine Learning
EKS와 함께 Kubeflow를 사용하여 기계 학습 워크플로를 모델링하고 Inferentia와 같은 최신 EC2 GPU 기반 인스턴스를 사용하여 배포된 훈련 작업을 효율적으로 실행
4) Web Application
자동으로 확장 및 축소되고 여러 가용 영역에서 고가용성 구성으로 실행되는 웹 애플리케이션을 구축
AWS의 성능, 확장성, 안정성 및 가용성을 활용
웹 애플리케이션의 부하 분산을 위한 Application Load Balancer와 네트워킹을 위한 VPC와 같은 AWS 네트워킹 및 보안 서비스를 사용자 서비스와 바로 통합
AWS - App2Container "기존 애플리케이션 컨테이너화 및 마이그레이션"
AWS App2Container(A2C)
- 기존 애플리케이션을 컨테이너화하려면 애플리케이션 종속성 확인, dockerfiles 작성, 각 애플리케이션의 구축 및 배포 프로세스 설정 등과 같이 수많은 수작업이 필요 --> 온프레미스, EC2와 같은 다른 클라우드에서 코드 변경 없이 기존 애플리케이션을 컨테이너화하여 실행하는데 도움이 되는 새로운 명령줄 도구
- App2Container은 서버에서 실행되는 애플리케이션을 검색하고, 종속성을 식별하고, 관련 아티팩트를 생성하여 Amazon ECS와 Amazon EKS에 원활하게 배포
- 온프레미스 또는 클라우드의 가상 머신에서 실행되는 모든 애플리케이션의 인벤토리를 분석하고 구축
- 컨테이너화하려는 애플리케이션을 선택하기만 하면, A2C가 애플리케이션 아티팩트와 파악된 종속성을 컨테이너 이미지에 패키징하고 네트워크 포트를 구성하여 ECS 작업 및 Kubernetes 포드 정의를 생성
- CloudFormation을 통해 컨테이너화된 .NET 또는 Java 애플리케이션을 프로덕션으로 배포하는 데 필요한 클라우드 인프라와 CI/CD 파이프라인을 프로비저닝함
이점
1) 운영간소화 - 기존 애플리케이션을 컨테이너화하고 모니터링, 운영 및 소프트웨어 제공을 위한 단일 도구 세트로 표준화
2) 애플리케이션 현대화 가속화 - 컨테이너화하려면 컨테이너 이미지를 구성하고 배포하기 위해 애플리케이션 종속성, 네트워크 포트 구성 및 소프트웨어 제공 프로세스를 파악
3) 애플리케이션 확장 및 보안을 위한 모범 사례 - App2Container를 사용하면 올바른 네트워킹 및 보안 구성으로 프로비저닝된 클라우드에 기존 애플리케이션을 쉽게 배포
작동 방식
AWS App2Container 시작하기
$ sudo app2container init
출처
2. Amazon Elastic Kubernetes Service
3. Amazon - ECS
4. Amazon - ECR
6.
'Programming > Cloud' 카테고리의 다른 글
[Azure/Cloud] Microsoft Azure (0) | 2021.04.07 |
---|---|
[GCP/Cloud] Google Cloud Platform - 컴퓨팅 (0) | 2021.04.07 |
[AWS/Cloud] AWS - Networking & Content Delivery (0) | 2021.04.03 |
[AWS/Cloud] AWS - Storage (0) | 2021.04.03 |
[Cloud] 클라우드 서비스와 클라우드 컴퓨팅 서비스 종류 (0) | 2020.09.22 |