james
(최동진)
April 27, 2025, 12:17am
1
현재 Terraform을 사용해서 AWS EKS 클러스터를 관리하고 있습니다. 이제 Prometheus와 Grafana를 배포해서 클러스터와 애플리케이션에 대한 모니터링을 구축하고 싶습니다. 목표는 다음과 같습니다:
Prometheus를 설치하고, Kubernetes 리소스 메트릭을 수집하고 싶습니다.
Grafana를 설치해서 Prometheus 데이터를 시각화하고 싶습니다.
모든 리소스는 Terraform을 통해 관리하고 싶습니다.
Helm 차트를 사용할 수 있다는 것은 알고 있습니다. 그러나 정확히 Terraform 코드에서 Helm provider를 어떻게 설정하고, 어떤 값을 override해야 Prometheus와 Grafana가 EKS 환경에 제대로 동작할 수 있는지 명확하지 않습니다.
혹시 Terraform으로 EKS에 Prometheus와 Grafana를 배포한 경험이 있으신 분 계신가요? Terraform 코드 예시나 구체적인 설정 팁을 공유해주실 수 있나요?
2 Likes
peter
(장인수)
April 27, 2025, 12:18am
2
Terraform을 사용해서 EKS에 Prometheus와 Grafana를 배포하는 방법은 다음과 같이 접근할 수 있습니다:
Helm Provider 설정
Terraform에서 Helm provider를 먼저 설정해야 합니다. 대략 다음과 같이 설정할 수 있습니다:
hcl
Copy
provider "helm" {
kubernetes {
config_path = "~/.kube/config"
}
}
또는 aws_eks_cluster
리소스에서 가져온 kubeconfig를 직접 설정할 수도 있습니다.
2. Prometheus Helm 차트 배포
kube-prometheus-stack
차트를 사용하는 것이 가장 일반적입니다. 다음과 같은 리소스를 추가하세요:
hcl
Copy
resource "helm_release" "kube_prometheus" {
name = "kube-prometheus-stack"
repository = "https://prometheus-community.github.io/helm-charts"
chart = "kube-prometheus-stack"
namespace = "monitoring"
set {
name = "prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues"
value = "false"
}
}
Grafana 설정
kube-prometheus-stack
차트에는 Grafana도 포함되어 있으므로, 별도로 설치할 필요가 없습니다. 기본 관리자 비밀번호는 Helm values 파일을 통해 설정할 수 있습니다.예를 들어:
hcl
Copy
set {
name = "grafana.adminPassword"
value = "your-secure-password"
}
Namespace와 RBAC
모니터링 전용 namespace(monitoring
)를 만들고 필요한 권한(RBAC)을 사전에 설정해두는 것이 중요합니다.
Ingress 추가(Optional)
외부에서 Grafana 대시보드에 접근하려면 Ingress를 설정해야 합니다. EKS에서는 ALB Ingress Controller를 함께 사용하는 것도 좋은 방법입니다.
추가 팁: terraform-provider-helm
과 terraform-provider-kubernetes
의 버전 호환성도 신경 써야 합니다. 최신 버전을 사용하는 것을 추천합니다.
1 Like
goodseed
(kiha Lee)
May 7, 2025, 5:37am
3
안녕하세요.
제가 AKS에서 테스트 했을 때는 Terraform을 사용해서 VM을 생성하고,
Ansible이나 shell script를 사용해서 helm 을 실행했습니다.
첫 댓글을 작성하신 분처럼 Terraform에서 Helm을 호출해도 될 뜻하구요,
아니면 Terraform에서 Ansible을 호출해서 처리하는 것도 방법일 뜻 합니다.
생각에 따라서 Terraform으로 VM이나 EKS를 생성하고 나면
Kubernertes 내에서는 자유롭게 shell script를 사용해서 Helm을 사용해도 괜찮을 뜻 합니다.
용도에 따라서 다르겠지만, 여러가지 방식으로 고민해 보시는 것도 좋을 뜻 합니다.
고맙습니다.
2 Likes
cloudbro_ai
(CloudBro AI for AI response)
May 7, 2025, 5:48am
4
[CloudBro AI Bot Response]
안녕하세요!
말씀하신 것처럼 Terraform으로 인프라(예: VM, EKS 클러스터)를 프로비저닝한 후, 그 위에서 Ansible이나 shell script로 Helm을 실행하는 방식이 많이 사용됩니다. Terraform 자체에서도 Helm provider를 통해 Helm 차트를 직접 배포할 수 있지만, 복잡한 애플리케이션 배포나 세밀한 설정이 필요할 땐 Ansible이나 스크립트를 활용하는 편이 유연할 수 있죠.
즉, 상황과 목적에 따라 다음과 같은 선택지가 있습니다:
Terraform + Helm Provider : 인프라와 Helm 배포를 한 번에 관리하고 싶을 때 유용합니다.
Terraform + Ansible : 인프라 생성 후 애플리케이션 배포 및 설정을 Ansible로 처리하며, 복잡한 배포 로직을 다루기 좋습니다.
Terraform + Shell Script (kubectl/helm CLI) : 간단한 자동화나 커스텀 스크립트가 필요할 때 적합합니다.
각 방법의 장단점과 팀의 운영 방식, 자동화 수준에 맞춰 적절히 선택하시면 좋겠습니다.
필요하시면 구체적인 예제나 설정 방법도 안내해 드릴 수 있으니 언제든 질문해 주세요!
1 Like