[Project] - Kubernetes 기반 인프라 자동화 및 애플리케이션 배포 - 프로젝트 계획

황준서·2025년 3월 6일
0

Project

목록 보기
1/5

프로젝트 개요

본 프로젝트는 Terraform을 사용하여 AWS 또는 GCP와 같은 클라우드 환경에 Kubernetes 클러스터를 프로비저닝하고, GitOps (ArgoCD) 및 CI/CD (GitHub Actions)를 결합하여 애플리케이션 배포를 자동화하는 시스템을 구축하는 것을 목표로 합니다. 또한, 모니터링 설정을 추가하여 운영 관점에서도 완성도를 높일 것입니다. Terraform의 모듈화, 동적 블록, 변수 관리 및 Best Practices를 모두 활용할 수 있는 실전형 프로젝트입니다.

기술 스택

분야사용 기술
클라우드 인프라AWS (EKS, S3, DynamoDB, IAM)
인프라 관리Terraform, Helm
컨테이너 및 KubernetesKubernetes (EKS), Docker
CI/CD 및 GitOpsGitHub Actions, ArgoCD
모니터링Prometheus, Grafana
보안IAM Roles (AWS), Kubernetes RBAC, Ingress (ALB/NGINX), Network Policies
기타Git, Markdown/README

프로젝트 목표

  • Terraform을 통한 인프라 코드 관리 (IaC)
  • Kubernetes 클러스터 및 애플리케이션 배포 자동화
  • GitOps 워크플로우를 통한 배포 프로세스 최적화
  • CI/CD 파이프라인을 통한 개발-배포 주기 단축
  • 모니터링 및 보안 설정을 통한 운영 준비성 확보

프로젝트 구성

  1. 인프라 설계 (Terraform)

    • 사용 도구: Terraform, AWS/GCP, Terraform Module, Remote State
    • 구현 내용:
      • AWS에서 EKS (Elastic Kubernetes Service) 클러스터 생성 또는 GCP에서 GKE (Google Kubernetes Engine) 프로비저닝.
      • VPC, 서브넷, 보안 그룹 등 네트워크 리소스를 모듈화하여 관리.
      • Terraform State를 S3 또는 GCS와 같은 원격 백엔드에 저장하고, DynamoDB로 상태 잠금 (Locking) 설정.
      • terraform workspace를 사용하여 dev, staging, prod 환경 분리.
  2. Kubernetes 리소스 관리 (Terraform + Helm)

    • 사용 도구: Terraform Helm Provider, Kubernetes Provider
    • 구현 내용:
      • Terraform으로 Helm 차트를 통해 Prometheus와 Grafana와 같은 모니터링 도구 배포.
      • 동적 블록 (Dynamic Block)을 사용하여 환경별로 다른 설정 (예: 리소스 크기)을 유연하게 적용.
      • 조건문 (Conditionals)을 활용하여 dev 환경에서는 저비용 인스턴스를, prod에서는 고성능 인스턴스를 선택.
  3. 애플리케이션 배포 자동화 (GitOps + ArgoCD)

    • 사용 도구: Terraform, ArgoCD, GitHub Actions
    • 구현 내용:
      • 샘플 애플리케이션 (예: NGINX 웹 서버 또는 간단한 Flask 앱)을 Kubernetes에 배포.
      • Terraform으로 ArgoCD를 설치하고, Git 리포지토리와 연동하여 GitOps 워크플로우 구현.
      • GitHub Actions로 CI/CD 파이프라인 설정: 코드 푸시 → 이미지 빌드 → ArgoCD 동기화.
  4. 변수와 출력값 활용

    • 구현 내용:
      • input 변수를 사용하여 클러스터 이름, 리전, 노드 수 등을 사용자 지정 가능하게 설정.
      • output으로 클러스터 엔드포인트, ArgoCD 대시보드 URL 등을 출력하여 사용자 편의성 강화.
  5. 모니터링 및 보안 관리

    • 구현 내용:
      • Prometheus와 Grafana로 클러스터 모니터링 설정.
      • Terraform으로 IAM 역할과 정책을 정의하여 최소 권한 원칙 (Least Privilege) 적용.
      • Provisioners를 사용하여 클러스터 생성 후 초기 설정 스크립트 실행 (선택 사항).
  6. Best Practices 적용

    • 코드 구조를 모듈화하고, 변수 파일 (terraform.tfvars)로 환경별 설정 분리.
    • Terraform 코드에 주석 추가 및 README 작성으로 문서화.
    • .gitignore에 민감한 정보 (예: API 키) 제외.

