생산 환경(K8s)에서 이 실시간 에이전트를 안정적으로 구동하기 위해서는 단독 Pod보다는 자가 치유(Self-healing)와 롤링 업데이트가 보장되는 Deployment로 띄우는 것이 정석입니다.
특히 스크립트 내부에서 K8s API를 호출해 장애 포트의 로그 백로그(Tail)를 읽어오는 로직이 있으므로, 포드가 로그를 읽을 수 있도록 권한을 부여하는 RBAC(ServiceAccount, Role, RoleBinding) 설정까지 한 번에 묶어서 배포해야 크래시가 나지 않습니다.
컨테이너화부터 K8s 완전 배포까지의 올인원 패키지 아키텍처 명세입니다.
스크립트와 동일한 위치에 Dockerfile을 생성하고 아래 내용을 저장합니다. 이미지 레이어 최적화를 위해 경량화 버전인 slim 이미지를 베이스로 삼습니다.
FROM python:3.11-slim
WORKDIR /app
# 부하가 큰 Polars 및 FastAPI 고속 캐시 설치
RUN pip install --no-cache-dir fastapi uvicorn polars requests
# 에이전트 핵심 파일 복사
COPY sre_jit_rca_agent.py /app/sre_jit_rca_agent.py
# FastAPI 기본 포트 개방
EXPOSE 8080
# Uvicorn 비동기 WAS 엔진 가동
CMD ["uvicorn", "sre_jit_rca_agent:app", "--host", "0.0.0.0", "--port", "8080"]
💡 이미지 빌드 및 푸시 명령어 가이드:
docker build -t your-registry.internal.zone/monitoring/sre-jit-agent:v1.0 . docker push your-registry.internal.zone/monitoring/sre-jit-agent:v1.0
sre-jit-agent-manifest.yaml)RBAC 권한 부여, Deployment 사양, 그리고 이전에 설계한 ClusterIP Service까지 완벽하게 정렬한 단일 파일 통합본입니다. 사내 인프라 환경에 맞춰 환경변수(value) 영역만 수정하여 사용하시면 됩니다.
apiVersion: v1
kind: ServiceAccount
metadata:
name: sre-jit-agent-sa
namespace: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: sre-jit-log-reader
namespace: monitoring
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"] # ◀ 포드의 실시간 로그 덤프를 긁어오기 위한 필수 핵심 권한
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: sre-jit-agent-rbac-binding
namespace: monitoring
subjects:
- kind: ServiceAccount
name: sre-jit-agent-sa
namespace: monitoring
roleRef:
kind: Role
name: sre-jit-log-reader
apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sre-jit-rca-agent
namespace: monitoring
labels:
app: sre-jit-rca-agent
spec:
replicas: 1 # 실시간 정황 조율 에이전트이므로 1개 파티션으로 동기화 유지
selector:
matchLabels:
app: sre-jit-rca-agent
template:
metadata:
labels:
app: sre-jit-rca-agent
spec:
serviceAccountName: sre-jit-agent-sa # 위에서 생성한 권한 컴포넌트 결착
containers:
- name: agent-core
image: your-registry.internal.zone/monitoring/sre-jit-agent:v1.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: http-port
env:
# ─── ⚙️ 사내 데이터 레이크하우스 토폴로지 맞춤형 환경변수 ───
- name: THANOS_QUERY_URL
value: "http://thanos-querier.monitoring.svc:9090"
- name: INTERNAL_LLM_API_KEY
value: "sk-company-sre-brain-token-xxxxxx"
- name: SLACK_WEBHOOK_URL
value: "https://hooks.slack.com/services/T00/B00/X00"
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "512Mi" # Polars 메모리 연산 버퍼를 감안한 넉넉한 쿼터 제공
---
apiVersion: v1
kind: Service
metadata:
name: sre-jit-agent
namespace: monitoring
spec:
selector:
app: sre-jit-rca-agent
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: ClusterIP
작성된 통합 매니페스트를 클러스터에 적용하고 런타임 상태를 모니터링합니다.
# 1. 아키텍처 전반 레이어 일괄 배포 구동
kubectl apply -f sre-jit-agent-manifest.yaml
# 2. 포드 기동 상태 및 이벤트 트레이스 체크
kubectl get pod -n monitoring -l app=sre-jit-rca-agent
# 3. 인프라 실시간 내부 로그 테일링 (Uvicorn 바인딩 상태 확인)
kubectl logs -f -n monitoring -l app=sre-jit-rca-agent
위 셋업이 끝나면 [http://sre-jit-agent.monitoring.svc.cluster.local:8080/alert-webhook](http://sre-jit-agent.monitoring.svc.cluster.local:8080/alert-webhook) 수신 주소가 클러스터 내부 네트워킹에 완벽히 바인딩됩니다. 이제 Alertmanager 경보가 터질 때마다 이 포드가 권한 위반(403 Forbidden) 에러 없이 타겟 포드의 로그와 메트릭을 순식간에 수집하여 사내 LLM으로 온디맨드 추론을 수행하게 됩니다.