1. 사전 준비: 필수 도구 설치 및 설정
1.1 Git 설치
Ubuntu
sudo apt update
sudo apt install git -y
macOS
brew install git
Windows
Git 공식 사이트에서 설치 프로그램을 다운로드하고 실행합니다.
설치 확인:
git --version
1.2 Node.js 설치
Ubuntu
sudo apt update
sudo apt install -y nodejs npm
macOS
brew install node
Windows
Node.js 공식 사이트에서 설치 프로그램을 다운로드하고 실행합니다.
설치 확인:
node --version
npm --version
1.3 Docker 설치
Ubuntu
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
macOS 및 Windows
Docker Desktop을 다운로드하고 설치합니다.
Docker 실행 권한 확인:
docker --version
sudo usermod -aG docker $USER
1.4 Kubernetes 설치 (kubectl)
공통 (Ubuntu, macOS, Windows)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
설치 확인:
kubectl version --client
2. 프로젝트 초기화 및 기본 파일 설정
2.1 Git 리포지토리 생성 및 초기화
mkdir my-app && cd my-app
git init
2.2 Node.js 프로젝트 초기화
npm init -y
package.json 예시:
{
"name": "my-app",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {}
}
2.3 간단한 Node.js 애플리케이션 작성
index.js 예시:
const http = require("http");
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello, Kubernetes!");
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(\`Server running on port \${PORT}\`);
});
3. Docker 파일 설정 및 빌드
3.1 Dockerfile 작성
Dockerfile 예시:
# 베이스 이미지
FROM node:16
# 앱 디렉토리 생성
WORKDIR /usr/src/app
# 종속성 복사 및 설치
COPY package*.json ./
RUN npm install
# 애플리케이션 복사
COPY . .
# 애플리케이션 실행
EXPOSE 3000
CMD ["npm", "start"]
3.2 Docker 이미지 빌드 및 실행
# Docker 이미지 빌드
docker build -t my-app .
# Docker 컨테이너 실행
docker run -p 3000:3000 my-app
4. Kubernetes 배포 파일 작성
4.1 Deployment 및 Service 파일 작성
k8s-deployment.yaml 예시:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: LoadBalancer
ports:
- port: 3000
targetPort: 3000
selector:
app: my-app
4.2 Kubernetes 배포
# Kubernetes 클러스터에 배포
kubectl apply -f k8s-deployment.yaml
# 상태 확인
kubectl get pods
kubectl get services
5. GitLab CI/CD 구성
5.1 .gitlab-ci.yml 작성
gitlab-ci.yml 예시:
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t my-app:$CI_COMMIT_SHA .
test:
stage: test
script:
- echo "Running tests..."
- npm test || echo "No tests configured yet"
deploy:
stage: deploy
script:
- echo "$KUBE_CONFIG" | base64 -d > kubeconfig.yaml
- export KUBECONFIG=kubeconfig.yaml
- kubectl apply -f k8s-deployment.yaml
only:
- main
5.2 GitLab 환경 변수 설정
GitLab UI에서 Settings → CI/CD → Variables에 다음 변수를 추가합니다:
- KUBE_CONFIG: Kubernetes 클러스터 kubeconfig 내용을 Base64로 인코딩하여 저장.
6. 파이프라인 실행 및 확인
6.1 파이프라인 실행
git add .
git commit -m "Add CI/CD pipeline"
git push origin main
GitLab에서 자동으로 CI/CD 파이프라인이 실행됩니다.
6.2 파이프라인 상태 확인
GitLab UI에서 프로젝트 페이지 → CI/CD → Pipelines로 이동하여 파이프라인 로그를 확인합니다.
7. 배포 확인
7.1 Kubernetes Pod 상태 확인
kubectl get pods
7.2 서비스 확인
kubectl get services
7.3 애플리케이션 테스트
서비스 IP 또는 로드 밸런서 주소를 브라우저에 입력하여 애플리케이션이 정상 작동하는지 확인합니다.
댓글 없음:
댓글 쓰기