📌 TL;DR:
Kubernetes(쿠버네티스)와 CI/CD(지속적 통합 & 지속적 배포)를 활용하면 코드 변경이 발생할 때마다
자동으로 애플리케이션을 빌드하고 배포할 수 있어요!
이번 글에서는 GitHub Actions와 Kubernetes를 활용해 자동 배포 시스템을 구축하는 방법을 차근차근 설명할게요. 😊
1. CI/CD란? 🤔
CI/CD는 개발부터 배포까지의 과정을 자동화하는 시스템이에요.
✅ CI (Continuous Integration, 지속적 통합)
- 코드가 변경될 때마다 자동으로 테스트 & 빌드
- 여러 개발자가 동시에 작업해도 코드 충돌을 줄일 수 있음
✅ CD (Continuous Deployment, 지속적 배포)
- 코드가 안정적이면 자동으로 서버에 배포
- 사람이 직접 배포하는 대신 시스템이 자동으로 업데이트 진행
📦 쉽게 말하면?
- CI는 코드가 변경될 때마다 자동으로 검사하는 과정
- CD는 코드가 안정적이면 자동으로 배포까지 하는 과정
- 이 모든 과정이 자동으로 돌아가면 배포할 때마다 버튼 하나 누를 필요도 없어요! 🎉
2. Kubernetes에서 자동 배포가 필요한 이유? 🤷♂️
Docker와 Kubernetes만으로도 컨테이너를 배포할 수 있지만,
코드가 변경될 때마다 수동으로 배포하는 것은 비효율적이에요.
CI/CD를 활용하면 다음과 같은 흐름으로 자동화할 수 있어요. 🚀
1️⃣ 개발자가 코드를 GitHub에 푸시하면
→ 2️⃣ GitHub Actions가 코드를 빌드하고 Docker 이미지 생성
→ 3️⃣ Docker Hub 또는 AWS ECR 같은 이미지 저장소에 업로드
→ 4️⃣ Kubernetes가 새 이미지를 감지하고 자동으로 업데이트! 🎉
이제 하나씩 따라 해볼까요? 😊
3. GitHub Actions로 CI/CD 구축하기 🛠
CI/CD의 핵심은 GitHub Actions를 사용하여 코드 변경을 감지하고,
이를 자동으로 빌드 & 배포하는 거예요!
1️⃣ GitHub Actions 워크플로우 파일 작성
GitHub 저장소의 .github/workflows/deploy.yml 파일을 만들고, 아래 코드를 추가하세요.
name: Deploy to Kubernetes
on:
push:
branches:
- main # main 브랜치에 변경이 발생할 때 실행
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 코드 가져오기
uses: actions/checkout@v2
- name: Docker 이미지 빌드
run: |
docker build -t my-docker-app:latest .
- name: Docker Hub에 푸시
run: |
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
docker tag my-docker-app:latest my-docker-hub-username/my-docker-app:latest
docker push my-docker-hub-username/my-docker-app:latest
- name: Kubernetes에 배포
run: |
kubectl apply -f k8s-deployment.yaml
✅ 설명:
- on: push -> branches: main → main 브랜치에 코드가 변경될 때만 실행
- docker build -t my-docker-app:latest . → Docker 이미지 빌드
- docker push my-docker-hub-username/my-docker-app:latest → Docker Hub에 업로드
- kubectl apply -f k8s-deployment.yaml → Kubernetes에 배포!
🚀 이제 GitHub에 코드를 푸시하면 자동으로 배포됩니다!
4. Kubernetes에서 자동 배포 설정하기 🏗
CI/CD의 마지막 단계는 Kubernetes가 새로운 Docker 이미지를 자동으로 감지하고 업데이트하는 것이에요.
1️⃣ Kubernetes Deployment 설정 (k8s-deployment.yaml 작성)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2 # 실행할 컨테이너 개수
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-docker-hub-username/my-docker-app:latest # 최신 이미지 사용
ports:
- containerPort: 3000
✅ 설명:
- replicas: 2 → 컨테이너 2개 실행
- image: my-docker-hub-username/my-docker-app:latest → 최신 이미지 자동 적용!
- containerPort: 3000 → 컨테이너 내부에서 3000번 포트 사용
2️⃣ Deployment 적용하기
kubectl apply -f k8s-deployment.yaml
✅ kubectl apply -f → Kubernetes에 변경사항 반영
3️⃣ 실행 중인 Pod 확인
kubectl get pods
✅ kubectl get pods → 실행 중인 컨테이너 확인
4️⃣ 서비스 생성 (외부에서 접근 가능하도록 설정)
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer
5️⃣ 서비스 적용하기
kubectl apply -f k8s-service.yaml
✅ kubectl get services → 배포된 서비스 확인 가능
🚀 마무리: CI/CD + Kubernetes 자동 배포 시스템 구축 완료! 🎉
✅ GitHub Actions로 코드 변경 감지 → CI/CD 자동 실행!
✅ Docker 이미지 빌드 & Docker Hub 업로드 → 새로운 코드가 배포됨!
✅ Kubernetes에서 최신 이미지 감지 & 업데이트 → 자동으로 컨테이너 업데이트!
✅ 서비스를 통해 외부에서도 접근 가능!
이제 코드 변경이 발생하면 배포가 자동으로 이루어지는 환경이 완성됐어요! 🎯
💡 다음 목표? ArgoCD, Helm 등을 활용해 더 효율적인 배포 자동화 구축하기! 🚀
'knowledge🧠 > Cloud ☁️' 카테고리의 다른 글
Kubernetes를 활용한 컨테이너 배포 🚀 (0) | 2025.03.08 |
---|---|
Kubernetes와 CI/CD 배워보기! 🚀 (0) | 2025.03.08 |
Docker로 개발 환경 쉽게 구축하기 (2편) 🚀 (1) | 2025.03.08 |
Docker로 개발 환경 쉽게 구축하기 (1편) 🐳 (0) | 2025.03.08 |
초보자를 위한 네트워크 보안 용어 쉽게 풀기! 🌐🔒 (2) | 2025.02.28 |