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은 리소스를 생성하고, 클러스터와 리소스에 대한 세부 정보를 확인하고, 문제 해결 도구에 액세스하는 명령을 제공
kubectl [command] [TYPE] [NAME] [flags]

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