본문 바로가기
Tech/Kubernetes

[AEWS_1기] 4주차 - Observability (6/6) - kubecost

by 구름_쟁이 2023. 5. 19.

 

 

본 시리즈는 가시다님의 AEWS(AWS EKS Workshop) 1기 진행 내용입니다. (가시다님 노션)

스터디에 사용되는 링크 (AWS EKS Workshop) 

 

목차

1. Logging in EKS (링크)
2. Container Insights metrics in Amazon CloudWatch & Fluent Bit (Logs) (링크)
3. Metrics-server & kwatch & botkube (링크)
4. 프로메테우스-스택 (링크)
5. 그라파나 Grafana (링크)

6. kubecost

 

 

 

EKS 클러스터 세팅 (Cloudformation)

https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick3.yaml

 

 

 


6. kubecost

소개

OpenCost 링크를 기반으로 구축되었으며 AWS에서 적극 지원, 쿠버네티스 리소스별 비용 분류 가시화 제공

  • Pricing - 링크 : Free(메트릭 15일 보존, Business(메트릭 30일 보존, …), Enterprise(.)
  • Amazon EKS cost monitoring with Kubecost architecture - 링크

데보션-링크

 

설치 및 웹 접속

- 링크 Chart Gallery

 

# 
cat <<EOT > cost-values.yaml
global:
  grafana:
    enabled: true
    proxy: false

priority:
  enabled: false
networkPolicy:
  enabled: false
podSecurityPolicy:
  enabled: false

persistentVolume:
    storageClass: "gp3"

prometheus:
  kube-state-metrics:
    disabled: false
  nodeExporter:
    enabled: true

reporting:
  productAnalytics: true
EOT

# kubecost chart 에 프로메테우스가 포함되어 있으니, 기존 프로메테우스-스택은 삭제하자 : node-export 포트 충돌 발생
helm uninstall -n monitoring kube-prometheus-stack

# 배포
kubectl create ns kubecost
helm install kubecost oci://public.ecr.aws/kubecost/cost-analyzer --version 1.103.2 --namespace kubecost -f cost-values.yaml

# 배포 확인
kubectl get-all -n kubecost
kubectl get all -n kubecost

# kubecost-cost-analyzer 파드 IP변수 지정 및 접속 확인
CAIP=$(kubectl get pod -n kubecost -l app=cost-analyzer -o jsonpath={.items[0].status.podIP})
curl -s $CAIP:9090

# 외부에서 bastion EC2 접속하여 특정 파드 접속 방법 : socat(SOcket CAT) 활용 - 링크
yum -y install socat
socat TCP-LISTEN:80,fork TCP:$CAIP:9090
웹 브라우저에서 bastion EC2 IP로 접속

 

 

CAIP가 안나오는 문제

더보기

values.yaml 에서 gp3로 설정했던 게 기억나서 gp2로 변경

# kubectl get event -n kubecost -w 로 확인한 결과

waiting for a volume to be created, either by external provisioner "ebs.csi.aws.com" or manually created by system administrator

## kubecost-cost-analyzer 와 kubecost-prometheus-server 에 대해서 위 에러 발생
## 귀찮아서 local-path provisional 설치 후 StorageClassName을 local-path로 변경

# 그 이후 kubecost-prometheus-server 만 ebs.csi.aws.com 에러 지속
## values.yaml에 관련 내용 추가하면 해결 될 것으로 보임!

 

 

위 상태에서는 kubecost 화면에 빨간 테두리 쪽이 하나도 보이지 않았다 (몇분이 지나도)

 

그럴 때 해결방법

더보기

원인 : 아까 제대로 설정 안해준 prometheus-server 를 살려야 한다.

우선 helm chart를 보러가자

(Helm)

 

 경로 파악했고, 저기에 대략 storageclass 끼워넣으면 적용될 것 같다.

 

아까 local-path StorageClass를 만들어놨기에 그걸로 사용하자.

global:
  grafana:
    enabled: true
    proxy: false

priority:
  enabled: false
networkPolicy:
  enabled: false
podSecurityPolicy:
  enabled: false

persistentVolume:
    storageClass: "local-path"

prometheus:
  kube-state-metrics:
    disabled: false
  nodeExporter:
    enabled: true
  server:
    persistentVolume:
      enabled: true
      storageClass: "local-path"


reporting:
  productAnalytics: true
# 삭제 후 다시 배포 (upgrade 정상 동작되지 않음)
helm uninstall kubecost -n kubecost

helm install kubecost oci://public.ecr.aws/kubecost/cost-analyzer --version 1.103.2 --namespace kubecost -f cost-values.yaml

 

kubectl get event -n kubecost

다시 kubecost 페이지로 이동!

 

짝짝짝짝

Possible Savings 쪽이랑 Cluster Efficiency 쪽이 이상해보이는데

Possible Savings의 View report를 누르면 이렇다.

Monitor-Allocations

 

뿌듯-!

 

 

# 삭제
helm uninstall -n kubecost kubecost

 

 

 

결론

kubecost는 정말로 실습해보고 싶었는데 드디어 여기까지 왔다.

이제 점점 트러블슈팅도 해왔던 짬으로 해결해나가곤 하는 모습이 스스로 뿌듯하다.

 

 

 

댓글