Node.js 프로젝트를 Git에 올리고, 이를 Docker 이미지로 빌드해 Kubernetes 클러스터에 ArgoCD를 통해 배포하는 과정을 단계별로 설명하겠습니다.
먼저 간단한 Node.js 애플리케이션을 준비합니다. 예를 들어 "Hello World" 메시지를 출력하는 애플리케이션을 작성해 보겠습니다.
프로젝트 폴더 생성 및 초기화:
mkdir my-node-app
cd my-node-app
npm init -y
애플리케이션 코드 작성 (index.js
):
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Express 패키지 설치:
npm install express
Git 저장소 초기화:
git init
git add .
git commit -m "Initial commit"
GitHub 또는 GitLab에 저장소 생성 및 푸시:
GitHub에 저장소를 생성하고 이를 로컬 저장소와 연결하여 코드를 푸시합니다.
git remote add origin <repository-url>
git push -u origin main
이제 Node.js 애플리케이션을 Docker로 컨테이너화합니다.
Dockerfile 작성 (Dockerfile
):
# 베이스 이미지 설정
FROM node:14
# 작업 디렉토리 생성
WORKDIR /app
# 필요한 파일 복사
COPY package*.json ./
# 의존성 설치
RUN npm install
# 애플리케이션 코드 복사
COPY . .
# 포트 노출
EXPOSE 3000
# 애플리케이션 실행 명령
CMD ["node", "index.js"]
Docker 이미지 빌드:
docker build -t my-node-app .
Docker 이미지 실행 (테스트용):
docker run -p 3000:3000 my-node-app
웹 브라우저에서 http://localhost:3000
으로 접속하여 "Hello, World!" 메시지가 출력되는지 확인합니다.
Docker 이미지 푸시:
Docker Hub에 푸시할 수 있도록 이미지를 Docker Hub에 올립니다.
docker tag my-node-app <dockerhub-username>/my-node-app
docker push <dockerhub-username>/my-node-app
이제 Kubernetes 매니페스트 파일을 작성하여 애플리케이션을 배포할 준비를 합니다.
Kubernetes 배포 및 서비스 매니페스트 작성 (k8s-deployment.yaml
):
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-node-app
spec:
replicas: 1
selector:
matchLabels:
app: my-node-app
template:
metadata:
labels:
app: my-node-app
spec:
containers:
- name: my-node-app
image: <dockerhub-username>/my-node-app:latest
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: my-node-app-service
spec:
type: LoadBalancer
selector:
app: my-node-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
매니페스트 파일 Git에 커밋 및 푸시:
작성한 k8s-deployment.yaml
파일을 저장소에 추가하고 푸시합니다.
git add k8s-deployment.yaml
git commit -m "Add Kubernetes deployment and service"
git push origin main
ArgoCD를 통해 Kubernetes 클러스터에 애플리케이션을 자동으로 배포하도록 설정합니다.
ArgoCD 설치 (Kubernetes 클러스터 내):
ArgoCD가 설치되지 않았다면, 다음 명령어로 설치할 수 있습니다.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
ArgoCD 접근 설정:
ArgoCD UI에 접근하기 위해 LoadBalancer나 Port-Forwarding을 설정합니다.
kubectl port-forward svc/argocd-server -n argocd 8080:443
ArgoCD에 애플리케이션 추가:
ArgoCD UI에 접속하여 새 애플리케이션을 추가합니다. 여기서 Git 저장소의 주소, 경로 및 클러스터 정보를 입력하여 ArgoCD가 해당 매니페스트를 통해 애플리케이션을 배포할 수 있게 합니다.
ArgoCD로 애플리케이션 배포:
ArgoCD가 설정된 Git 저장소에서 변경사항을 감지하고, k8s-deployment.yaml
파일을 사용해 애플리케이션을 Kubernetes 클러스터에 자동 배포합니다. ArgoCD UI에서 배포 상태를 확인할 수 있습니다.
ArgoCD가 성공적으로 배포한 후에는 다음을 통해 애플리케이션이 정상적으로 작동하는지 확인합니다.
kubectl get deployments
kubectl get pods
kubectl get svc
LoadBalancer
로 설정된 서비스의 IP 주소 또는 URL로 접속하여 "Hello, World!" 메시지가 출력되는지 확인합니다.위와 같이 CI/CD가 설정된 상태에서 코드 수정이 발생하면 다음과 같은 자동화 프로세스가 일어나게 됩니다:
<dockerhub-username>/my-node-app:latest
와 같이 새로운 이미지를 푸시합니다.이렇게 설정된 환경에서는 코드가 수정될 때마다 수작업 없이 애플리케이션의 새로운 버전이 배포됩니다. 이로써 개발자는 빠르게 피드백을 받아볼 수 있고, 배포 과정에서 발생할 수 있는 오류를 조기에 발견하여 해결할 수 있게 됩니다.