EKS 클러스터
├── Node Group: monitoring-nodes
│
├── Node Group: alerting-nodes
│
├── Node Group: testing-nodes
│
├── Node Group: secrets-nodes (옵션)
EKS 클러스터
├── NodeGroup: monitoring-nodes (label: role=monitoring)
│ ├── EC2 인스턴스 1 (Node)
│ │ ├── Pod: Prometheus
│ │ └── Pod: Grafana
│ └── EC2 인스턴스 2 (Node)
│ └── Pod: node-exporter
│
├── NodeGroup: alerting-nodes (label: role=alerting)
│ └── EC2 인스턴스 1
│ └── Pod: Alertmanager
│
└── NodeGroup: testing-nodes (label: role=testing)
└── EC2 인스턴스 1
└── Pod: k6 부하테스트
그리고 Vault or AWS Secrets Manager 만 별도 클러스터 사용하거나, 클러스터 내에서 사용시에는 RBAC, IAM, Node 격리 반드시 적용해야함.
내가 생각하는 폴더 구조
eks-infrastructure/
├── environments/ # 환경별 설정 파일들
│ ├── dev.tfvars # 개발 환경 변수
│ ├── staging.tfvars # 스테이징 환경 변수
│ └── prod.tfvars # 프로덕션 환경 변수
│
├── modules/ # 재사용 가능한 Terraform 모듈들
│ ├── eks-cluster/ # EKS 클러스터 모듈
│ │ ├── [main.tf](<http://main.tf/>) # EKS 클러스터 리소스 정의
│ │ ├── [variables.tf](<http://variables.tf/>) # 입력 변수 정의
│ │ ├── [outputs.tf](<http://outputs.tf/>) # 출력 값 정의
│ │ └── [versions.tf](<http://versions.tf/>) # 프로바이더 버전 제약
│ │
│ ├── node-groups/ # 노드 그룹 모듈
│ │ ├── [main.tf](<http://main.tf/>) # 노드 그룹 리소스
│ │ ├── [variables.tf](<http://variables.tf/>) # 노드 그룹 설정 변수
│ │ └── [outputs.tf](<http://outputs.tf/>) # 노드 그룹 출력
│ │
│ ├── vpc/ # VPC 네트워킹 모듈
│ │ ├── [main.tf](<http://main.tf/>) # VPC, 서브넷, 라우팅 설정
│ │ ├── [variables.tf](<http://variables.tf/>) # 네트워크 관련 변수
│ │ └── [outputs.tf](<http://outputs.tf/>) # 네트워크 정보 출력
│ │
│ └── vault-integration/ # Vault 통합 모듈 -> 여기 구성해도 되나?
│ ├── [main.tf](<http://main.tf/>) # Vault 설정 및 권한
│ ├── [variables.tf](<http://variables.tf/>) # Vault 관련 변수
│ └── [outputs.tf](<http://outputs.tf/>) # Vault 연결 정보
│
├── helm-charts/ # Helm 차트들 -> 이것도 여기 구성해서 관리?? / addon
│ ├── monitoring/ # 모니터링 스택
│ │ ├── prometheus/ # Prometheus 차트 설정
│ │ ├── grafana/ # Grafana 차트 설정
│ │ └── node-exporter/ # Node Exporter 차트 설정
│ │
│ ├── alerting/ # 알림 시스템
│ │ └── alertmanager/ # Alertmanager 차트 설정
│ │
│ └── testing/ # 테스팅 도구
│ └── k6/ # K6 부하테스트 차트
│
├── scripts/ # 자동화 스크립트들
│ ├── [deploy.sh](<http://deploy.sh/>) # 배포 스크립트
│ ├── [destroy.sh](<http://destroy.sh/>) # 인프라 삭제 스크립트
│ └── [vault-setup.sh](<http://vault-setup.sh/>) # Vault 초기 설정 스크립트
│
├── [main.tf](<http://main.tf/>) # 메인 Terraform 구성 파일
├── [variables.tf](<http://variables.tf/>) # 전역 변수 정의
├── [outputs.tf](<http://outputs.tf/>) # 전역 출력 값
├── [terraform.tf](<http://terraform.tf/>) # Terraform 및 프로바이더 설정
└── [README.md](<http://readme.md/>) # 프로젝트 문서
테라폼 install 을 로컬에서 하는게 맞는지
자사용은 보통 안씀 - 운영비 줄이면서 고가용성 유지하고 싶음
프라이빗키 - 클러스터 따로 나누는 것보다 프라이빗 서브넷에 구성하면 될 것 같음
높은 권한/ 낮은 권한 별로 프로젝트 나누면 좋음
클러스터 전체에 영향을 주는것만 두기.
중요하게 생각하는게 뭔지 (보안이나 고가용성, 비용 등)