본문 바로가기
카테고리 없음

Cloud Cost Optimization as Code: Kubecost + OPA Gatekeeper + KEDA + Argo CD

by frontier12 2025. 5. 29.

기반 예산·비용 거버넌스 파이프라인



🎯 목표

“코드로 예산·비용 한도를 선언하고, 실제 사용량이 설정값을 초과할 때 자동 알림·스케일링·차단·자가 복구까지 실행”하는 CostOps 파이프라인을 구축합니다.



⚙️ 핵심 구성 요소

계층 도구/CRD 역할
비용 모니터링 Kubecost 네임스페이스·태그별 비용 집계·예산 관리
정책 검증 OPA Gatekeeper 예산 한도를 넘는 리소스 생성/스케일링 차단
오토스케일링 KEDA ScaledObject 비용 초과 알림 시 특정 워크로드 자동 축소/중지
알림 & 보고 Prometheus + Alertmanager + Slack 비용 이상치 감지 → Slack 실시간 보고
GitOps 배포 Argo CD Application & Self-Heal 예산 정책 CR, Kubecost ConfigMap, KEDA 리소스 동기화




🏗️ 워크플로우

flowchart LR
  A[Git Push: BudgetPolicy CR, Kubecost Config]
    --> B[Argo CD Sync]
  B --> C[BudgetPolicy 적용]
  C --> D[Kubecost 실제 비용 모니터링]
  D --> E{Namespace 비용 > 선언 예산?}
  E -- No --> F[정상 운영]
  E -- Yes --> G[Alertmanager Webhook]
  G --> H[Slack 경고 & GitHub Dispatch]
  G --> I[KEDA 축소 트리거]
  I --> J[비용 과다 워크로드 축소/중지]
  H --> K[GitHub Actions: 예산초과 이력 커밋]
  K --> B[Argo CD Self-Heal (차단·복구 정책 적용)]




🧪 실전 매니페스트 예시

1) BudgetPolicy CR

apiVersion: costops.example.com/v1alpha1
kind: BudgetPolicy
metadata:
  name: prod-namespace-budget
spec:
  namespace: production
  monthlyBudget: 5000   # USD
  alertThresholds:
    - percent: 80
      action: notify
    - percent: 100
      action: scaleDown

2) Kubecost ConfigMap (GitOps)

apiVersion: v1
kind: ConfigMap
metadata:
  name: kubecost-cost-analyzer
  namespace: kubecost
data:
  budgets.yaml: |
    - name: "prod"
      namespace: "production"
      budget: 5000
      alerts:
        - threshold: 80
          webhook: "http://alertmanager.default.svc/alert"
        - threshold: 100
          webhook: "http://alertmanager.default.svc/alert"

3) OPA Gatekeeper Constraint (Block ScaleUp)

package costops.block

violation[{"msg": msg}] {
  input.review.object.kind == "Deployment"
  input.review.object.metadata.namespace == "production"
  cost := kubecost_get_namespace_cost("production")
  cost > 10000
  msg := sprintf("Production 네임스페이스 비용(%.2f USD)이 한도 초과", [cost])
}

4) KEDA ScaledObject (Cost Overrun 기반)

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: costops-scale-down
  namespace: production
spec:
  scaleTargetRef:
    kind: Deployment
    name: expensive-service
  triggers:
    - type: prometheus
      metadata:
        serverAddress: http://prometheus.monitoring.svc:9090
        query: kubecost_namespace_spend_total{namespace="production"} > 5000
        threshold: "1"
  minReplicaCount: 0
  maxReplicaCount: 10




✅ 기대 효과
• 사전 비용 통제: 개발자가 별도 대시보드 없이 Git CR로 예산 설정
• 실시간 알림·자동 대응: 예산 80% 도달 시 Slack, 100% 초과 시 자동 축소 또는 중지
• 정책 기반 배포 차단: 예산 초과 시 추가 스케일업·리소스 생성 정책 차단
• GitOps 이력화: 예산 정책 변경, 비용 초과 사건, 자동 축소 이력 모두 Git 커밋



🔧 확장 포인트
• Spot 인스턴스 활용: cost ops 이벤트로 워크로드를 스팟 노드로 자동 이동
• Reserved Instances 상태 연동: 가동률·예약 인스턴스 활용률 최적화 정책 추가
• Cross-Cluster 정책: 멀티 클러스터 예산풀 할당·통제
• Visual Dashboard: Grafana + Kubecost 플러그인으로 예산현황 실시간 시각화