Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study_note

[kubernetes] Kubecost 파드, 노드 비용 최적화 툴 본문

Kubernetes

[kubernetes] Kubecost 파드, 노드 비용 최적화 툴

Study_note 2023. 3. 5. 18:13

업무를하다보면 어느 정도 자리가 잡힌 업체들은 가용성 - 보안성 이후에 비용을 최적화하려는 시도를 많이 봐왔다.

요즘은 FinOps라는 말이 생길정도로 비용 최적화는 비즈니스 가치를 극대화하는데 중요한 부분이다

 

---

FinOps는 엔지니어링, 재무, 기술, 비즈니스 팀이 데이터 중심 지출 결정에 협력할 수 있도록 지원함으로써 조직이 비즈니스 가치를 극대화할 수 있도록 지원하는 진화하는 클라우드 재무 관리 규범 이자 문화 이다.

---

 

Kubecost

Kubernetes에 대한 실시간 비용 가시성과 절감 인사이트를 제공 하는 오픈 소스 솔루션이다. 

 

Kubernetes와 같은 컨테이너 오케스트레이션의 채택이 많이 증가했지만 필요에 따라 확장 및 축소할 수 있는 컨테이너의 일시적인 특성으로 인해 복잡성이 더 크다

이런 복잡성을 해결하기 Kubecost는 지출 패턴과 리소스 효율성을 보여주며 Kubecost를 설치할 때 Prometheus 및 Grafana를 같이 설치하여 결과를 Prometheus와 같은 시계열 데이터베이스에 저장한다.

 

 

 

설치

 

 Kubecost는 공식 문서와 github에 정리가 잘되어있어 참고하면 편하다

https://www.kubecost.com/install.html#show-instructions

 

Get started - Kubecost

Kubecost is an open core tool that provides visibility into Kubernetes spend and resource allocation. It leverages this data to provide capacity management insights, avoid outages, and reduce costs. To gain access, enter your email below: By continuing, yo

www.kubecost.com

 

우선 helm을 통해 Kubecost를 설치한다.

helm install kubecost cost-analyzer \
--repo https://kubecost.github.io/cost-analyzer/ \
--namespace kubecost --create-namespace \
--set kubecostToken="d2xnanM0NDk0QG5hdmVyLmNvbQ==xm343yadf98"

(필자는 helm을 통해 ingress를 설치하려했지만 같이 설치 못했다. 레포를 따로 설치 않고 해당 명령어로 다운 받으니 차트 경로를 못찾는것 같다.)

 

 

해당 설치는 localhost:9090으로만 통신되기 때문에  kubecost-cost-analyzer라는 svc에 ingress를 연결시켰다

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: kubecost
  name: kubecost-ingress
  annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
      alb.ingress.kubernetes.io/certificate-arn: host에대한 acm arn
      alb.ingress.kubernetes.io/success-codes: 200-399
      alb.ingress.kubernetes.io/group.name: "cost"
spec:
  ingressClassName: alb
  rules:
  - host: cost.satest.click
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kubecost-cost-analyzer
            port:
               number: 9090

(필자는 acm arn을 변수로 배포를하려했지만 항상 ingress만 설치하면 변수가 잘안먹혀 에러가 발생한다...)

 

설치가 됐다면 지정한 host로 접근하면 kubecost에 접근할 수 있다.

 

대표적으로 몇가지 기능을 본다면

 

집계

allocations으로 이동하면 7일간 특정 리소스 별로 분석이 가능하다

아래와 같이 namespace, pod등 다양한 오브젝트 및 컨트롤러들을 선택할 수 있다.

 

savings

월 예상 절감액을 쉽게 구할수 있으며 Right Sizing Recommendation 기능을 통해 Container의 자원 및 노드의 사용율을 기반으로 적절한 Request CPU, Memory 값 및 노드의 타입 등을 추천해 준다. 

Conatiner는 node와는 다르게 설정된 request 값과, 실제 사용율, recommend 값도 알려주며 recommend값 적용시 절감할수 있는 비용까지 계산해서 보여준다.

(노드는 아래와 같이 recommend 값도 알려주며 recommend값 적용시 절감할수 있는 비용만 나온다)

 

만약 평소 사용율은 작지만 Peak 사용율이 높은 작업이 있다면 위에 recommend 값과 안맞지만 Profile에 따로 Custom 이라는 항목이 있어 해당 기능을 사용하면 좋은것 같다.

 

recommend 값은 기본적으로 사용률을 기반으로 계산되며 선택한 기간 동안 평균 사용율을 의미한다. 보통 kube-state-metrics 가 수집한 데이터를 사용한다.

 

결국에는 실제 CPU, Memory 사용율을 기반으로 계산하기 때문에, 직접 분석하는 것과 큰 차이는 없을것 같다.

하지만  직접 분석안하는다는게 단순하지만 큰 장점이며 노드 타입 최적화, 미사용 PV 비용 최적화, recommend 값 자동 적용 기능 등 다양한 기능도 지원하기 때문에 유용한 도구인것은 틀림없다.

 

추가적으로 recommend 값을 자동 적용하는 기능도 제공하고 있다. 이제 막 생성하는 Pod라면 request, limit 값 같은 QoS를 정할때 사용하면 좋은 기능이다.

 

https://docs.kubecost.com/apis/apis-overview/api-request-recommendation-apply

 

Container Request Recommendation "Apply" APIs - Kubecost Documentation

The Apply APIs only "size down," i.e. they will never increase a container requests, only lower them. This is currently done out of an abundance of caution while the APIs are being tested. We don't want to size up requests and cause a cluster that was runn

docs.kubecost.com

 

---

추가적으로 Kubecost git을 가보니 krew에서 해당 플러그인을 지원하는것을 보았다

Kubecost에서 api를 받아 지원하는거 같은데 내용은 다음과 같다

 

모든 비용 구성 요소가 표시된 각 네임스페이스의 예상 월간 요금을 표시합니다.

 

 CPU 및 메모리 비용과 효율성을 포함해서 지난 5일 동안 각 네임스페이스 비용을 표시합니다.

kubectl cost namespace \
  --historical \
  --window 5d \
  --show-cpu \
  --show-memory \
  --show-efficiency=true

 

cost-test.yaml에 정의된 배포 비용을 예측합니다.

 

등 아래와 같이 공식 github 참고하면 다양하게 cost 플러그인을 사용 가능하다.

https://github.com/kubecost/kubectl-cost

 

GitHub - kubecost/kubectl-cost: CLI for determining the cost of Kubernetes workloads

CLI for determining the cost of Kubernetes workloads - GitHub - kubecost/kubectl-cost: CLI for determining the cost of Kubernetes workloads

github.com

 

Comments