Geo-MLOps 는 서비스 개수가 적습니다. 사용자가 만나는 것은 앱 하나(포트 10000) 이고, 그 안에 API·MLflow·컨테이너 레지스트리가 모두 들어 있습니다. 나머지는 데이터를 담는 곳(Postgres·RustFS), 지켜보는 곳(Prometheus·Alertmanager), 그리고 빌드를 빠르게 하는 캐시입니다. 웹 화면은 정적 파일 묶음이라 앱과 따로 올리고, 브라우저가 이 앱의 API 를 부릅니다.

Geo-MLOps 설치 구성도: 앱 컨테이너, PostgreSQL, RustFS, 모니터링, k3s 클러스터, 빌드 패키지 캐시

앱 (포트 10000)

docker-compose.ymlapp 서비스입니다. 호스트 네트워크(network_mode: host)로 떠서, 설정 없이도 localhost 의 Postgres·RustFS·Prometheus 와 k3s API 에 닿습니다.

경로무엇
/api/v1/…, /auth/…웹 화면과 CLI 가 쓰는 REST API. /docs 에 API 문서가 있습니다
/mlflow내장 MLflow 트래킹 서버. MLflow 파이썬 클라이언트를 <주소>/mlflow 로 향하게 하면 그대로 동작합니다. MLflow 서버를 따로 띄우지 않습니다
/v2내장 OCI 컨테이너 레지스트리. docker push/pull 이 되는 레지스트리이며, 학습·빌드·서빙 이미지가 여기 저장됩니다. 별도 registry 컨테이너가 필요 없습니다

앱은 시작할 때마다 다음을 스스로 합니다.

  1. DB 스키마 마이그레이션(alembic upgrade head): start-uvicorn.sh 가 서버를 띄우기 전에 실행합니다
  2. 시드(초기 데이터 넣기): 부트스트랩 관리자 계정과 공유 빌드 이미지 자리를 만듭니다(이미 있으면 건드리지 않음)
  3. 테넌트별 MLflow 워크스페이스 준비, 재시작으로 끊긴 작업(이미지 반입·업로드 조립 등) 정리
  4. 백그라운드 작업 시작: 학습 큐, 빌드 감시, 서빙 하트비트, 엣지 플릿 점검

PostgreSQL (포트 5433)

앱과 MLflow 가 같은 데이터베이스, 같은 public 스키마를 씁니다. 백업도 덤프 한 번이면 됩니다.

RustFS (포트 9000, 콘솔 9001)

S3 호환 오브젝트 저장소입니다. 버킷은 용도별로 나뉩니다.

버킷담는 것
mlflowMLflow 아티팩트(모델 파일 등), 사전학습 가중치 미러
datasets데이터셋 파일
registry컨테이너 이미지 레이어·매니페스트(테넌트별로 나뉨)
build-logs이미지 빌드 로그
edge-uploads엣지 장비가 오프라인 동안 모았다가 올린 파일

mlflow·datasets·registry 는 Compose 의 createbucket 이 처음에 만들고, build-logs·edge-uploads 는 앱이 처음 쓸 때 만듭니다.

Prometheus (9090) · Alertmanager (9093)

Prometheus 가 앱의 /api/v1/metrics 에서 지표를 주기적으로 모으고 경보 규칙을 검사합니다. 경보가 울리면 Alertmanager 가 앱의 웹훅으로 되돌려 보내고, 앱의 경보 화면에 나타납니다. 두 도구의 웹 화면은 앱의 시스템 콘솔(Prometheus, Alertmanager)에서 대신 보여 주므로, 사용자가 9090·9093 에 직접 들어갈 일은 없습니다.

k3s 클러스터

학습, 이미지 빌드, 모델 서빙은 모두 k3s 의 파드로 돕니다. 테넌트마다 tenant-{코드} 네임스페이스가 따로 생깁니다.

  • 학습: Kubernetes Job 하나. 스테이저(init 컨테이너)가 데이터셋을 내려놓고, 학습 런타임 이미지가 학습합니다.
  • 이미지 빌드: BuildKit rootless Job. 학습 런타임·스테이저·서빙 빌더·모델 서빙 이미지를 구워 앱 레지스트리에 올립니다. 호스트의 Docker 데몬이나 root 권한을 쓰지 않습니다.
  • 모델 서빙: 일반 Deployment + NodePort. 추론 요청은 항상 앱을 거쳐 들어갑니다.

빌드 패키지 캐시 (5000 · 3142)

proxpi(pip)와 apt-cacher-ng(apt)입니다. 빌드가 인터넷에서 받는 패키지를 쌓아 두어 두 번째 빌드부터 빨라집니다. 설정하지 않아도 앱이 http://10.42.0.1:5000/index/, http://10.42.0.1:3142 로 알아서 연결합니다. 이 둘을 띄우지 않는 환경이라면 꺼야 합니다. 폐쇄망 설치를 보세요.

이 밖에 빌드는 이미지 레이어를 앱 레지스트리의 {테넌트}/cache 저장소에 캐시합니다(기본 켜짐).

다음: Docker Compose 로 설치

2026-09-21 기준 플랫폼에 맞춰 작성했습니다.

© Geo-MLOps