본 시리즈는 가시다님의 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 - 링크
- 수집 - 링크
설치 및 웹 접속
#
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는 정말로 실습해보고 싶었는데 드디어 여기까지 왔다.
이제 점점 트러블슈팅도 해왔던 짬으로 해결해나가곤 하는 모습이 스스로 뿌듯하다.
'Tech > Kubernetes' 카테고리의 다른 글
[AEWS_1기] 5주차 - EKS Autoscaling (2/6) - KEDA (0) | 2023.05.22 |
---|---|
[AEWS_1기] 5주차 - EKS Autoscaling (1/6) - HPA (0) | 2023.05.22 |
[AEWS_1기] 4주차 - Observability (5/6) - 그라파나 Grafana (0) | 2023.05.19 |
[AEWS_1기] 4주차 - Observability (4/6) - 프로메테우스-스택 (0) | 2023.05.19 |
[AEWS_1기] 4주차 - Observability (3/6) - Metrics-server & kwatch & botkube (0) | 2023.05.19 |
댓글