인공지능 개발자 수다(유튜브 바로가기) 자세히보기

MLOps

백엔드 서버(FastAPI)를 쿠버네티스로 실행하기

Suya_03 2024. 4. 9. 02:27

목차

    반응형

    0. 이전 글/영상

     

    쿠버네티스(Kubernetes) 기본적인 사용 방법

    1. 터미널을 열어줍니다. 쿠버네티스 명령어는 터미널 안에 작성해 주세요. 2. 쿠버네티스 기본 구조 2.1. 클러스터 (Cluster) 쿠버네티스 클러스터는 여러 컴퓨터(물리적 또는 가상)의 그룹으로, 쿠

    databoom.tistory.com

     

    파이참(Pycharm)에 Poetry 세팅

    1. Poetry 환경 세팅 Poetry는 pyenv와 함께 사용하면 좋다. 먼저 pyenv를 설치하고, 필요한 파이썬 라이브러리를 설치해 주자. 그리고 나서 Poetry를 설치하자. poetry 설치 명령어는 아래와 같다. pip install

    databoom.tistory.com

    • Dockerhub에 이미지 올리기

    1. Pycharm Pro에 쿠버네티스 플러그인 세팅

    가장 먼저, IDE에 쿠버네티스 환경을 세팅해야 한다.

    그동안 터미널을 이용해 작업을 했지만..... IDE를 적극 사용하도록 하자.

    참고로 Pycharm pro에서만 할 수 있다. 도커를 쓰는 순간, 커뮤니티버전은 버려야한다.

    프로 버전은 1년에 $108.90 이다. ㅠㅠㅠㅠㅠㅠ 아젠장.... 쿠버네티스 처음 공부하면서 1달치를 끊어서 1달안에 개발을 할 수 있을리가 없다. 1년으로 해주자.

     

     

    순서는 아래와 같다.

    1.1. 쿠버네티스 플러그인 설치

    • PyCharm을 열고 Settings 로 이동
    • Plugins 섹션을 선택하고, 검색 바에서 "Kubernetes"를 검색
    • "Kubernetes" 플러그인을 찾아 Install 버튼을 클릭

    2.2.  쿠버네티스 클러스터 설정

    이제 PyCharm에서 쿠버네티스 클러스터와 연결을 설정할 수 있습니다.

    • Settings로 이동
    • Kubernetes 탭에서 세팅을 해준다.

     

    2.3. 클러스터 확인 및 관리

    • 서비스에서 minikube를 추가해 준다. 특별한 세팅을 해주지 않았다면, 디폴트 디렉토리에서 불러오면 될 것이다.

     

    • 클러스터 설정이 완료되면, Kubernetes 탭에서 연결된 클러스터의 리소스를 볼 수 있다. 여기서 파드, 서비스, 디플로이먼트 등의 상태를 확인하고 관리할 수 있다. 명령어를 치지 않아도, pod가 바로 확인 가능하다. 너무 시원시원하다.

     

    2.  Pod 생성

    필자는 쿠버네티스용 git 리포지토리를 따로 만들었다.

    이곳에 fastapi_pod.yaml를 만들어 실행할 것이다.

    fastapi_pod.yaml만 만들어두고 실행은 Dockerhub에 미리 만들어 둔 Docker이미지를 다운받아서 실행한다.

    Docker 이미지를 만드는 방법은 아래에서 설명한다.

     

    fastapi_pod.yaml 에는 데이터베이스의 주소와 비밀번호 정보가 들어간다. 그러므로 Secret을 사용해 민감한 정보를 관리해고, pod에 주입시켜 주자.

     

    Secret을 생성해 보자.

    kubectl create secret generic db-secret --from-literal=password=your-db-password

     

    다음으로 fastapi_pod.yaml 파일을 작성해준다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: fastapi-pod
    spec:
      containers:
      - name: fastapi-container
        image: your-fastapi-image
        env:
          - name: DATABASE_PASSWORD
            valueFrom:
              secretKeyRef:
                name: db-secret
                key: password

    3. Dockerfile 작성

    컨테이너 환경을 정의한다. (출처: FastAPI 공식문서)

    이 파일을 이용해 Dockerhub에 이미지를 업로드 한다.

    상세 설정은 조금 변경해 주자.

    # 
    FROM python:3.9 as requirements-stage
    
    # 
    WORKDIR /tmp
    
    # 
    RUN pip install poetry
    
    # 
    COPY ./pyproject.toml ./poetry.lock* /tmp/
    
    # 
    RUN poetry export -f requirements.txt --output requirements.txt --without-hashes
    
    # 
    FROM python:3.9
    
    # 
    WORKDIR /code
    
    # 
    COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt
    
    # 
    RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
    
    # 
    COPY ./app /code/app
    
    # 
    CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

     

    5. 개발 및 테스트 환경 구축

    일반적으로, 개발을 할 때에는 Dockerfile로 실행하고 디버깅 하지는 않는다. 그러므로 Dockerfile에서 사용한 poetry를 로컬 컴퓨터에 그대로 설치해준다. 

    반응형