Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

JOOHUUN

쿠버네티스(Kubernetes, k8s) | fastapi 앱 배포 본문

카테고리 없음

쿠버네티스(Kubernetes, k8s) | fastapi 앱 배포

JOOHUUN 2023. 9. 5. 10:59

미니쿠베를 사용해서 로컬에서 fastapi 기반 앱을 배포하는 과정입니다. 미니쿠베, 도커 설치과정은 포함되어 있지 않습니다.

 

1. fastapi 기반 앱 이미지 빌드

먼저 미니쿠베환경에 도커이미지를 빌드 할 수 있도록 아래 명령어를 입력합니다.

eval $(minikube docker-env)
# app/main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello FastAPI"}
# requirements.txt

fastapi==0.100.0
uvicorn==0.22.0
# Dockerifle

FROM python:3.10

WORKDIR /app

COPY requirements.txt /app/

RUN pip install --no-cache-dir -r requirements.txt

COPY . /app

EXPOSE 8080

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

간단한 fastapi앱을 작성하고, 도커파일 작성 후 이미지로 빌드 합니다.

# 이미지 빌드
docker build -t myfastapi-app .

2. 쿠버네티스에 서비스 배포

- 이제 빌드한 이미지를 사용해서 미니쿠버 환경에서 실행하기 위한 deployment 와 service를 생성합니다.

1) 디플로이먼트(Deployment)

: 레플리카셋, 포드의 배포를 관리, 앱의 버전을 관리

# deployment-fastapi.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myfastapi-app
  labels:
    app: myfastapi-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myfastapi-app
  template:
    metadata:
      labels:
        app: myfastapi-app
    spec:
      containers:
        - name: myfastapi-app
          image: myfastapi-app:latest
          ports:
            - containerPort: 8080
          imagePullPolicy: IfNotPresent

디플로이먼트 생성

 - pods와 replicaset이 함께 생성됩니다.

kubectl apply -f deployment-fastapi.yml

kubectl get deployment

2)  서비스(Service)

: 파드를 연결 하고 외부에 노출해서 사용자들이 접근 가능하게 하거나, 다른 디플로이먼트들과 접근 가능하게함

# service-fastapi.yml

apiVersion: v1
kind: Service
metadata:
  name: myfastapi-app-svc
spec:
  selector:
    app: myfastapi-app
  ports:
    - protocol: "TCP"
      port: 80
      targetPort: 8080
  type: LoadBalancer

서비스 생성

kubectl apply -f service.fastapi.yml

kubectl get service myfastapi-app-svc

<서비스포트80:노드포트32029> 로 매핑되어 생성되었습니다.

서비스 포트는 쿠버네티스 클로스터 내에서 듣고 있는 네트워크 포트를 의미 합니다. 쿠버네티스 클러스터 내에서는 이 서비스를 10.107.128.141:80으로 접근 할 수 있습니다. 

노드 포트는, 이 서비스가 클러스터 외부에서 접근할 수 있도록 쿠버네티스 클로스터의 모든 노드에서 열리는 포트입니다. 외부에서는 노드IP:32029 로 이 서비스에 접근 할 수 있습니다.

 

서비스 접근

- 클러스터내의 리소스를 로컬에서 접근하기 위해 포트포워딩을 합니다.

kubectl port-forward service/myfastapi-app-svc 8080:80

http://localhost:8080 으로 접속 가능하게 됩니다.

Comments