본문 바로가기

쿠버네티스

2. 쿠버네티스 환경 구축과 예제 애플리케이션 배포 - 1

2.1.1 AWS 계정과 요금

AWS 프리티어 계정을 사용할 것이고, 이용 요금은 10,000 ~ 20,000원 정도 예상된다.

2.1.2 예제 애플리케이션의 개요

이 예제 애플리케이션은 마음에 드는 장소를 등록하는 서비스다.

여기서는 장소를 표시, 등록하는 애플리케이션과 장소 정보를 일괄 등록하는 배치 애플리케이션으로 구성한다.

 

예제 애플리케이션 구성 요소는 다음 그림과 같다.

 

예제 애플리케이션은 SPA(Single Page Application)의 프론트엔드백엔드로 구성된다.

프론트엔드는 파일을 S3(Simple Storage Service)에 저장하고, CloudFront를 통해 정적 웹 콘텐츠로 배포한다.

백엔드는 EKS 클러스터 워커노드에 컨테이너로 배포하고, RDS(Relational Database Service) 데이터베이스와 접속한다. 또한, 가용성을 고려해 ELB(Elastic Load Balancing)로 부하를 분산한다.

각 컨테이너 이미지는 ECR(Elastic Container Register)에 저장된다.

2.1.3 AWS 관련 서비스 및 용어

  1. S3
    • AWS가 제공하는 클라우드 스토리지이다.
    • 기본 단위로 버킷(Bucket)을 사용한다.
    • 위 예제에서는 프론트엔드 콘텐츠 배포 장소로 사용된다.
  2. CloudFront
    • AWS가 제공하는 콘텐츠 전송 네트워크(Content Delivery Network, CDN) 서비스다.
    • CDN은 인터넷에서 웹 콘텐츠, 이미지, 동영상, 애플리케이션 등을 빠르게 전송하기 위한 구조로 되어있다.
    • 전 세계에 많은 에지 로케이션을 가지고 있어, 사용자가 접속한 가장 가까운 장소에서 콘텐츠를 제공할 수 있다.
    • 위 예제에서 프론트엔드를 CloudFront를 통해 접속한다.
    💡 에지 로케이션 : 데이터를 전송하기 위한 지점
  3. RDS
    • AWS에서 제공하는 관계형 데이터베이스다.
    • RDS에서 제공되는 데이터베이스 엔진은 Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle Database, SQL Server의 6종류가 있다.
  4. ECR
    • AWS에서 제공하는 컨테이너 레지스트리 관리형 서비스다.
    • 컨테이너 이미지를 저장하고 다운로드할 수 있다.
    • 위 예제에서 컨테이너 이미지를 ECR에 등록하고 EKS 클러스터로 배포한다.
  5. EC2
    • AWS에서 제공하는 가상 머신이다.
    • 위 예제에서는 베스천 호스트로 EC2 인스턴스를 구축하여 사용한다.
    • 또한, EKS 클러스터의 워커 노드는 eksctl이라는 도구를 사용하면 자동으로 구축해주기 때문에 의식하지 못할 수 있지만 EC2 인스턴스로 구축된다.
  6. ELB
    • AWS에서 제공하는 로드밸런서 서비스다.
    • ELB에는 4 종류가 있다.
      1. Aplication Load Balancer
        • HTTP/HTTPS에 특화된 L7(OSI 7계층) 로드밸런서다.
        • 경로 기반 라우팅(URL 경로에 따라 경로 변경), 호스트 기반 라우팅(HTTP 헤더에 설정된 Host에 따라 경로 변경) 등 Classic Load Balancer에 없는 HTPP 고유 처리가 가능하다.
      2. Network Load Balancer
        • L4 로드밸런서다.
        • 따라서, HTTP/HTTPS 외의 프로토콜에서도 사용할 수 있다.
      3. Gateway Load Balancer
        • 다른 회사의 가상 네트워킹 어플라이언스(Appliance)의 배포, 확장, 실행을 돕는다.
        • 여러 회사의 어플라이언스에 대한 로드 밸런싱 및 자동 조정 기능을 제공한다.
      4. Classic Load Balancer
        • HTTP/HTTPS와 TCP로 분산 설정이 가능하고, 기본적인 로드밸런서 기능을 제공한다.
        • 그러나, ‘분산 대상으로 EC2 인스턴스만 지정 가능’과 ‘HTTP/HTTPS 로 분산 설정한 경우에도 사용 가능한 기능 제한’등 제약이 많다.
  7. IAM
    • AWS가 제공하는 권한 관리 서비스다.
    • 사용자 형태에 맞는 권한을 가진 사용자를 IAM으로 생성하는 방식으로 인증을 할 수 있다.
    • 역할 기반으로 리소스를 설정함으로써 해당 리소스에 다른 리소스에 대한 접근 권한을 부여할 수 있다.