프로젝트 워크플로우

  1. 인프라 프로비저닝: terraform init, terraform plan, terraform apply로 AWS/GCP에 Kubernetes 클러스터 생성.
  2. ArgoCD 설치: Terraform으로 ArgoCD를 클러스터에 배포하고 Git 리포지토리 연결.
  3. CI/CD 설정: GitHub Actions 워크플로우 파일 작성 (예: .github/workflows/deploy.yml).
  4. 애플리케이션 배포: 샘플 앱을 컨테이너화하고, ArgoCD로 배포.
  5. 모니터링 확인: Grafana 대시보드에서 클러스터 상태 확인.

포트폴리오에 담을 내용

  • 프로젝트 개요: 프로젝트 목표와 사용 기술 스택.
  • 구성도: Terraform으로 만든 인프라와 GitOps 워크플로우 다이어그램 (수작업 또는 draw.io로 작성).
  • 코드 샘플: main.tf, variables.tf, 모듈 예시 등.
  • 스크린샷:
    • Terraform apply 완료 후 출력값.
    • ArgoCD 대시보드와 배포 상태.
    • Grafana 모니터링 화면.
  • 배운 점: Terraform 모듈화, GitOps 도입, CI/CD 통합 경험 정리.

추가 아이디어

  • Terraform Cloud 연동: Terraform Cloud를 백엔드로 사용하고, 팀 협업 기능 활용.
  • Ansible 통합: Provisioners 대신 Ansible을 연동하여 서버 초기화 작업 추가.
  • 보안 강화: AWS Secrets Manager와 Terraform을 연동하여 민감한 데이터 관리.

예상 소요 시간

2025년 3월 - 4월 초 예상 (2-3주)

예상 비용 (AWS EKS, ArgoCD, Nginx)

AWS EKS를 하루 4시간, 7일 동안 사용하는 프로젝트의 예상 비용을 한화로 계산해 보겠습니다. 환율은 2024년 6월 24일 기준 1달러당 1,380원으로 가정.

  • AWS EKS 클러스터 비용 (달러)
    • EKS 컨트롤 플레인: 2.8달러
    • EC2 워커 노드 (t3.medium 3개, 온디맨드): 3.36달러
    • EBS 스토리지: 1달러 미만 (약 0.5달러로 가정)
    • 네트워크 비용: 1달러 미만 (약 0.5달러로 가정)
    • 총합: 약 7.16달러
  • 한화로 환산
    • 7.16달러 * 1,380원/달러 = 약 9,880원
  • 스팟 인스턴스 사용 시
    • EC2 워커 노드 비용을 50% 절감하면: 3.36달러 / 2 = 1.68달러
    • 총합: 약 5.5달러
    • 한화 환산: 5.5달러 * 1,380원/달러 = 약 7,590원
  • 결론
    • 온디맨드 인스턴스 사용 시: 약 9,880원
    • 스팟 인스턴스 사용 시: 약 7,590원

따라서, 하루 4시간, 7일 동안 AWS EKS, ArgoCD, Nginx를 사용하는 프로젝트의 예상 비용은 한화로 약 7,590원에서 9,880원 사이가 될 것으로 예상.
2-3 주 기간 가정 시, 한화 30,000으로 예측.



프로젝트 진행 순서

1. 프로젝트 환경 준비

1.1. AWS/GCP 계정 생성 및 자격 증명 설정

  • AWS 계정을 생성하고, IAM 역할 및 자격 증명을 설정합니다.
  • API 키 및 액세스 권한을 설정하여 Terraform과 CLI 도구들이 클라우드 리소스에 접근할 수 있도록 합니다.

1.2. Terraform, AWS CLI/GCP CLI, kubectl, Helm 설치

  • Terraform, AWS CLI, kubectl, Helm을 설치하여 클라우드 환경을 관리하고 Kubernetes 클러스터와 상호작용합니다.

1.3. GitHub 레포지토리 생성 및 GitHub Actions 사용 설정

  • GitHub 레포지토리를 생성하고, GitHub Actions를 사용하여 CI/CD 파이프라인을 설정합니다.

2. Terraform을 활용한 인프라 구축

2.1. Terraform 설치 및 초기화

  • Terraform을 설치하고, terraform init 명령어로 초기화합니다.

2.2. AWS/GCP 설정

  • AWS (EKS) 클러스터를 선택하고, 클라우드 제공자의 API 키와 권한을 설정합니다.

2.3. VPC, 서브넷 및 네트워크 리소스 설정

  • Terraform으로 VPC, 서브넷, 라우팅 테이블, NAT 게이트웨이 등을 생성합니다.
  • 보안 그룹 및 네트워크 ACL 설정을 통해 네트워크 보안을 강화합니다.

2.4. Kubernetes 클러스터 프로비저닝

  • AWS EKS 클러스터를 Terraform을 이용해 설정합니다.
  • terraform apply 명령어로 클러스터를 생성합니다.

