IT 개발,관리,연동,자동화

쿠버네티스로 Node.js 애플리케이션 로드 밸런싱하기: 자세한 가이드

_Blue_Sky_ 2024. 11. 6. 21:01
728x90
728x90

쿠버네티스는 컨테이너화된 애플리케이션을 관리하고 배포하는 데 널리 사용되는 오케스트레이션 도구입니다. 특히, 로드 밸런싱 기능을 통해 여러 인스턴스에 걸쳐 트래픽을 분산하여 애플리케이션의 가용성과 확장성을 높일 수 있습니다. 이번에는 Node.js 애플리케이션을 예로 들어 쿠버네티스에서 로드 밸런싱을 설정하는 방법을 단계별로 자세히 설명하겠습니다.

1. 준비

  • 쿠버네티스 클러스터: 로컬 또는 클라우드 환경에 설치된 쿠버네티스 클러스터가 필요합니다.
  • kubectl: 쿠버네티스 클러스터를 관리하기 위한 명령줄 도구입니다.
  • Node.js 애플리케이션: 로드 밸런싱을 할 Node.js 애플리케이션 이미지를 준비합니다.
  • Dockerfile: Node.js 애플리케이션을 Docker 이미지로 만들기 위한 Dockerfile을 작성합니다.

 

728x90

2. Dockerfile 작성

FROM node:18-alpine

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD [ "node", "index.js" ]
 
  • BASE IMAGE: Node.js 18 Alpine 이미지를 기반으로 합니다.
  • WORKDIR: 작업 디렉토리를 설정합니다.
  • COPY: package.json 파일을 복사하고 npm install을 실행하여 의존성을 설치합니다.
  • EXPOSE: 컨테이너 내부의 3000번 포트를 노출시킵니다.
  • CMD: 애플리케이션 실행 명령어를 지정합니다.

3. Docker 이미지 생성 및 저장소에 업로드

docker build -t my-node-app .
docker push my-node-app
 

4. Deployment 생성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-node-app
        image: my-node-app
        ports:
        - containerPort: 3000
 
  • replicas: 3개의 복제본을 생성합니다.
  • selector: 라벨을 통해 Pod을 선택합니다.
  • template: Pod의 스펙을 정의합니다.
  • containerPort: 컨테이너 내부의 포트를 지정합니다.

5. Service 생성

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
  type: LoadBalancer
 
  • selector: Deployment에서 정의한 라벨과 일치하는 Pod을 선택합니다.
  • ports: 서비스 포트와 컨테이너 포트를 매핑합니다.
  • type: LoadBalancer 타입으로 설정하여 외부에서 접근할 수 있도록 합니다.

6. Deployment 및 Service 적용

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
 
728x90

7. 서비스 노출 확인

클라우드 환경에서는 Service의 외부 IP를 확인하여 브라우저에서 접속할 수 있습니다. 로컬 환경에서는 kubectl get services 명령어를 실행하여 Service 정보를 확인하고, minikube service list 명령어를 통해 서비스에 접속하는 방법을 확인할 수 있습니다.

추가 설정

  • Ingress: 더욱 복잡한 로드 밸런싱 설정이나 SSL/TLS 처리를 위해 Ingress를 사용할 수 있습니다.
  • Horizontal Pod Autoscaler: 자동으로 Pod의 수를 조절하여 부하에 맞춰 확장할 수 있습니다.
  • Service Mesh: Istio와 같은 Service Mesh를 사용하여 서비스 간의 통신을 관리하고 보안을 강화할 수 있습니다.

요약

쿠버네티스는 Node.js 애플리케이션의 로드 밸런싱을 간편하게 설정하고 관리할 수 있는 강력한 도구입니다. Deployment와 Service를 사용하여 애플리케이션을 배포하고, LoadBalancer 타입의 Service를 통해 외부에서 접근할 수 있도록 설정합니다. 이를 통해 애플리케이션의 가용성과 확장성을 높일 수 있습니다.

주의: 위 예시는 기본적인 설정이며, 실제 환경에서는 더욱 복잡한 구성이 필요할 수 있습니다. 쿠버네티스 문서를 참고하여 자세한 내용을 확인하고, 필요에 따라 추가 설정을 진행해야 합니다.

728x90
728x90