본문 바로가기
IT & Tech 정보

AI-Driven Predictive Autoscaling as Code

by 지식과 지혜의 나무 2025. 5. 30.
반응형


Kubeflow Forecasting + Prometheus + KEDA Custom Scaler + Argo CD Self-Heal을 연동해, 실시간 메트릭과 **시계열 예측 모델(Prophet/TensorFlow)**을 활용하여 클러스터 워크로드를 사전 예측 기반으로 자동 확장·축소·복구하는 Predictive Autoscaling 파이프라인을 코드로 완전 자동화합니다.



🎯 목표
1. Git에 ForecastConfig CRD로 워크로드별 예측 윈도우·모델 파라미터 선언
2. Argo CD Sync → Kubeflow Pipelines가 과거 메트릭 데이터 수집 및 예측 모델(Prophet/TensorFlow) 학습
3. 학습된 모델을 컨테이너 이미지로 패키징·레지스트리에 푸시
4. Prometheus Adapter가 예측 결과(forecasted_replicas)를 Custom Metric으로 노출
5. KEDA Custom Scaler가 이 예측 메트릭을 기반으로 HPA 대신 사전 확장/축소 수행
6. Argo CD Self-Heal로 예측 스케일링 정의·모델 버전·KEDA ScaledObject를 자동 동기화·복구
7. Prometheus + Alertmanager로 예측 정확도·스케일 이벤트 모니터링 및 알림



⚙️ 핵심 구성 요소

계층 도구/CRD 역할
Forecast 정의 ForecastConfig CRD 서비스별 예측 윈도우, 모델 파라미터(주기·히스토리 길이) 선언
모델 학습 Kubeflow Pipelines + Prophet/TensorFlow 시계열 메트릭 기반 예측 모델 학습·평가·패키징
메트릭 수집 및 변환 Prometheus + Adapter PromQL 데이터 수집 → 예측 모델 인퍼런스 → forecasted_replicas 노출
Autoscaler KEDA Custom Scaler 예측 메트릭 기반 사전 스케일링(Up/Down)
GitOps 배포·자가 치유 Argo CD Self-Heal + ApplicationSet ForecastConfig, Pipeline, Model 이미지, ScaledObject 동기화
모니터링 & 알림 Prometheus + Alertmanager 예측 오차(alert if error > threshold), 스케일 이벤트 알림




🏗️ 파이프라인 워크플로우

flowchart TD
  A[Git Push: forecast-config/, pipelines/, models/]
    --> B[Argo CD Sync Kubeflow Pipelines & ForecastConfig]
  B --> C[Kubeflow PipelineRun: Fetch Prometheus Data]
  C --> D[Train Prophet/TF Model → Evaluate → Save Model]
  D --> E[Build & Push Model Image registry/predictor:${git_sha}]
  E --> F[Argo CD Sync Predictor Deployment & KEDA ScaledObject]
  
  subgraph Predictive Scaling Loop
    G[Prometheus Adapter] --> H[forecasted_replicas Metric]
    H --> I[KEDA Custom Scaler]
    I --> J[K8s Deployment scale to forecasted_replicas]
  end

  subgraph Monitoring & Healing
    K[Prometheus scrape: forecast_error_ratio, scaler_actions]
      --> L{error_ratio > 10%?}
    L -- Yes --> M[Alertmanager Slack 알림]
    L -- No  --> N[정상]
    B --> O[Argo CD Self-Heal Drift 검증 및 복구]
  end




🧪 주요 매니페스트 예시

1) ForecastConfig CRD & Sample CR

apiVersion: autoscale.example.com/v1alpha1
kind: ForecastConfig
metadata:
  name: webapp-predictive
spec:
  targetDeployment: webapp
  metricName: http_requests_per_minute
  historyWindow: 720h        # 과거 30일
  forecastHorizon: 1h        # 1시간 예측
  retrainInterval: 24h       # 매일 재학습
  modelType: prophet

2) Kubeflow Pipeline (train-forecast)

@dsl.pipeline(name='forecast-pipeline')
def forecast_pipeline(config: str):
    fetch = dsl.ContainerOp(
        name='fetch-data',
        image='python:3.9',
        command=['python','fetch_prom_data.py','--config',config],
        file_outputs={'data_path':'/data/history.csv'}
    )
    train = dsl.ContainerOp(
        name='train-model',
        image='python:3.9',
        command=['python','train_prophet.py',
                 '--input',fetch.outputs['data_path'],
                 '--output','/model/model.pkl']
    ).after(fetch)
    pack = dsl.ContainerOp(
        name='package-model',
        image='docker',
        command=['docker','build','-t','registry/predictor:{{workflow.parameters.git_sha}}','.'],
    ).after(train)

3) KEDA Custom ScaledObject

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: webapp-predictive-scaler
spec:
  scaleTargetRef:
    name: webapp
  pollingInterval: 60
  cooldownPeriod: 300
  minReplicaCount: 2
  maxReplicaCount: 20
  advanced:
    usePrediction: true    # custom flag
  triggers:
    - type: prometheus
      metadata:
        serverAddress: http://prometheus.monitoring.svc:9090
        query: forecasted_replicas{deployment="webapp-predictive"}
        threshold: "1"




✅ 기대 효과
• 사전 대응적 스케일링: 트래픽 급증 전에 예측 스케일업
• 리소스 최적화: 과잉 스케일링 방지, 비용 절감
• 모델 기반 운영: 단순 임계치가 아니라 시계열 모델로 결정
• GitOps 투명성: 예측 설정·모델 학습 코드·스케일 정책 모두 Git 이력으로 관리
• 자가 치유: 모델 버전·ScaledObject drift 발생 시 자동 복구



반응형