Amazon Web Serivce 자격증 쉽게 공부하기/AWS Solutions Architect Associate 핵심
SAA-C03 핵심 #27, ECS & EKS
네트워크 엔지니어 환영
2024. 1. 16. 20:48
반응형
Virtual Machine, VM(가상 머신)
- 가상의 컴퓨터, 하나의 호스트에 안에 또다른 호스트를 만들어 사용하는 것
- CPU, Memory와 같은 주요 하드웨어 부품을 소프트웨어로 완전 재현해내어 기능을 흉내내게 하고 격리된 실행 환경(OS)를 만듬
- 하드웨어를 직접 가상화함
- 호스트의 OS(Operating System) 내에 또다른 실행환경의 OS가 존재함
- 윈도우 OS의 호스트 내에 리눅스, 우분투 등의 다양한 OS를 올릴 수 있음
- OS를 포함하기 때문에 용량을 많이 차지할 뿐더러 사용자가 필요치 않는 기능까지 포함할 수 있으며 느림
Kernel
- Operaintg System에서 가장 중요한 역할을 맡고 있는 핵심(核心)
- 커널이 각 프로세스(실행환경)에 하드웨어 자원(CPU 등)을 할당하고 작업 스케쥴링(처리순서)를 담당하며 프로세스 간 접근과 보안을 책임짐
- 과거에 커널이 없던 시절에도 컴퓨터는 존재할 수 있었으나 메모리를 초기화하기 위해서는 컴퓨터를 리부팅해야 하는 등의 자원관리 / 제어 주체의 필요성에 의해 탄생
Container(화물선에 싣는 그 컨테이너와 의미가 같음)
- 실행하고자 하는 애플리케이션과 애플리케이션 실행을 위해 필요한 부품(라이브러리, 각종 설정)을 함께 묶은 패키지
- ECS를 사용하는 목적이자 관리 대상
- 하드웨어가 아닌 OS를 가상화하여 커널을 공유하며 프로세스(컨테이너와 비슷)를 격리된 환경에서 실행하는 것
- VM와 달리 호스트의 OS에서 가상화를 실시하여 이 OS 위에 프로세스들이 '컨테이너'로서 격리된 환경에서 실행됨
- 호스트의 입장에선 컨테이너는 프로세스에 불과하지만 컨테이너 입장에서는 독립된 실행환경임
- OS를 포함하지 않는만큼 가볍고 하드웨어를 가상화하지 않기 때문에 빠름
Docker(Container Orchestration)
- Container 기술에 근간을 두는 컨테이너 관리 솔루션
- 'Docker'라는 단어 자체가 '부두에서 일하는 노동자', 즉 컨테이너를 관리하는 존재임을 뜻함
- Linux Container 기술을 사용하는 솔루션이므로 별도의 OS를 설치하지 않고 컨테이너를 생성하여 애플리케이션을 실행함
- 컨테이너를 생성할 이미지(서비스에 필요한 리소스를 모아둔 최소한의 단위)를 기반으로 운영함
- 이미지만 가지고 있다면 어느 시점에서든 동일한 리소스의 컨테이너를 생성할 수 있음
ECS(Elastic Container Service)
- 클러스터에서 도커 컨테이너를 손쉽게 관리하기 위한 컨테이너 관리 서비스
- 클러스터는 Task(작업) 또는 서비스로 일컬어지는 컨테이너들의 집합
- AWS에서 도커 컨테이너를 실행한다는 것은 ECS Cluster에서 ECS Task를 실행하는 것을 의미
- Task는 한 개 이상의 컨테이너가 포함된 컨테이너 세트로 ECS에서 컨테이너를 실행하는 최소단위
- 2가지 구성 요소로 시작 가능
- EC2(Container Instance) : EC2를 생성하여 EC2 내에 ECS Agent를 실행하고 Agent가 EC2를 ECS 클러스터에 등록함
- Fargate : Serverless 서비스, EC2 인스턴스나 클러스터를 관리할 필요 없이 AWS가 ECS Task를 대신 실행함
- 하나의 클러스터 내에 다수의 Task(Fargate) 혹은 컨테이너 인스턴스(Task를 보유한)로 구성됨
- ELB(ALB, NLB)를 연결하여 Task를 부하분산하거나 EFS를 연결해 Task에 파일시스템을 마운트하여 데이터를 공유하는 등의 기능을 사용하여 구성 가능
ECS의 IAM Role
- EC2 인스턴스 IAM Role
- EC2 시작 유형 전용 Role으로 ECS Agent가 EC2를 ECS Cluser에 등록하기 위해 사용하는 IAM Role
- 이 IAM Role을 이용해 ECS Service에 API 호출을 실시하면 CloudWatch에 컨테이너 로그를 보내고 ECR로부터 도커 이미지를 가져옴
- ECS Task IAM Role
- EC2와 Fargate 시작 유형 Role
- 각각의 태스크로 하여금 특정 권한을 허용하는 IAM Role
- 태스크별로 다른 Role을 부여함으로써 서로 다른 서비스에 접근할 수 있게 해줌
- 예시) A Task는 S3, B Task는 DynamoDB
Kubernetes
- 컨테이너화된 애플리케이션의 배포, 스케일링, 관리를 자동화해주는 오픈 소스 오케스트레이션(Orchestration) 도구
- Orchestration : 애플리케이션의 자동화된 설정, 관리 등을 의미
- 도커와 같은 컨테이너 기반 플랫폼의 등장으로 점차 더 많은 컨테이너가 사용되기 시작하자 컨테이너를 자동으로 관리해 줄 도구의 필요성으로 인해 등장
- 구성 요소
- 클러스터 : 쿠버네티스를 배포하면 얻는 단위로 컨트롤 플레인과 노드로 구성됨
- 컨트롤 플레인(Master Node) : 노드와 파드를 관리하는 주체로 etcd(클러스터 정보 저장소), kube-apiserver(클러스터 내에서 발생하는 각종 요청을 처리), kube-scheduler(파드 스케줄링 담당) 등으로 구성됨
- 노드(Worker Node) : 컨트롤 플레인에 의해 관리되는 워커 머신(물리 서버 혹은 가상 서버)으로 클러스터는 최소 1개의 노드를 가지며 노드 내에는 여러 파드가 실행됨
- 컨트롤 플레인은 노드를 통해 파드에 대한 스케쥴링을 자동으로 처리함
- 파드 : 실행중인 컨테이너의 집합을 의미하는 추상적인 개념, 파드는 노드 내에서 다수 실행되며 파드 내 컨테이너들은 IP, 스토리지, 포트 등을 공유함
- 네임스페이스 : 클러스터 내부의 논리적인 단위로 파드 등의 리소스를 논리적으로 구분, 그룹화하기 위한 개념
- 쿠버네티스는 컨테이너를 파드 내에 배치하고 파드를 노드에서 실행함으로서 워크로드(쿠버네티스 상에서 가동되는 애플리케이션)를 구동함
EKS(Elastic Kubernetes Service)
- AWS에서 쿠버네티스를 쉽게 실행 및 관리할 수 있도록 지원, 컨트롤 플레인과 노드를 자동으로 관리해주는 서비스
- Pod에 대한 AutoScaling뿐만 아니라 로드밸런서(AWS ALB / NLB)를 연결하여 사용 가능
- EKS의 구성요소는 위에서 언급한 쿠버네티스와 동일하게 클러스터라는 개념이 사용되며 클러스터는 컨트롤 플레인과 노드로 구성됨
- 컨트롤 플레인 : etcd, kube-apiserver와 같은 클러스터 내 노드와 파드를 제어하는 주체이며 EC2 상에서 실행됨, IAM Role을 통해 허가된 사용자만이 접근할 수 있도록 통제 가능
- 노드 : 컨테이너화된 애플리케이션을 실행시키는 주체로 EC2에서 실행되며 관리형 노드그룹, 자체 관리형 노드, Fargate로 구성할 수 있음
- 관리형 노드그룹과 자체 관리형 노드는 EC2 상에서 실행되는 노드이며 Fargate는 Serverless Engine으로 노드를 관리할 필요가 없음
- AutoScaling : EC2 AutoScaling처럼 리소스 규모를 탄력적으로 조정하는 기능
- Cluster Autoscaler : Pod가 실패하거나 노드가 리스케쥴링될 때 노드의 수를 조정하는 오토스케일러
- Karpenter : AWS로 구축된 오픈소스 오토스케일러로 JIT(Just In-Time) 배포가 가능하다는 특징을 지님