pile·
인프라 / DevOps·마켓컬리마켓컬리 Hello World·

Kurly만의 MLOps 구축하기 - 쿠브플로우 도입기

컬리 데이터플랫폼팀이 데이터 사이언티스트에게 인프라를 감춘 추상화된 ML 환경을 주기 위해 Kubeflow를 도입한 과정과 운영 팁을 다룬다. SageMaker와 비교해 Kubeflow를 택한 이유, 그리고 실운영에 맞춘 커스터마이징을 정리한다.

핵심 포인트
  • 이미 EKS에 JupyterHub·MLFlow·Airflow가 흩어져 있어 연결성이 낮고 복잡해, 통합 MLOps 플랫폼이 필요했다.
  • SageMaker와 Kubeflow 중, 이미 Kubernetes를 적극 활용 중이라 이식성·기술 내재화 측면에서 Kubeflow를 선택했다.
  • 기본 설치는 운영에 부족해 Elyra·S3 아티팩트 저장소·IRSA·SealedSecrets 등으로 커스터마이징했다.
  • credential 유출 방지를 위해 SealedSecrets와 pre-commit git hook으로 Secret 커밋을 이중 차단했다.
상세 정리
  • 선택 배경: 직접 플랫폼을 만들기보다 잘 패키징된 MLOps 서비스로 빠르게 도입하는 게 낫다고 보고 SageMaker와 Kubeflow 둘로 좁혔다.
  • 비교: SageMaker는 AWS 통합·커버 범위가 넓지만 vendor lock-in과 비용이 단점, Kubeflow는 어느 Kubernetes 환경에도 배포 가능하나 레퍼런스가 적고 디버깅이 어렵다.
  • 결정: 비용·기술 내재화 관점에서 Kubeflow가 못 커버하는 영역은 직접 개발·오픈소스로 메우기로 하고 Kubeflow를 채택했다(설치 환경 Kubernetes 1.21, Kubeflow 1.5.0, Kustomize 3.2.0).
  • Elyra 도입: Kubeflow Pipeline(KFP)의 DAG 문법 학습 부담을 줄이려, JupyterLab UI에서 파이썬·노트북 의존성을 설정해 KFP DAG로 변환해주는 Elyra를 도입했다(Kale은 덜 성숙해 제외).
  • Elyra 이미지: 기본 이미지에 Elyra가 없어 익스텐션 설치 이미지를 만들어 ECR로 관리하고, spawner_ui_config.yaml 수정으로 노트북 생성 시 드롭다운으로 제공한다.
  • 저장소 변경: KFP 기본 아티팩트 저장소 MinIO(EBS PV) 대신, 대용량·가변 데이터 접근성·확장성을 위해 S3를 기본 저장소로 바꿨다.
  • Argo 설정: KFP는 Argo Workflow로 동작해, workflow-controller-configmap의 artifactRepository에 S3 endpoint·bucket·region·useSDKCreds를 지정한다.
  • IRSA: 파드가 S3와 통신하려면 credential 주입이 필요한데, multi-tenancy라 네임스페이스마다 Secret을 만드는 불편을 피해 default-editor 서비스어카운트에 IRSA(role-arn)를 설정했다.
  • SealedSecrets: 매니페스트의 Dex google client id/secret 등 credential을 Git으로 관리하기 위해, kubeseal로 Secret을 암호화한 SealedSecret CR로 변환해 컨트롤러가 클러스터에서 복호화하게 했다.
  • 커밋 방지: 실수로 원본 Secret을 푸시하는 것을 막으려 kind Secret 패턴을 검사하는 pre-commit git hook을 두어 발견 시 커밋을 실패시킨다.
왜 읽나EKS 위에 Kubeflow 기반 MLOps 플랫폼을 실운영 수준으로 세팅하려는 ML·인프라 엔지니어에게 커스터마이징 체크리스트.
마켓컬리
마켓컬리 Hello World 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    대규모 도그푸딩: cdnjs를 Cloudflare 개발자 플랫폼으로 이전하다

    cdnjs는 하루 90억 요청을 처리하는 오픈소스 JS/CSS CDN으로, 전 세계 웹사이트의 12%가 의존한다. 2026년 6월, Cloudflare는 6년간 GCP에서 운영하던 발행 파이프라인을 Workers, Workflows, R2, KV, Queues, Containers, Durable Objects로 완전 전환했다. 성능 문제가 아닌 관측성·유지보수성 한계가 동인이었으며, 마이그레이션 과정에서 플랫폼 한도를 직접 끌어올렸다.

    #durable-objects#workflows#cloudflare-workers+2
  2. 인프라 / DevOps·github-engGitHub Engineering·

    Dependabot 길들이기: 업데이트 묶고, 주기 늦추고, 보안은 빠르게

    GitHub의 Dependabot은 의존성 업데이트를 자동화하지만, 기본 설정에서는 10개 업데이트 = 10개 PR이 쏟아져 메인테이너가 알림을 무시하게 된다. Microsoft의 GCToolkit 사례(578개 커밋 중 92개가 Dependabot 버전 범프)를 바탕으로, 그룹핑·주기 조절·보안 업데이트 분리 3가지 설정으로 노이즈를 줄이면서 보안 속도는 유지하는 방법을 다룬다.

    #github-actions#devops#supply-chain-security+2
  3. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    Cloudflare, 프라이버시 프로토콜 디버깅 CLI pvcli 오픈소스 공개

    Cloudflare가 OHTTP(Oblivious HTTP) 등 프라이버시 보존 프로토콜 디버깅을 위한 CLI 도구 pvcli를 오픈소스(Apache-2.0)로 공개했다. 기존에는 RFC를 참조하며 바이너리를 수작업으로 파싱해야 했는데, pvcli는 curl과 유사한 문법으로 이 과정을 단일 명령으로 줄인다. Apple Private Relay·Microsoft Edge Secure Network를 구동하는 실전 규모의 경험에서 나온 도구다.

    #rust#cli#ohttp+2