[MLOps] RayService Quickstart

RCC.AI·2025년 8월 18일

MLOps

목록 보기
14/15

RayService

RayService란 무엇인가?

RayService는 두 가지 핵심 컴포넌트를 관리하는 Kubernetes 리소스입니다

RayCluster: Kubernetes 클러스터 내의 리소스를 관리
Ray Serve Applications: 사용자의 애플리케이션을 관리

RayService가 제공하는 주요 기능

  1. Kubernetes 네이티브 지원

Kubernetes 설정을 통해 Ray 클러스터와 Ray Serve 애플리케이션을 정의
kubectl 명령어로 클러스터와 애플리케이션 생성 가능

  1. In-place 업데이트

Ray Serve 애플리케이션의 무중단 업데이트 지원
서비스 중단 없이 새로운 버전 배포 가능

  1. 제로 다운타임 업그레이드

Ray 클러스터 업그레이드 시 서비스 중단 최소화
롤링 업데이트 방식으로 안전한 업그레이드

  1. 고가용성 서비스

장애 발생 시 자동 복구 메커니즘
여러 노드에 걸친 분산 배포로 안정성 확보

실습 예제: 두 개의 Ray Serve 애플리케이션 서빙

Step 1: Kind를 사용한 Kubernetes 클러스터 생성

kind create cluster --image=kindest/node:v1.26.0

  • Kind: Kubernetes in Docker, 로컬 개발용 Kubernetes 클러스터
  • v1.26.0 노드 이미지 사용으로 호환성 보장

Step 2: KubeRay Operator 설치

  • Helm 저장소에서 최신 안정 버전의 KubeRay operator 설치
  • serveConfigV2 사용으로 멀티 애플리케이션 Serve 구성 지원 (KubeRay v0.6.0부터 지원)

Step 3: RayService 설치

kubectl apply -f https://raw.githubusercontent.com/ray-project/kuberay/v1.4.0/ray-operator/config/samples/ray-service.sample.yaml

  • 미리 정의된 샘플 RayService 매니페스트 적용
  • 두 개의 샘플 애플리케이션 (과일 가게, 계산기) 포함

Step 4: 클러스터 상태 확인

4.1 RayService 리소스 확인

kubectl get rayservice

  • SERVICE STATUS: Running (실행 상태)
  • NUM SERVE ENDPOINTS: 2 (두 개의 서브 엔드포인트)

4.2 RayCluster 리소스 확인

kubectl get raycluster

  • DESIRED WORKERS: 1 (원하는 워커 노드 수)
  • AVAILABLE WORKERS: 1 (사용 가능한 워커 노드 수)
  • CPUS/MEMORY/GPUS: 리소스 할당 현황
  • STATUS: ready (준비 상태)

4.3 Ray Pod 상태 확인

kubectl get pods -l=ray.io/is-ray-node=yes

  • Head 노드와 Worker 노드 Pod들의 실행 상태 확인
  • ray.io/is-ray-node=yes 라벨로 Ray 관련 Pod만 필터링

4.4 RayService Ready 상태 확인

kubectl describe rayservices.ray.io rayservice-sample

  • Ready 조건이 True일 때 요청을 처리할 준비 완료
  • NonZeroServeEndpoints 이유로 준비 상태 달성

4.5 서비스 목록 확인

두 가지 주요 서비스가 생성됩니다:

  1. rayservice-sample-cxm7t-head-svc
  • 활성 RayCluster의 head pod를 가리킴
  • Ray Dashboard 접근용 (포트 8265)
  • 클러스터 모니터링 및 관리
  1. rayservice-sample-serve-svc
  • Ray Serve의 HTTP 인터페이스 노출 (포트 8000)
  • REST API, ML 추론 등의 요청 처리
  • 실제 애플리케이션 서비스 엔드포인트

Step 5: Serve 애플리케이션 상태 확인

kubectl port-forward svc/rayservice-sample-head-svc 8265:8265

  • 포트 포워딩을 통해 Ray Dashboard에 로컬에서 접근
  • http://localhost:8265/#/serve에서 Serve 페이지 확인 가능
  • 애플리케이션 상태, 메트릭, 로그 등을 시각적으로 모니터링

Step 6: 애플리케이션 요청 테스트

6.1 테스트용 curl Pod 실행

kubectl run curl --image=radial/busyboxplus:curl -i --tty

  • 클러스터 내부에서 서비스 테스트용 Pod 생성

6.2 과일 가게 앱 테스트

curl -X POST -H 'Content-Type: application/json' rayservice-sample-serve-svc:8000/fruit/ -d '["MANGO", 2]' # 출력 6

  • /fruit/ 엔드포인트에 POST 요청
  • 망고 2개의 가격 계산 (결과: 6)

6.3 계산기 앱 테스트

bashcurl -X POST -H 'Content-Type: application/json' rayservice-sample-serve-svc:8000/calc/ -d '["MUL", 3]' # 출력: "15 pizzas please!"

  • /calc/ 엔드포인트에 곱셈 요청
  • 3을 곱한 결과를 피자 주문 형태로 반환

Step 7: 리소스 정리

# RayService 삭제
kubectl delete -f https://raw.githubusercontent.com/ray-project/kuberay/v1.4.0/ray-operator/config/samples/ray-service.sample.yaml

# KubeRay operator 제거
helm uninstall kuberay-operator

# curl Pod 삭제
kubectl delete pod curl
profile
따라가기도 벅찬 AI Engineer 겸 부앙단

0개의 댓글