[kubernetes] FastAPI App을 Kubernetes로 배포하기

조하운·2023년 5월 17일
post-thumbnail

FastAPI 프레임워크를 통해 만든 App을 Kubernetes 환경에 배포하는 방법을 알아보자.

ISSUE

CLIP 모델과 Yolov7 모델을 사용하면서, 서버에서 요청을 처리할 때 마다 이 두 가지 AI 처리 프로세스를 실행하는 것은 제아무리 FastAPI라도 트래픽이 증가하면 성능(처리 속도, 메모리 비용 측면)이 급격히 저하될 수 밖에 없다는 것을 알았다. 그래서 무중단 배포와 로드 밸런싱 등 App의 성능을 한 단계 더 높여줄 수 있는 Cloud Kubernetes 환경을 기존 데스크톱 기반 프로젝트에 적용해보기로 했다.

프로젝트는 https://velog.io/@johaun12/series/CLIP-%EB%AA%A8%EB%8D%B8%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%93%B0%EB%A0%88%EA%B8%B0-%EB%AC%B4%EB%8B%A8%ED%88%AC%EA%B8%B0-%ED%83%90%EC%A7%80-%EC%8B%9C%EC%8A%A4%ED%85%9C 참고

먼저 ChatGPT 를 이용해 튜토리얼을 시작했다.

1. Docker, Kubernetes 설치

설치에 관한 내용은 공식문서를 참조했다.

필자의 데스크톱 환경은 M1 Mac, Ubuntu 20.04 이다.

참고로 Mac의 경우 Docker Desktop App을 다운받아 설치하면 사용하기 정말 쉽다.


2. FastAPI main.py 작성

Kubernestes 환경에 올릴 FastAPI 코드를 작성해준다.

from fastapi import FastAPI

# FastAPI 인스턴스 생성
app = FastAPI()

# GET 요청 핸들러


@app.get("/")
async def root():
    return {"message": "Hello, World!"}
## 2. FastAPI 튜토리얼 코드 작성

3. Dockerfile 작성 및 빌드

그 다음 작업 디렉토리 내에 Dockerfile을 생성하고 작성해준다. 이 파일은 이미지를 빌드할 때 프로세스 실행 경로, 종속성 패키지 설치와 컨테이너가 실행될 때 수행하는 명령 등의 내용을 담고 있다.

FROM python:3.7

COPY ./app /app
WORKDIR /app

RUN pip install -r requirements.txt

EXPOSE 80

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

여기서 COPY와 WORKDIR은 이미지에 복사할 디렉토리와 코드를 실행할 디렉토리의 경로를 적어주는 줄이고, CMD는 FastAPI 실행 시 터미널에 입력할 명령어를 위 메뉴얼에 맞게 작성해주면 된다.

EXPOSE는 포트포워딩할 포트 번호이다.

그 다음 도커 이미지를 빌드해준다.

$docker build -t fastapi:v1 .
profile
| 컴퓨터 비전 | 딥 러닝 | 자율주행 |

0개의 댓글