❓ Docker란?
- Docker는 소프트웨어 개발 플랫폼으로, 애플리케이션을 컨테이너로 패키징하여 배포하는 기술이다.
- 컨테이너는 애플리케이션이 실행될 환경을 모두 포함하고 있기 때문에, 어디에서 실행하든 동일한 결과를 보장한다.
- 이는 호환성 문제를 없애고, 예측 가능한 동작을 제공하여 개발자가 배포와 유지 관리에 소요되는 시간을 줄여준다.
- 또한, Docker는 모든 운영체제(OS)에서 동일한 방식으로 실행되며, 언어, 운영체제, 기술에 구애받지 않고 사용할 수 있다.
- Use case: 마이크로서비스 아키텍처, 리프트 앤 시프트(Lift-and-Shift) 전략으로 온프레미스에서 클라우드로 애플리케이션을 마이그레이션하는 상황에서 자주 사용된다.
🦾 Docker는 운영체제에서 어떻게 작동하는가?
- Docker는 운영체제에서 Docker 데몬(Docker Daemon)이라는 백그라운드 프로세스를 통해 컨테이너를 관리하고 실행한다.
- 예를 들어, EC2 인스턴스 또는 다른 서버에서 Docker를 실행하면, 여러 개의 컨테이너를 동시에 실행할 수 있다.
- 각 컨테이너는 독립적인 애플리케이션과 관련된 모든 실행 환경을 가지고 있어, 서로 간섭 없이 실행된다.
- 예시로 Java, Node.js, MySQL 등 다양한 기술을 사용하는 컨테이너들이 하나의 서버에서 동시에 실행될 수 있다.
이는 서버 리소스를 효율적으로 활용하고, 서로 다른 애플리케이션들이 안정적으로 동작하도록 보장한다.
💾 Docker 이미지 저장소
- Docker 이미지는 애플리케이션이 실행될 환경을 포함한 상태로 패키징된 파일이다.
- Docker 이미지는 Docker 리포지토리에 저장되며, 이는 Docker Hub 또는 Amazon ECR과 같은 퍼블릭 또는 프라이빗 리포지토리다.
- Docker Hub는 가장 널리 사용되는 퍼블릭 리포지토리로, 다양한 OS나 애플리케이션에 맞는 베이스 이미지를 찾을 수 있다.
- Amazon ECR(Elastic Container Registry)은 프라이빗 리포지토리로, 보안이 중요한 애플리케이션 이미지를 저장할 수 있으며, Amazon ECR Public Gallery를 통해 퍼블릭 이미지도 관리할 수 있다.
🆚 Docker와 가상 머신의 차이점
- Docker는 가상화 기술과 비슷한 면이 있지만, 완전한 가상화 기술은 X
- Docker는 호스트 운영체제의 자원을 공유하는 반면, 가상 머신(VM)은 하이퍼바이저(Hypervisor) 위에서 독립된 운영체제를 실행한다.
- 가상 머신에서는 각 애플리케이션이 게스트 운영체제(Guest OS)를 가지고 있어 무겁고 자원을 많이 소비한다.
- 반면, Docker는 경량 컨테이너를 사용해 호스트 운영체제의 자원을 공유하면서 여러 컨테이너를 동시에 실행할 수 있어 리소스 효율성이 뛰어나다.
- 그러나 가상 머신에 비해 보안성이 조금 낮을 수 있습니다. Docker는 자원을 공유하기 때문에, 여러 컨테이너 간의 분리와 보안이 완벽하지 않을 수 있다.
🆕 Docker 시작하기
- Docker를 사용하려면 먼저 Dockerfile을 작성해야 한다. Dockerfile은 베이스 이미지와 설치할 파일 또는 설정을 정의하는 파일이다.
- Dockerfile을 작성한 후, 이를 사용해 Docker 이미지를 빌드할 수 있다.
- 빌드된 이미지는 Docker Hub 또는 Amazon ECR과 같은 Docker 리포지토리에 푸시할 수 있으며, 나중에 이를 다시 가져와 실행할 수 있다.
- 가져온 Docker 이미지를 실행하면 Docker 컨테이너가 생성되고, 이 컨테이너 내에서 애플리케이션이 동작하게 된다.
- 그림 위치: Docker 이미지 생성과 실행 과정을 설명하는 다섯 번째 슬라이드의 다이어그램을 삽입.
👩🏻💼 AWS에서 Docker 컨테이너 관리
AWS는 Docker 컨테이너를 관리하기 위한 여러 서비스들을 제공한다.
- Amazon ECS(Elastic Container Service)
- Amazon에서 제공하는 컨테이너 관리 서비스로, Docker 컨테이너를 효율적으로 관리할 수 있는 플랫폼
- Amazon EKS(Elastic Kubernetes Service)
- 오픈 소스 컨테이너 관리 도구인 Kubernetes를 AWS에서 관리형으로 제공하는 서비스.
- AWS Fargate
- 서버리스 컨테이너 관리 서비스로, ECS와 EKS 모두에서 서버 인프라를 직접 관리할 필요 없이 컨테이너를 실행할 수 있는 플랫폼
- Amazon ECR
- Docker 이미지를 저장하고 관리할 수 있는 컨테이너 이미지 저장소 서비스
📌 ECS
Amazon ECS - EC2 시작 유형
- Amazon ECS는 Elastic Container Service로, Docker 컨테이너를 ECS 클러스터에서 실행한다.
- EC2 시작 유형은 인프라를 사용자가 직접 프로비저닝하고 관리해야 합니다. 즉, 사용자가 여러 EC2 인스턴스를 준비하여 ECS 클러스터에 연결해야 한다.
- 각 EC2 인스턴스는 ECS 에이전트를 실행하여 ECS 클러스터에 등록된다. 이때, AWS는 자동으로 컨테이너를 시작 및 중지하지만, 인프라 관리는 사용자가 직접 해야 한다.
- 새로운 Docker 컨테이너는 EC2 인스턴스들에 배포되며, 각 인스턴스에 있는 ECS 에이전트를 통해 클러스터에서 관리된다.
💡 Amazon ECS - Fargate 시작 유형
- Fargate는 AWS에서 제공하는 완전한 서버리스 방식의 컨테이너 실행 서비스
- 인프라를 직접 프로비저닝하거나 관리할 필요가 없으며, EC2 인스턴스를 관리하지 않는다.
- 사용자는 단순히 ECS 태스크 정의만 하면 되고, AWS는 이를 바탕으로 필요한 CPU와 메모리 자원을 자동으로 할당하여 ECS 태스크를 실행한다.
- Fargate의 큰 장점은 확장성이 뛰어나다는 것!! 태스크의 수만 증가시키면 쉽게 확장할 수 있으며, 이를 위해 EC2 인스턴스를 추가할 필요가 없다.
💡 Amazon ECS - IAM 역할
- EC2 인스턴스 프로필은 EC2 시작 유형에서만 사용되며, ECS 에이전트에 의해 활용된다.
- 이 프로필을 통해 ECS 서비스와 통신하고, ECR에서 Docker 이미지를 가져오거나, CloudWatch Logs에 로그를 전송할 수 있다.
- ECS 태스크 역할은 태스크가 실행될 때 적용되며, 서로 다른 서비스에 대한 권한을 태스크별로 정의할 수 있다. 예를 들어, 하나의 태스크는 S3에, 다른 태스크는 DynamoDB에 접근할 수 있다.
- 이 역할들은 태스크 정의에서 설정된다.
- Amazon ECS는 Elastic Container Service로, Docker 컨테이너를 ECS 클러스터에서 실행한다.
- EC2 시작 유형은 인프라를 사용자가 직접 프로비저닝하고 관리해야 합니다. 즉, 사용자가 여러 EC2 인스턴스를 준비하여 ECS 클러스터에 연결해야 한다.
- 각 EC2 인스턴스는 ECS 에이전트를 실행하여 ECS 클러스터에 등록된다. 이때, AWS는 자동으로 컨테이너를 시작 및 중지하지만, 인프라 관리는 사용자가 직접 해야 한다.
- 새로운 Docker 컨테이너는 EC2 인스턴스들에 배포되며, 각 인스턴스에 있는 ECS 에이전트를 통해 클러스터에서 관리된다.
💡 Amazon ECS - 로드 밸런서 통합
- 애플리케이션 로드 밸런서(ALB)는 대부분의 ECS 활용 사례에서 사용되며, HTTP 및 HTTPS 요청을 ECS 태스크로 분산시킨다.
- 네트워크 로드 밸런서(NLB)는 높은 성능이 요구되거나 PrivateLink와 같은 특정 요구사항을 처리할 때 권장된다.
- 클래식 로드 밸런서도 지원되지만, 고급 기능이 없고 Fargate와 함께 사용할 수 없기 때문에 권장되지 않는다.
💡 Amazon ECS - EFS를 통한 데이터 지속성
- Amazon EFS(Elastic File System)는 ECS 태스크에 파일 시스템을 마운트할 수 있는 네트워크 파일 시스템이다.
- EFS는 EC2 시작 유형과 Fargate 시작 유형 모두에서 사용할 수 있으며, 다중 가용 영역(AZ)에 걸쳐 데이터를 공유할 수 있다.
- Fargate와 EFS의 조합은 완전한 서버리스 방식의 지속 가능한 스토리지를 제공하여, 관리 부담을 줄이고, 사용량에 따른 요금만 청구된다.
- Use case: 여러 AZ에 걸쳐 실행되는 컨테이너에서 데이터를 공유해야 할 때 사용된다.
💡 ECS 서비스 자동 확장(Auto Scaling)
- Amazon ECS에서는 자동 확장(Auto Scaling) 기능을 통해 서비스의 ECS 태스크 수를 자동으로 증가시키거나 감소시킬 수 있다.
- 자동 확장은 AWS 애플리케이션 자동 확장 기능을 사용하여 설정되며, 세 가지 주요 지표에 따라 스케일링을 할 수 있다:
- CPU 사용률: ECS 서비스의 평균 CPU 사용률이 증가할 때 태스크 수를 확장한다.
- 메모리 사용률: RAM 사용량에 따라 확장할 수 있다.
- ALB 타겟당 요청 수: 애플리케이션 로드 밸런서(ALB)의 타겟당 요청 수에 따라 스케일링이 이루어진다.
- 자동 확장의 세 가지 주요 방식
- Target Tracking: 특정 CloudWatch 메트릭에 맞춘 타겟 값으로 스케일링.
- Step Scaling: 설정된 CloudWatch 알람에 따라 단계적으로 스케일링.
- Scheduled Scaling: 미리 설정된 날짜와 시간에 따라 스케일링.
💡 EC2 시작 유형 - EC2 인스턴스 자동 확장
- EC2 시작 유형을 사용하는 경우, 오토 스케일링 그룹(ASG)을 통해 ECS 태스크를 실행할 EC2 인스턴스를 자동으로 확장할 수 있다.
- ASG는 CPU 사용률에 따라 EC2 인스턴스 수를 증가시키고, 인프라를 자동으로 확장한다.
- ECS 클러스터 용량 공급자(Capacity Provider)를 통해 더 지능적으로 ECS 태스크가 실행될 인프라를 확장할 수 있다.
- 용량 공급자는 ASG와 연동하여, 태스크 실행을 위한 리소스가 부족할 때 EC2 인스턴스를 자동으로 추가한다.
💡 ECS 서비스의 CPU 사용량 기반 확장 예시
- ECS 서비스의 CPU 사용량이 증가할 때 CloudWatch 메트릭이 이를 감지하고, CloudWatch 알람이 트리거된다.
- CloudWatch 알람이 ECS 오토 스케일링을 트리거하여 ECS 서비스의 희망 태스크 수(desired task count)가 증가하게 된다.
- 추가적인 태스크가 자동으로 생성되며, CPU 사용률이 감소할 때까지 확장이 유지된다.
- EC2 시작 유형에서는 용량 공급자가 자동으로 EC2 인스턴스를 추가하여 클러스터 용량을 확장한다.
💡 ECS 롤링 업데이트 개요
- ECS 롤링 업데이트는 서비스의 태스크를 버전 1(V1)에서 버전 2(V2)로 업데이트할 때, 태스크를 한 번에 몇 개씩 시작하고 종료할지 제어할 수 있는 기능이다.
- 업데이트 시에는 두 가지 중요한 설정을 고려해야 한다
- 최소 상태 퍼센트(Minimum Healthy Percent): 실행 중인 태스크 중 최소 몇 퍼센트가 건강한 상태로 유지되어야 하는지 설정.
- 최대 퍼센트(Maximum Percent): 동시에 실행 가능한 최대 태스크의 퍼센트를 설정. 이 값은 태스크 수의 상한을 정하며, 새 버전의 태스크를 시작할 수 있는 수를 제어한다.
예시: 현재 서비스에 9개의 태스크가 실행 중이라면, 100% 실행 용량 상태이다. 업데이트를 진행할 때 최소 퍼센트를 100%로 설정하면, 실행 중인 태스크가 모두 유지된다.
😃 ECS 롤링 업데이트 시나리오 1 - 최소 50%, 최대 100%
- 이번 시나리오는 최소 50%, 최대 100%로 설정된 롤링 업데이트이다. 이 설정은 서비스의 실행 용량을 최소 50%로 유지하면서 새로운 태스크를 생성하고, 기존 태스크를 종료하게 된다.
- 시작 태스크 수: 4개
- 첫 번째 단계에서, 기존 4개의 태스크 중 2개를 종료하고 2개의 V2 태스크를 생성하여 다시 100% 용량을 맞춘다.
- 이후 나머지 V1 태스크를 종료하고, 나머지 2개의 V2 태스크를 생성하여 롤링 업데이트를 완료한다.
😃 ECS 롤링 업데이트 시나리오 2 - 최소 100%, 최대 150%
- 이번에는 최소 100%, 최대 150%로 설정된 롤링 업데이트 시나리오
- 이 설정은 기존 태스크를 유지하면서 새로운 태스크를 추가하는 방식이다.
- 시작 태스크 수: 4개
- 첫 번째 단계에서, 기존 태스크를 모두 유지한 상태로 2개의 V2 태스크를 생성하여 150% 용량으로 늘어난다.
- 이후, 기존 V1 태스크를 종료하면서 V2 태스크를 추가적으로 생성하여 다시 100%로 돌아온다. 이 과정을 반복해 롤링 업데이트가 완료된다.
- 이 설정은 기존 태스크를 유지하면서 새로운 태스크를 추가하는 방식이다.
📟 ECS 작업 - EventBridge에서 호출
- Amazon EventBridge는 이벤트 기반 아키텍처로, 특정 이벤트에 따라 ECS 작업을 호출할 수 있다.
- 예를 들어, S3 버킷에 객체가 업로드되면, 이 이벤트가 EventBridge를 통해 ECS 작업을 실행하는 트리거가 된다.
- 실행된 ECS 작업은 S3 객체를 가져와 처리하고, 그 결과를 DynamoDB에 저장한다.
- 이와 같은 아키텍처는 서버리스 방식으로 구성되며, AWS Fargate에서 ECS 작업이 실행된다.
📟 ECS 작업 - EventBridge 스케줄을 사용한 ECS 작업 호출
- EventBridge 스케줄을 사용하면 정기적으로 ECS 작업을 실행할 수 있다.
- 예를 들어, 매 1시간마다 Fargate에서 ECS 작업이 실행되도록 설정할 수 있다.
- 이 ECS 작업은 S3에 접근해 파일을 처리하는 배치 작업을 수행할 수 있다.
- 이 아키텍처는 서버리스로 동작하며, ECS 작업이 주기적으로 실행된다.
🦾 ECS 작업 - SQS 큐를 사용한 ECS 작업 실행
- SQS 큐는 메시지 기반 아키텍처로, SQS 큐에 쌓인 메시지를 ECS 작업이 가져와 처리한다.
- SQS 큐에 메시지가 많아질 경우, ECS 서비스 오토 스케일링이 자동으로 더 많은 ECS 작업을 생성하여 처리량을 증가시킨다.
- 이러한 아키텍처는 서비스 차원에서 확장성을 유지하며, 메시지 기반 시스템에서 유용하다.
ECS 작업 상태 변경 감지 - EventBridge로 중지된 ECS 작업 감지
- EventBridge는 ECS 작업의 상태 변경을 감지하고, 이를 트리거로 삼아 다른 작업을 실행할 수 있다.
- 예를 들어, ECS 작업이 중지되면, EventBridge에서 이를 감지하여 SNS를 통해 관리자에게 알림을 보낸다.
- 이와 같은 설정은 ECS 작업의 종료 이유를 추적하고, 신속하게 대응할 수 있도록 돕는다.
💡 Amazon ECS - 태스크 정의(Task Definition)
- 태스크 정의는 JSON 형식으로 작성된 메타데이터로, ECS에서 도커 컨테이너를 실행하는 방법을 설명하는 핵심 구성 요소이다.
- 포함된 정보:
- 이미지 이름
- 컨테이너와 호스트 포트 매핑
- 요구 메모리 및 CPU
- 환경 변수
- 네트워크 정보
- IAM 역할
- 로깅 구성
- 태스크 정의는 최대 10개의 컨테이너를 정의할 수 있다.
- 예시: HTTP 서버의 컨테이너 포트 80을 EC2 인스턴스의 호스트 포트 8080과 매핑하여 인터넷에 노출시킴.
⚖️ ECS 로드 밸런싱 (EC2 시작 유형)
- EC2 시작 유형을 사용할 때, 동적 호스트 포트 매핑을 통해 컨테이너 포트를 동적으로 호스트 포트에 매핑할 수 있다.
- ALB(애플리케이션 로드 밸런서)는 동적 포트를 탐색하여 올바른 포트로 연결한다.
- 보안: EC2 인스턴스의 보안 그룹에서 ALB로부터 모든 포트를 허용해야 한다.
⚖️ Amazon ECS - Fargate 로드 밸런싱
- Fargate에서는 각 ECS 태스크가 고유한 프라이빗 IP를 가진다.
- 호스트 포트 설정이 필요 없으며, 컨테이너 포트만 정의하면 된다.
- 보안: ECS의 ENI 보안 그룹은 ALB로부터 포트 80을 허용해야 하며, ALB는 웹에서 포트 80 또는 443을 허용해야 한다.
👪 Amazon ECS - 태스크 정의 별 IAM 역할
- ECS 태스크는 태스크 정의 당 하나의 IAM 역할을 할당받는다.
- 태스크 정의 A는 S3에 접근 가능한 역할을, 태스크 정의 B는 DynamoDB에 접근 가능한 역할을 가진다.
- 서비스의 모든 태스크는 해당 태스크 정의에 지정된 IAM 역할을 상속받는다.
⚙️ Amazon ECS - 환경 변수 설정
- ECS 태스크 정의는 환경 변수를 설정할 수 있으며, 여러 가지 방법이 존재한다.
- 하드코딩: 태스크 정의 내 URL 등 고정 값 설정.
- SSM 파라미터 스토어: API 키나 공유 설정값을 저장 및 사용.
- 암호 관리자(Secrets Manager): 민감한 정보(예: DB 비밀번호)를 저장 및 참조.
- S3 버킷: 환경 변수를 파일로 저장하고 로드하는 방식.
🔉 데이터 볼륨 (Bind Mounts)
- Bind Mounts는 여러 컨테이너가 동일한 데이터를 공유할 수 있게 해주는 방식이다.
- EC2 태스크: 인스턴스 스토리지 사용.
- Fargate 태스크: 임시 스토리지 사용.
- 사용 사례: 여러 컨테이너 간 로그/지표 데이터를 공유하거나, 사이드 카 컨테이너가 데이터를 처리할 때 사용.
💡 ECS 태스크 배치
- EC2 시작 유형에서 ECS 태스크를 실행할 때, ECS는 CPU, 메모리, 포트 제약 조건에 따라 태스크를 배치할 위치를 결정한다.
- 마찬가지로, 서비스가 스케일 인할 때도 어떤 태스크를 종료할지 결정해야 한다.
- 태스크 배치 전략과 태스크 배치 제한을 통해 ECS 태스크 배치를 제어할 수 있다.
- Note: Fargate는 지원하지 않음.
💡 ECS 태스크 배치 프로세스
- 태스크 배치 전략은 "최선의 노력을 다함(best effort)" 방식으로 이루어진다.
- ECS가 태스크를 배치할 때 4단계 프로세스를 따른다:
- CPU, 메모리, 포트 조건을 만족하는 인스턴스 확인
- 태스크 배치 제한을 만족하는 인스턴스 확인
- 태스크 배치 전략을 만족하는 인스턴스 확인
- 최종적으로 인스턴스를 선택해 태스크 배치
💡 Amazon ECS - Binpack 배치 전략
- Binpack 전략
- 태스크를 CPU와 메모리가 가장 적게 남은 인스턴스에 배치함으로써 사용 중인 EC2 인스턴스 수를 최소화하여 비용을 절감한다.
- JSON 예시:
{
"type": "binpack",
"field": "memory"
}
💡 Amazon ECS - Random 배치 전략
- Random 전략
- 태스크를 무작위로 배치한다.
- JSON 예시:
{
"type": "random"
}
💡 Amazon ECS - Spread 배치 전략
- Spread 전략
- 태스크를 특정 값을 기준으로 분산하여 배치한다. 예를 들어 가용 영역(availability-zone)이나 인스턴스 ID(instanceId)를 기준으로 할 수 있다.
- JSON 예시:
{
"type": "spread",
"field": "attribute:ecs.availability-zone"
}
💡 Amazon ECS - 혼합 배치 전략
- 혼합 배치 전략
- 여러 태스크 배치 전략을 결합하여 사용할 수 있다.
- 예시로 Spread와 Binpack 전략을 혼합하여 사용할 수 있다.
- JSON 예시:
{
"type": "spread",
"field": "attribute:ecs.availability-zone"
},
{
"type": "binpack",
"field": "memory"
}
💡 Amazon ECS - 태스크 배치 제한
- distinctInstance
- 태스크를 서로 다른 EC2 인스턴스에 배치한다.
- JSON 예시:
{
"type": "distinctInstance"
}
- memberOf: 클러스터 쿼리 언어를 사용해 특정 속성을 만족하는 인스턴스에만 태스크를 배치한다.
- JSON 예시:
{
"type": "memberOf",
"expression": "attribute:ecs.instance-type >= t2.*"
}
💡 Amazon ECR
- Amazon ECR(Amazon Elastic Container Registry)은 AWS의 Docker 이미지 저장소로, AWS에 Docker 이미지를 저장하고 관리하는 데 사용된다.
- ECR은 프라이빗과 퍼블릭 두 가지 유형의 리포지토리를 제공
- 퍼블릭 리포지토리의 경우, Amazon ECR Public Gallery에 이미지를 게시할 수 있다.
<주요 특징>
- ECS와의 통합
- ECR은 Amazon ECS(Elastic Container Service)와 완전히 통합되어 있어 Docker 이미지를 손쉽게 배포할 수 있다.
- ECR에 저장된 이미지는 Amazon S3를 통해 백엔드에서 저장되므로 안전하게 관리된다.
- IAM 역할을 통한 접근 제어
- EC2 인스턴스 또는 다른 AWS 서비스가 ECR에서 이미지를 가져오기 위해서는 해당 인스턴스에 IAM 역할을 부여해야 한다.
- 이는 AWS IAM을 통해 액세스 권한을 제어함으로써 보안을 유지한다.
- 취약점 스캐닝 및 이미지 관리
- ECR은 Docker 이미지에 대한 취약점 스캐닝을 지원하여 보안 문제를 조기에 파악할 수 있다.
- 또한, 버저닝을 통해 이미지 관리가 가능하고, 이미지 태그와 이미지 수명 주기 관리 기능을 제공하여 오래된 이미지를 자동으로 삭제할 수 있다.
💡 AWS Copilot
- AWS Copilot은 컨테이너화된 애플리케이션을 빌드, 릴리스, 운영하는 데 사용되는 CLI 도구
- AppRunner, ECS, Fargate에서 애플리케이션을 실행하는 과정을 단순화하여, 복잡한 인프라 설정 대신 애플리케이션 자체에 집중할 수 있게 도와준다.
<주요 특징>
- 인프라 프로비저닝
- ECS, VPC, ELB, ECR 등 컨테이너화된 애플리케이션에 필요한 모든 인프라를 자동으로 준비해준다.
- 자동화된 배포
- Copilot은 CodePipeline과 통합되어 명령어 하나로 컨테이너를 다양한 환경에 자동으로 배포할 수 있다.
- 멀티 환경 배포
- 여러 개발, 테스트, 프로덕션 환경에 쉽게 배포할 수 있으며, 각 환경에 필요한 리소스를 효율적으로 관리한다.
- 문제 해결 및 모니터링
- Copilot은 애플리케이션의 문제 해결, 로그 모니터링, 상태 점검 등의 기능을 제공한다.
<흐름>
- CLI 또는 YAML 파일을 이용해 마이크로서비스 애플리케이션의 아키텍처를 정의
- Copilot을 사용해 애플리케이션을 컨테이너화하고, 잘 설계된 인프라가 자동으로 설정되며 배포 파이프라인이 생성됨
- 이후 애플리케이션은 Amazon ECS, AWS Fargate, 또는 AWS App Runner로 배포 가능
🔍 Amazon EKS Overview
- Amazon EKS는 Elastic Kubernetes Service의 약자로, AWS에서 관리형 Kubernetes 클러스터를 실행할 수 있는 서비스이다.
- Kubernetes는 컨테이너화된 애플리케이션의 자동 배포, 스케일링, 관리를 위한 오픈 소스 시스템으로, 일반적으로 Docker 애플리케이션에 사용된다.
- ECS와 비슷하지만, Kubernetes API를 사용하며, 클라우드에 종속적이지 않기 때문에 다양한 클라우드 환경(Azure, GCP)에서 사용할 수 있다.
- EKS는 두 가지 실행 모드를 지원
- EC2 인스턴스를 이용한 워커 노드 배포.
- Fargate를 이용한 서버리스 컨테이너 배포.
- 기업이 Kubernetes를 이미 다른 클라우드나 온프레미스에서 사용하고 있고, 이를 AWS로 마이그레이션하고 싶을 때 적합하다.
- EKS 클러스터는 리전별로 하나씩 생성할 수 있으며, CloudWatch Container Insights를 이용해 로그와 메트릭을 수집한다.
💡 Amazon EKS - Diagram
- VPC 내에서 3개의 가용 영역(AZ)이 퍼블릭 서브넷과 프라이빗 서브넷으로 나뉘어 있다.
- EKS 노드는 EC2 인스턴스에서 실행되며, Auto Scaling Group에 의해 관리된다.
- EKS 포드는 EKS 노드에서 실행되고, ECS 태스크와 유사한 개념이다.
- 클러스터에 서비스와 통신하기 위해 퍼블릭 로드 밸런서 또는 프라이빗 로드 밸런서를 설정할 수 있다.
💡 Amazon EKS - Node Types
- Managed Node Groups
- EKS가 노드(EC2 인스턴스)를 자동으로 생성하고 관리한다. 노드는 Auto Scaling Group의 일부로 관리된다.
- 온디맨드와 스팟 인스턴스를 지원
- EKS가 노드(EC2 인스턴스)를 자동으로 생성하고 관리한다. 노드는 Auto Scaling Group의 일부로 관리된다.
- Self-Managed Nodes
- 사용자가 직접 노드를 생성하고 EKS 클러스터에 등록해야 한다. EKS 최적화 AMI를 사용하거나 커스텀 AMI를 빌드할 수 있다.
- 온디맨드와 스팟 인스턴스를 지원
- 사용자가 직접 노드를 생성하고 EKS 클러스터에 등록해야 한다. EKS 최적화 AMI를 사용하거나 커스텀 AMI를 빌드할 수 있다.
- AWS Fargate
- 관리할 노드가 없으며, 서버리스 환경에서 자동화된 컨테이너 실행만 수행된다.
💡 Amazon EKS - Data Volumes
- EKS 클러스터에 스토리지를 연결하기 위해서는 StorageClass 매니페스트를 지정해야 한다.
- Container Storage Interface (CSI) 호환 드라이버를 사용하여 스토리지를 관리한다.
- 지원하는 스토리지
- Amazon EBS: 블록 스토리지.
- Amazon EFS: Fargate와 함께 사용할 수 있는 유일한 스토리지 타입.
- Amazon FSx for Lustre: 고성능 파일 스토리지.
- Amazon FSx for NetApp ONTAP: 데이터 관리용 스토리지.
>> Amazon EKS는 Kubernetes 기반의 AWS 관리형 클러스터 서비스로, 서버리스 옵션(Fargate)과 EC2 인스턴스를 선택할 수 있어 유연하다.
>> EKS는 클라우드 중립적이므로 여러 클라우드 플랫폼에서 쉽게 Kubernetes 워크로드를 마이그레이션 할 수 있다.
반응형
'AWS' 카테고리의 다른 글
AWS Section 19-1. AWS 통합 및 메시징 : SQS, SNS 및 Kinesis (0) | 2024.11.04 |
---|---|
AWS Section 18. CloudFormation (2) | 2024.11.04 |
AWS Section 15. CloudFront (0) | 2024.10.26 |
AWS Section 14. Amazon S3 보안 (0) | 2024.09.27 |
AWS Section 13. Amazon S3 고급 (0) | 2024.09.27 |