Published
- 3 min read
Kubecost 설치

개요
EKS 전환 후 Right-sizing을 위해 참고할만한 자료를 얻기 위해 kubecost를 설치했던 과정에 대한 내용이다.
EKS Add-on으로 설치하고 싶었으나 우리 서비스는 EKS 1.32로 설치 시점(약 3월경)에는 Add-on 미지원으로 인해 helm으로 설치하였다.
현재는 1.32까지 지원하고 있다. (1.33은 아직 미지원이다.)
참고: AWS 공식문서
Kubecost 설치
PV의 경우 EBS, EFS 둘 다 가능하나 현재 노드가 MultiAZ로 구성되어 있어 EFS로 선택하였다.
1. EKS module 내에 efs-csi-driver addon 추가
aws-efs-csi-driver = {
addon_version = "v2.1.7-eksbuild.1"
}
2. EFS생성, PV 및 PVC 생성
resource "aws_efs_file_system" "shared_storage" {
creation_token = "${var.name}-efs"
encrypted = true
kms_key_id = var.kms_key_id
}
resource "aws_efs_mount_target" "shared_storage" {
for_each = toset(var.subnet_ids)
file_system_id = aws_efs_file_system.shared_storage.id
subnet_id = each.value
}
resource "kubernetes_persistent_volume" "shared_storage" {
metadata {
name = "${var.name}-pv"
}
spec {
capacity = {
storage = "20Gi"
}
volume_mode = "Filesystem"
access_modes = ["ReadWriteMany"]
persistent_volume_reclaim_policy = "Retain"
storage_class_name = "efs-sc"
persistent_volume_source {
csi {
driver = "efs.csi.aws.com"
volume_handle = aws_efs_file_system.shared_storage.id
fs_type = "ext4"
}
}
}
}
resource "kubernetes_persistent_volume_claim" "shared_storage" {
metadata {
name = "kubecost-cost-analyzer"
namespace = "kubecost"
}
spec {
access_modes = ["ReadWriteMany"]
resources {
requests = {
storage = "20Gi"
}
}
volume_name = kubernetes_persistent_volume.shared_storage.metadata[0].name
storage_class_name = "efs-sc"
}
}
resource "kubernetes_storage_class" "efs_sc" {
metadata {
name = "efs-sc"
annotations = {
"storageclass.kubernetes.io/is-default-class" = "true"
}
}
storage_provisioner = "efs.csi.aws.com"
reclaim_policy = "Retain"
parameters = {
type = "gp3"
encrypted = "true"
}
}
3. helm을 통해 kubecost 설치
위에서 PV 구성 완료하였으므로 자동생성 옵션 제거
helm upgrade -i kubecost oci://public.ecr.aws/kubecost/cost-analyzer --version 2.7.0 \
--namespace kubecost --create-namespace \
--set persistentVolume.enabled=false \
--set prometheus.server.persistentVolume.enabled=false \
-f https://raw.githubusercontent.com/kubecost/cost-analyzer-helm-chart/develop/cost-analyzer/values-eks-cost-monitoring.yaml
4. 포트포워딩하여 접속
kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 9090
마치며
노드 타입 선택에도 도움이 됐지만 처음에 OOM으로 죽던 파드들의 Memory 조절에 가장 도움이 되었다.