2.1.4 EKS 구축에 사용하는 도구

EKS 클러스터를 구축하는 방법은 두 가지가 있다.

  1. EKS 클러스터 구축 도구 eksctl을 이용하는 방법
  2. AWS 관리 콘솔(또는 AWS CLI)을 이용하는 방법

이 글에서는 첫 번째 방법인 eksctl을 사용한다.

 

2.1.4.1 eksctl란

eksctl은 EKS 클러스터 구축 및 관리를 하기 위한 오픈소스 명령줄 도구다. 기본구성이라면 ‘eksctl create cluster’란 명령만으로 EKS 클러스터를 구축할 수 있다. eks를 사용하면 VPC, 서브넷, 보안 그룹 등 EKS 클러스터를 구축하는데 필요한 리소스를 한 번에 구축할 수 있다. 하지만 ,이 글에서는 VPC 등의 기본 리소스는 먼저 생성해두고 EKS 클러스터를 구축할 때 그 리소스들의 ID를 설정한다.

💡 VPC 등의 기본 리소스는 EKS 클러스터와 별도로 구축하는 것이 구성을 유연하게 할 수 있다.

 

2.1.4.2 VPC 관련 용어

AWS에서는 서버 등의 리소스를 VPC라는 논리적으로 분리된 영역을 이용하여 관리한다. 1개의 AWS 계정에 VPC 여러 개를 생성할 수 있지만, 기본적으로 VPC끼리는 독립적인 환경여서 명시적으로 VPC를 연결(피어링)을 하지 않는 한 VPC 간 통신은 할 수 없다.

VPC는 리전 여러개를 선택하서 생성할 수 없기 때문에 기본적으로 1개의 리전을 선택하여 그 안에 서비스를 구축한다.

VPC는 서브넷을 사용해 네트워크를 분할하여 관리한다. 서브넷은 가용 영역 여러 개를 동시에 사용할 수 없으며 가용 영역 여러 개를 사용할 경우 서브넷도 그만큼 나눠야 한다.

라우팅 설정은 서브넷 단위로 할 수 있다. 예를 들어, 인터넷에 직접 접속할 수 있는 퍼블릭 서브넷과 직접 접속할 수 없는 프라이빗 서브넷을 생성할 수 있다.

 

2.1.4.3 CloudFormation을 이용한 환경 구축

이 글에서는 AWS에 리소스를 구축할 때 AWS 환경 구축 도구인 CloudFormation을 사용한다. CloudFormation은 JSON 또는 YAML 형식으로 리소스 구성을 정의한다. 실행은 AWS 관리 콘솔을 이용한다.

 

2.1.4.4 AWS 관리 콘솔

AWS 관리 콘솔은 AWS 서비스를 관리하기 위한 GUI 기반의 웹 사용자 인터페이스다. 환경 구축 자체는 CloudFormation으로 하지만 CloudFormation 자체는 AWS 관리 콘솔을 이용해 실행한다.

 

2.1.4.5 AWS CLI

AWS 명령줄 도구로 AWS 관리 콘솔과 함께 AWS 리소스 관리에 많이 사용된다. AWS CLI는 파이썬으로 만들어진 도구로 인스톨러가 제공되며 pip를 이용해 설치할 수 있다. 이 글에서는 S3 파일 업로드 등 AWS CLI를 사용할 때 편리한 작업에 사용한다.