2.5. 원격 상태 관리

  • AWS S3를 사용하여 Terraform 상태를 저장합니다.
  • DynamoDB (AWS) Locking을 설정하여 상태 잠금을 관리합니다.

3. Kubernetes 리소스 및 모니터링 배포

3.1. Helm 설치

  • Kubernetes 클러스터에 Helm을 설치하여 차트를 통해 애플리케이션을 관리합니다.

3.2. Helm 차트 배포 (Terraform + Helm Provider)

  • Terraform을 사용하여 Helm 차트를 통해 Prometheus 및 Grafana를 배포합니다.
  • 동적 블록을 사용해 환경에 맞는 리소스 크기와 설정을 최적화합니다.

4. GitOps 및 CI/CD 설정

4.1. ArgoCD 설치

  • Kubernetes 클러스터에 ArgoCD를 설치하고, GitHub 리포지토리와 연동하여 GitOps 워크플로우를 설정합니다.

4.2. 애플리케이션 배포

  • 간단한 애플리케이션 (예: NGINX 또는 Flask)을 컨테이너화하고 GitHub에 푸시합니다.
  • GitHub Actions로 CI/CD 파이프라인을 설정하여 코드 푸시 → 이미지 빌드 → ArgoCD 동기화를 자동화합니다.

5. 애플리케이션 배포 자동화 (GitOps + ArgoCD)

5.1. ArgoCD와 GitHub 리포지토리 연동

  • ArgoCD와 Git 리포지토리를 연결하여 GitOps 방식을 적용합니다.

5.2. 애플리케이션 자동 배포

  • 코드 푸시 시 자동으로 Docker 이미지를 빌드하고 ArgoCD가 이를 Kubernetes에 배포합니다.

6. 모니터링 설정 (Prometheus + Grafana)

6.1. Prometheus 설치

  • Terraform을 사용하여 Prometheus를 배포하고, 클러스터 메트릭을 수집합니다.

6.2. Grafana 대시보드 설정

  • Prometheus와 Grafana를 연결하여 Kubernetes 클러스터 상태를 모니터링하는 대시보드를 작성합니다.

7. 보안 설정

7.1. IAM 역할 및 정책 설정

  • 최소 권한 원칙을 적용하기 위해 IAM 역할을 정의합니다.

7.2. Kubernetes RBAC 설정

  • Kubernetes에서 역할 기반 접근 제어(RBAC)를 설정하여 보안을 강화합니다.

7.3. Ingress 설정 (ALB/NGINX)

  • AWS ALB 또는 NGINX Ingress Controller를 사용하여 트래픽을 관리하고 보안을 강화합니다.

7.4. Kubernetes Network Policy 설정

  • 클러스터 내부의 안전한 통신을 위해 네트워크 보안 정책을 설정합니다.

8. 최적화 및 Best Practices 적용

8.1. Terraform 모듈화 및 관리

  • Terraform 코드를 모듈화하여 환경별로 재사용 가능하게 관리합니다.
  • terraform.tfvars 파일을 사용하여 환경별 변수 분리 관리합니다.

8.2. 문서화

  • 코드에 주석을 추가하고, README.md를 작성하여 프로젝트의 개요와 실행 방법을 정리합니다.
  • 아키텍처 다이어그램 및 구성도를 수작업 또는 draw.io로 작성합니다.

8.3. GitOps Best Practices

  • Git 리포지토리에서 애플리케이션 설정 및 상태를 관리하여 GitOps 방식을 최적화합니다.

9. 최종 검토 및 테스트

9.1. Terraform 적용 확인

  • terraform apply 후 리소스 생성 및 연결 상태를 확인합니다.

9.2. ArgoCD 배포 상태 확인

  • ArgoCD UI에서 배포 상태 및 동기화를 확인합니다.

9.3. Grafana 대시보드 확인

  • 클러스터 상태를 모니터링하고 알림을 설정하여 운영 상태를 점검합니다.

9.4. CI/CD 파이프라인 테스트

  • 코드 푸시 후 자동 빌드, 배포, ArgoCD 동기화를 검증합니다.

10. 포트폴리오 및 문서화

10.1. 포트폴리오 작성

  • 프로젝트 개요, 사용 기술, 구현 내용을 정리합니다.
  • 코드 샘플 및 스크린샷을 첨부하여 프로젝트 결과물을 시각적으로 보여줍니다.
  • 배운 점 및 경험을 공유하여 프로젝트에서 얻은 교훈을 정리합니다.
profile
클라우드 엔지니어 준비

2개의 댓글

comment-user-thumbnail
2025년 3월 7일

git hub - psj020528

답글 달기
comment-user-thumbnail
2025년 3월 7일

WHchild

답글 달기