AWS/NIPA-AWS
2025.06.25 자가 학습
2025년 6월 25일에 진행한 NIPA-AWS 자가 학습 내용
Introduction to Conatiners
기존 아키텍처와 마이크로서비스 아키텍처 비교
- 기존 아키텍처는 모놀리식으로 서비스 가용성이 떨어짐
- 각 서비스는 여러 애플리케이션을 지원하는 단일 기능을 수행
- 서비스가 독립적으로 운영되기에 가용성이 늘어난다.
마이크로서비스 특징
- 분산되고 진화적인 설계
- 효율성 낮은 파이프, 스마트한 엔드포인트
- 프로젝트가 아닌 독립 제품
- 장애 대비 설계
- 일회성
- 개발 및 프로덕션 패리티
컨테이너가 마이크로서비스 아키텍처에 유리한 이유
- 컨테이너는 각 서비스가 독립적인 환경을 가지기에 유리한 구조이다.
Kubernetes
컨테이너화된 애플리케이션의 배포, 확장, 관리 자동화를 위한 오픈소스 플랫폼
Kubernetes 객체
- 클러스터: Kubernetes의 기본 단위로, 노드들의 집합. 클러스터를 관리하는 서비스를 실행하는 제어 영역도 존재
- 노드: 클러스터를 구성하는 개별 머신. 컨테이너화된 애플리케이션을 실행하는 역할
- 포드: 하나 이상의 컨테이너를 포함하는 배포, 크기 조정 및 복제를 위한 Kubernetes의 기본 실행 단위. PodSpec 파일에 의해 정의됨
- 휘발성 볼륨: 포드가 실행되는 동안만 존재하는 임시 저장소. PodSpec 파일에 정의됨
- 영구 볼륨: 포드가 삭제되어도 데이터가 유지되는 저장소. PersistentVolumeClaim을 통해 요청됨
- 서비스: 포드에 액세스 하기 위한 수단을 제공하는 논리적 컬렉션. 포드의 IP 주소 및 포트 번호를 관리하는 역할을 수행
- 네임스페이스: 클러스터 내에서 리소스를 그룹화하는 방법. 서로 다른 네임스페이스의 리소스는 격리되어 관리됨
- 물리적 클러스터는 서로 다른 네임스페이스에 있다면 리소스가 동일한 이름을 가질 수 있음
- ReplicaSet: 포드의 복제본을 관리하는 객체. 지정된 수의 포드가 항상 실행되도록 보장
- 배포: ReplicaSet 또는 개별 포드를 소유하고 관리하는 객체. 새로운 버전의 애플리케이션을 배포하거나 롤백하는 데 사용됨
- ConfigMap: 포드와 같은 Kubernetes 객체에서 사용하는 키-값 쌍으로 기밀 데이터 이외의 데이터를 저장하는 API 객체
- 보안 정보: AWS 자격 증명과 같은 모든 기밀 데이터를 저장하는 API 객체.
포드 예약
- 스케줄러로 포드 예약 가능
- 포드에 필요한 리소스를 확인하고 그 정보를 사용하여 스케쥴링 결정에 영향을 줌
- 일련의 필터를 실행하고 포드 배치에 부적격한 노드 제외
- 볼륨 필터: 볼륨 요구 사항 및 제약 조건 충족
- 리소스 필터: CPU, 메모리 등 리소스 요구 사항 충족
- 토폴로지 필터: 노드 또는 포드 수준에서 설정된 스케쥴링 제약 조건 충족
- 우선순위 지정: 배치할 최종 컨테이너 인스턴스 선택
제어 영역 및 데이터 영역
- 클러스터는 제어 영역, 데이터 영역으로 구성된다.
- 제어 영역: 클러스터 전체를 관리하는 영역으로, API 서버, 스케줄러, 컨트롤러 매니저 등이 포함
- 제어 영역 노드: 컨트롤러 관리자, 클라우드 컨트롤러, 스케쥴러, API 서버 등이 실행되는 노드
etcd: 쿠버네티스의 분산 키-값 저장소. 클러스터 상태 및 설정 데이터를 저장
- 데이터 영역: 실제 애플리케이션이 실행되는 영역으로, 노드와 포드가 포함된다.
- 작업자 노드:
kube-proxy,kubelet, 컨테이너 런타임 등이 실행되는 노드
- 작업자 노드:
사용자 지정 리소스
- 클러스터에 새로운 API 리소스를 추가하여 쿠버네티스 API를 확장할 수 있는 기능
- 기본적으로 포드, 배포, 서비스 같은 표준 리소스를 제공하지만, 사용자 지정 리소스를 정의하여 특정 요구 사항에 맞게 확장 가능
kubectl
- Kubernetes 클러스터와 상호작용하기 위한 명령줄 도구(CLI)
- kubectl은 리소스를 생성하고, 클러스터와 리소스에 대한 세부 정보를 확인하고, 문제 해결 도구에 액세스하는 명령을 제공
Amazon EKS
Amazon EKS는 AWS에서 관리하는 Kubernetes 서비스로, Kubernetes 제어 영역을 자동으로 관리하고, 클러스터의 가용성과 보안을 보장한다.
Amazon EKS 가용성 및 API
- Amazon EKS 제어 영역은 3개의 가용 영역에 걸친 최소 2개의 API 서버 노드와 3개의 etcd 노드로 구성됨
- 비정상 제어 영역 노드를 자동으로 탐지 및 교체를 진행하기에 운영 부담이 대폭 감소함
- 애플리케이션 빌드에 집중 가능
- Amazon EKS를 시작하려면 작업자 노드 클러스터를 프로비저닝
- 사용자는 그래픽 또는 CLI를 통해 Amazon EKS 클러스터에 연결하여 Kubernetes 애플리케이션을 EKS에 배포 가능
- Amazon EKS API를 사용하여 Kubernetes 제어 영역 관리
- 사용 가능한 CLI 도구는 두 개가 존재
- eksctl: Weaveworks 제작, 내부적으로 CloudFormation 사용
- AWS CLI: EKS API 직접 호출
Last updated on