이 프로젝트는 Terraform을 사용하여 AWS EKS 클러스터를 자동으로 구성하고, Kubernetes에서 Rust로 작성된 API 서버와 PostgreSQL 데이터베이스를 Helm Chart로 배포합니다.
API 서버에 대한 정보는 아래의 repo를 참고해주세요.
- 자동화:
Terraform으로 EKS 클러스터 및 네트워크를 자동화하여 클라우드 인프라 관리의 복잡성을 줄임. - 리소스 분리: 애플리케이션 서버와 데이터베이스를 각기 다른 노드 그룹에 배치.
- 배포 표준화:
Helm Chart를 통해 애플리케이션 배포를 재사용 가능한 방식으로 관리.
이 레포지토리는 두 개의 주요 폴더로 구성되어 있습니다.
tf-infra- EKS 클러스터 구성을 위한 인프라 설정 파일을 포함합니다.api-server- 애플리케이션 배포를 위한 파일을 포함합니다.
Terraform을 사용하여 AWS EKS 클러스터와 관련 리소스를 설정합니다.
Terraform 주요 설정
-
클러스터 생성:
- Kubernetes version: v1.29.
-
VPC 네트워크:
- 퍼블릭 및 프라이빗 서브넷 구성.
- NAT 게이트웨이 및 Internet Gateway 설정.
-
IAM 역할:
- EKS 클러스터 및 노드 그룹을 위한 권한 관리.
노드 그룹 구성
- API 서버용 노드 그룹:
- 인스턴스 타입:
t3.micro - 최소 1대에서 최대 3대까지 Auto Scaling.
- Rust API 서버를 배치하여 요청을 처리.
- 인스턴스 타입:
- 데이터베이스용 노드 그룹:
- 인스턴스 타입:
t3.small - 최소 1대에서 최대 2대까지 Auto Scaling.
- PostgreSQL 배치로 데이터베이스 워크로드 처리.
- 인스턴스 타입:
- 리소스 격리:
- 각 노드 그룹은 Kubernetes의 nodeSelector 설정으로 애플리케이션과 데이터베이스를 분리.
Terraform 실행
- AWS 인증
이 프로젝트에서 저는 HCP(HashiCorp Cloud Platform)의 AWS 계정의 환경변수를 저장 기능을 이용했습니다. https://app.terraform.io/app (terraform state도 이곳에 저장됩니다.)
하지만, AWS CLI 를 이용하고자 한다면 아래의 명령어를 이용하면 됩니다.
aws configure
- Terraform 실행:
terraform init
terraform apply -auto-approveHelm Chart 구성
- Rust API 서버:
LoadBalancer서비스를 통해 외부 트래픽 허용.
- PostgreSQL 데이터베이스:
StatefulSet으로 데이터 영속성 보장.ClusterIP서비스를 통해 내부 통신 처리.
Helm Chart 배포
- Helm Chart 초기화:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency updatepostgresql 배포를 위해 Bitnami Helm Chart를 사용했습니다.
- Rust API 서버 배포;
helm upgrade --install rust-api . --values values.yaml








