26J30e2

Young-Kyoo Kim·2026년 6월 29일

임시 요구사항(특정 기간 조회, 특정 클러스터 유형 격리 정산 등)을 현업의 요청이 있을 때마다 배치 코드 수정 없이 온디맨드로 즉시 가동(Ad-hoc 실행)할 수 있는 두 가지 실행 표준 가이드입니다.

쿠버네티스(Kubernetes) 환경의 특성을 살려 1) 쉘 스크립트의 환경변수 자동 매핑 최적화2) K8s 일회성 작업 객체(One-shot Job)를 활용한 마스터 실행법을 제시합니다.


🏃 방법 1. 환경변수 기반 범용 엔트리포인트 (run_pipeline.sh 개정)

임시 기동 시 파라미터가 유연하게 하방 스크립트(step1, 2, 3, 6)로 전달되도록 run_pipeline.sh환경변수 인지형(Env-Aware) 구조로 변경합니다. 이 스크립트 하나로 일배치와 임시 조회를 모두 커버할 수 있습니다.

#!/bin/bash
# run_pipeline.sh (최종 통합 범용 버전)
set -e

echo "=== [FinOps 데이터 레이크하우스 파이프라인 엔진 기동] ==="

# ── ⏱️ 1. 기간 파라미터 동적 조율 ──
# 환경변수가 지정되지 않았다면 기본값으로 자동 세팅
STEP=${STEP:-"1m"}
CLUSTER_TYPE=${CLUSTER_TYPE:-"ALL"}

ARGS_STEP1=""
ARGS_STEP2=""

if [ ! -z "$START_DATE" ] && [ ! -z "$END_DATE" ]; then
    echo "📅 [절대 범위 모드] KST $START_DATE ~ $END_DATE 정산 예정"
    ARGS_STEP1="--start-date $START_DATE --end-date $END_DATE --step $STEP"
    ARGS_STEP2="--start-date $START_DATE --end-date $END_DATE"
elif [ ! -z "$DAYS" ]; then
    echo "📅 [상대 범위 모드] 최근 $DAYS일치 데이터 정산 예정"
    ARGS_STEP1="--days $DAYS --step $STEP"
    ARGS_STEP2="--days $DAYS"
else
    echo "📅 [데일리 일배치 모드] 전일 24시간 자동 징수 및 마감 정산"
    ARGS_STEP1="--days 1 --step $STEP"
    # step2에 아무 인자도 안 주면 코드가 자동으로 어제 자정 윈도우 계산
    ARGS_STEP2=""
fi

# ── 🌐 2. 클러스터 격리 파라미터 조율 ──
if [ ! -z "$CLUSTER_NAME" ]; then
    echo "🌐 [인프라 격리] 특정 클러스터 단독 정산: $CLUSTER_NAME"
    ARGS_STEP2="$ARGS_STEP2 --cluster $CLUSTER_NAME"
else
    echo "🌐 [인프라 격리] 클러스터 유형 도메인 필터: $CLUSTER_TYPE"
    ARGS_STEP2="$ARGS_STEP2 --cluster-type $CLUSTER_TYPE"
fi

# ── 🚀 3. 파이프라인 순차 집행 ──
# 💡 팁: 만약 과거 데이터를 타노스에서 다시 긁을 필요가 없고 MinIO 레이크에 이미 데이터가 100% 채워져 있다면
#        환경변수로 SKIP_STEP1=true 를 주어 타노스 징수 단계를 패스할 수 있습니다.
if [ "$SKIP_STEP1" = "true" ]; then
    echo "⏭️  [SKIP] Thanos 원천 징수를 건너뛰고 MinIO 레이크하우스 데이터만 재처리합니다."
else
    echo "▶️ [1/4] step1_prom_fetch.py 가동 규칙: $ARGS_STEP1"
    python step1_prom_fetch.py $ARGS_STEP1
fi

echo "▶️ [2/4] step2_pipeline.py 가동 규칙: $ARGS_STEP2"
python step2_pipeline.py $ARGS_STEP2

echo "▶️ [3/4] step3_analytics.py 추이 장표 드로잉 중..."
python step3_analytics.py

echo "▶️ [4/4] step6_excel_builder.py 성적표 빌드 및 MinIO 최종 배포 중..."
python step6_excel_builder.py

echo "🎉 === [FinOps 프로세스 가동 성공 종료] ==="

☸️ 방법 2. 쿠버네티스 Ad-hoc Job 매니페스트로 기동 (가장 추천)

일일 새벽 스케줄러(CronJob)와 별개로, 현업의 임시 요청이 올 때마다 YAML의 env 설정만 바꿔서 kubectl apply로 쏘는 일회성 정산 포드(Job) 구성안입니다. PVC가 없는 emptyDir: {} 구조이므로 여러 개를 동시에 띄워도 클러스터 디스크에 영향이 없습니다.

📋 [임시 시나리오 2 실행용] finops-adhoc-compute-range.yaml

  • 목적: 2026-06-01 ~ 2026-06-07 기간의 연산(Compute) 클러스터 단독 결산
apiVersion: batch/v1
kind: Job
metadata:
  name: finops-adhoc-compute-june
  namespace: infrastructure-system
