FastAPI

FastAPI 강좌 7강: Kubernetes를 활용한 애플리케이션 배포

atomicdev 2024. 10. 9. 10:44
728x90

Kubernetes를 활용한 애플리케이션 배포


강의 목표:

  • Kubernetes 클러스터에 FastAPI 애플리케이션을 배포하는 방법을 학습한다.
  • Kubernetes를 사용하여 애플리케이션을 스케일링하고, YAML 파일을 작성하여 배포하는 실습을 진행한다.
    Kubernetes를 사용하여 FastAPI 애플리케이션을 배포하고 스케일링하는 과정

 


강의 세부 내용:

1. Kubernetes란?

  • Kubernetes: 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링, 운영하는 오픈소스 플랫폼입니다.
  • Kubernetes는 애플리케이션의 가용성을 보장하고, 대규모 트래픽을 처리할 수 있도록 확장성을 제공합니다.
  • 클러스터: Kubernetes는 클러스터 환경에서 애플리케이션을 실행합니다. 클러스터는 여러 개의 노드(서버)로 구성됩니다.

2. FastAPI 애플리케이션을 위한 Kubernetes 배포 구조

  • Pod: Kubernetes에서 가장 작은 배포 단위로, 하나 이상의 컨테이너가 함께 실행됩니다.
  • Service: 클러스터 내에서 Pod에 접근할 수 있는 네트워크 경로를 제공합니다.
  • Deployment: 애플리케이션을 여러 Pod로 실행하고, 필요한 경우 스케일링(확장)을 지원합니다.

3. Kubernetes 환경 설정

필수 조건:

  1. Docker로 컨테이너 이미지 생성: FastAPI 애플리케이션을 먼저 Docker 이미지로 생성해 둬야 합니다.
    docker build -t my_fastapi_app .
    docker push my_fastapi_app:latest  # Docker Hub에 푸시
  2. Kubernetes 클러스터 설정:
    • 클라우드 서비스(Kubernetes on AWS EKS, Google Kubernetes Engine 등)를 사용하거나, 로컬에서 Minikube를 이용해 Kubernetes 클러스터를 설정할 수 있습니다.
    • Minikube 설치:
      minikube start

 


4. Kubernetes 배포 YAML 파일 작성

예제 1: FastAPI 애플리케이션을 위한 Deployment와 Service 파일 작성

  1. Deployment 파일 (deployment.yaml): FastAPI 애플리케이션을 여러 Pod로 배포하는 구성입니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: fastapi-deployment
    spec:
      replicas: 3  # 애플리케이션을 3개의 Pod로 실행
      selector:
        matchLabels:
          app: fastapi
      template:
        metadata:
          labels:
            app: fastapi
        spec:
          containers:
          - name: fastapi
            image: my_fastapi_app:latest  # Docker 이미지
            ports:
            - containerPort: 8000

    설명:
    • replicas: Pod의 복제본 수를 지정합니다.
    • image: Docker 이미지를 사용해 컨테이너를 생성합니다.
  2. Service 파일 (service.yaml): FastAPI 애플리케이션을 외부에서 접근할 수 있도록 Service를 설정합니다.
    apiVersion: v1
    kind: Service
    metadata:
      name: fastapi-service
    spec:
      selector:
        app: fastapi
      ports:
        - protocol: TCP
          port: 80  # 외부 요청 포트
          targetPort: 8000  # FastAPI 애플리케이션 내부 포트
      type: LoadBalancer  # 외부 접근을 허용

    설명:
    • type: LoadBalancer: 클러스터 외부에서 애플리케이션에 접근할 수 있도록 LoadBalancer를 사용합니다.
    • port: 외부에서 접근하는 포트를 지정합니다(예: 80).
    • targetPort: FastAPI 애플리케이션의 포트입니다(예: 8000).

 


5. Kubernetes 클러스터에 배포

Step 1: Kubernetes 배포 파일 적용

  1. Deployment와 Service 적용:
    • kubectl 명령어를 사용해 YAML 파일을 적용하여 애플리케이션을 클러스터에 배포합니다.
      kubectl apply -f deployment.yaml
      kubectl apply -f service.yaml
     
  2. 배포 상태 확인:
    • 배포된 Pod와 Service의 상태를 확인합니다.
      kubectl get deployments
      kubectl get services
      kubectl get pods
     

Step 2: FastAPI 애플리케이션 접근

  • Service의 IP 주소나 외부 로드 밸런서의 주소를 확인하여 애플리케이션에 접근합니다.
    minikube service fastapi-service --url
  • 브라우저에서 FastAPI 애플리케이션에 접근하여 응답을 확인합니다:
    {
        "message": "Hello, Kubernetes!"
    }

6. Kubernetes에서 FastAPI 애플리케이션 스케일링

Step 3: 애플리케이션 스케일링

  1. 애플리케이션 복제본 수 변경: Kubernetes에서 애플리케이션의 복제본 수를 동적으로 변경할 수 있습니다.
    kubectl scale deployment fastapi-deployment --replicas=5
  2. 스케일링 확인: Pod가 5개로 확장되었는지 확인합니다.
    kubectl get pods

마무리 및 추가 학습

  • 이번 강의에서는 Kubernetes 클러스터에 FastAPI 애플리케이션을 배포하고 스케일링하는 방법을 학습했습니다.
  • 배포와 서비스 구성을 YAML 파일로 작성하고, 실제로 클러스터에서 애플리케이션을 실행해 보았습니다.
  • 다음 강의에서는 Kubernetes의 고급 기능과 모니터링 도구를 다룹니다.
728x90