spec:
  ttlSecondsAfterFinished: 3600 # 작업 종료 1시간 후 K8s가 포드 로그를 자동 청소
  template:
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
        fsGroup: 1000
      containers:
      - name: analyzer
        image: registry.internal.zone/finops/infrastructure-analyzer:v1.1.0
        
        # ── 💡 [핵심] 임시 기동 조건 환경변수 주입 구역 ──
        env:
        - name: START_DATE
          value: "2026-06-01"
        - name: END_DATE
          value: "2026-06-07"
        - name: CLUSTER_TYPE
          value: "COMPUTE" # 스토리지 노드는 메모리 상방에서 전수 필터 드롭
        - name: SKIP_STEP1
          value: "false"   # 해당 과거 기간 데이터가 MinIO에 없을지 모르니 Thanos에서 징수 동행
        
        # 사내 인프라 코어 접속 정보 (동일 유지)
        - name: THANOS_QUERY_URL
          value: "http://thanos-query.internal.zone:9090"
        - name: MINIO_ENDPOINT
          value: "http://minio-service.storage-system.svc.cluster.local:9000"
        - name: MINIO_BUCKET_NAME
          value: "enterprise-finops-raw-lake"
        - name: MINIO_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              name: minio-aistor-secret
              key: accesskey
        - name: MINIO_SECRET_KEY
          valueFrom:
            secretKeyRef:
              name: minio-aistor-secret
              key: secretkey
        resources:
          requests:
            cpu: "2"
            memory: "4Gi"
          limits:
            cpu: "4"
            memory: "8Gi"
        volumeMounts:
        - name: workspace
          mountPath: /app/data
      restartPolicy: Never
      volumes:
      - name: workspace
        emptyDir: {}
  • 실행 커맨드:
kubectl apply -f finops-adhoc-compute-range.yaml
# ➡️ 생성되는 파일명: finops_report_compute_2026-06-01_to_2026-06-07.xlsx

📋 [임시 시나리오 3 실행용] finops-adhoc-storage-7d.yaml

  • 목적: 최근 7일 동안의 prod-storage-cluster 단독 인프라 정산 리포트 추출
apiVersion: batch/v1
kind: Job
metadata:
  name: finops-adhoc-storage-weekly
  namespace: infrastructure-system
spec:
  ttlSecondsAfterFinished: 3600
  template:
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
        fsGroup: 1000
      containers:
      - name: analyzer
        image: registry.internal.zone/finops/infrastructure-analyzer:v1.1.0
        env:
        # ── 💡 최근 7일치 스캔 및 특정 스토리지 클러스터 실명 타겟팅 주입 ──
        - name: DAYS
          value: "7"
        - name: CLUSTER_NAME
          value: "prod-storage-cluster"
        - name: SKIP_STEP1
          value: "true" # 매일 새벽 배치로 MinIO 레이크에 데이터가 이미 차있으므로 타노스 스킵 (초고속 모드)
          
        - name: THANOS_QUERY_URL
          value: "http://thanos-query.internal.zone:9090"
        - name: MINIO_ENDPOINT
          value: "http://minio-service.storage-system.svc.cluster.local:9000"
        - name: MINIO_BUCKET_NAME
          value: "enterprise-finops-raw-lake"
        - name: MINIO_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              name: minio-aistor-secret
              key: accesskey
        - name: MINIO_SECRET_KEY
          valueFrom:
            secretKeyRef:
              name: minio-aistor-secret
              key: secretkey
        resources:
          requests:
            cpu: "2"
            memory: "4Gi"
          limits:
            cpu: "4"
            memory: "8Gi"
        volumeMounts:
        - name: workspace
          mountPath: /app/data
      restartPolicy: Never
      volumes:
      - name: workspace
        emptyDir: {}
  • 실행 커맨드:
kubectl apply -f finops-adhoc-storage-7d.yaml
# ➡️ 생성되는 파일명: finops_report_prod-storage-cluster_recent_7days.xlsx

🔍 실행 상태 실시간 모니터링 및 완료 검증 프로시저

Ad-hoc Job을 실행한 후 배치가 정상적으로 동작하고 완료되었는지 확인하는 인프라 리드 명령어 트랙입니다.

# 1. 포드 기동 상태 및 어느 워커 노드에 할당되었는지 실시간 트래킹
kubectl get pods -n infrastructure-system -l job-name=finops-adhoc-storage-weekly -w

# 2. 내부 파이썬 판독 로그 및 MinIO 최종 전수 완료 메시지 실시간 스트리밍 확인
kubectl logs -n infrastructure-system -l job-name=finops-adhoc-storage-weekly -f

# 3. 작업이 정상 종료(Completed)되었는지 총괄 확인
kubectl get job -n infrastructure-system finops-adhoc-storage-weekly

작업이 종료되면 코드가 알아서 MinIO AIStor의 reports/ 버킷 내부 경로에 고유한 접미사가 붙은 엑셀 원부를 드랍하므로, 인프라팀은 웹 콘솔에서 해당 주소만 다운로드 받아 요청 부서에 즉각 메일로 회신해 줄 수 있는 완벽한 온디맨드 운영 체계가 정립됩니다.

0개의 댓글