1️⃣ Kubernetes에서 배포 전략이 중요한 이유?
Kubernetes 환경에서 애플리케이션을 배포할 때, 잘못된 배포로 인해 서비스 중단이 발생할 수 있습니다.
따라서 안정적인 배포 전략을 사용하여 무중단 배포를 보장해야 합니다.
✅ 배포 시 고려해야 할 요소
✔ 새로운 버전이 안정적인지 테스트 가능해야 함
✔ 기존 버전으로 쉽게 롤백할 수 있어야 함
✔ 사용자에게 영향을 최소화해야 함
Kubernetes에서는 Canary 배포와 Blue-Green 배포가 대표적인 배포 전략으로 사용됩니다.
2️⃣ Canary 배포란?
📌 Canary 배포는 새로운 버전을 일부 사용자에게만 노출한 후 점진적으로 배포하는 방식입니다.
✅ 새로운 버전이 정상적으로 동작하는지 확인 후 전체 배포 가능
✅ 문제가 발생하면 즉시 롤백 가능
✅ 트래픽을 조절하면서 단계적으로 배포 가능
📌 Canary 배포 방식 예시
사용자 트래픽
├── 90% → 기존 버전 (v1)
├── 10% → 새로운 버전 (v2)
⬇
새로운 버전 안정성 검증 후 점진적 증가
├── 50% → 기존 버전 (v1)
├── 50% → 새로운 버전 (v2)
⬇
최종적으로 100% 새로운 버전으로 배포 완료
✅ 점진적 배포를 통해 리스크를 최소화 가능!
✅ Canary 배포 설정 방법
Canary 배포를 구현하기 위해 **Deployment + Service + Ingress(또는 Istio)**를 활용할 수 있습니다.
📌 Canary Deployment 예제 (canary-deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-v1
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: v1
template:
metadata:
labels:
app: myapp
version: v1
spec:
containers:
- name: myapp
image: myrepo/myapp:v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-v2
spec:
replicas: 1 # 처음에는 10%만 배포
selector:
matchLabels:
app: myapp
version: v2
template:
metadata:
labels:
app: myapp
version: v2
spec:
containers:
- name: myapp
image: myrepo/myapp:v2
📌 Service 설정 (canary-service.yaml)
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 8080
📌 Ingress 설정 (트래픽을 조절하여 Canary 배포)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
📌 배포 명령어
kubectl apply -f canary-deployment.yaml
kubectl apply -f canary-service.yaml
kubectl apply -f canary-ingress.yaml
✅ Canary 배포가 적용되었으며, 이제 트래픽을 점진적으로 조정 가능!
3️⃣ Blue-Green 배포란?
📌 Blue-Green 배포는 기존 버전(Blue)과 새로운 버전(Green)을 동시에 배포한 후, 트래픽을 한 번에 전환하는 방식입니다.
✅ 새로운 버전을 완전히 배포한 후 트래픽을 전환
✅ 문제가 발생하면 즉시 이전 버전(Blue)으로 롤백 가능
✅ 배포 속도가 빠르고 일관성이 높음
📌 Blue-Green 배포 방식 예시
기존 버전 (Blue) 실행 중
├── 사용자가 기존 버전(Blue) 사용
├── 새로운 버전(Green) 배포
⬇
새로운 버전(Green) 검증 완료 후 트래픽 전환
├── 모든 트래픽을 Green으로 변경
⬇
문제 발생 시 즉시 Blue로 롤백
✅ 완전한 새로운 환경에서 테스트 후 배포 가능!
✅ Blue-Green 배포 설정 방법
Blue-Green 배포는 Canary 배포와 비슷하지만, 트래픽 전환을 한 번에 수행한다는 차이점이 있습니다.
📌 Blue-Green Deployment 예제 (blue-green-deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-blue
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: blue
template:
metadata:
labels:
app: myapp
version: blue
spec:
containers:
- name: myapp
image: myrepo/myapp:v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-green
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: green
template:
metadata:
labels:
app: myapp
version: green
spec:
containers:
- name: myapp
image: myrepo/myapp:v2
📌 Service 설정 (blue-green-service.yaml)
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
version: blue # 처음에는 Blue 버전으로 설정
ports:
- protocol: TCP
port: 80
targetPort: 8080
📌 트래픽 전환 (Green으로 변경)
kubectl patch svc myapp-service -p '{"spec":{"selector":{"app":"myapp", "version":"green"}}}'
✅ Blue에서 Green으로 즉시 트래픽 전환 가능!
4️⃣ Canary vs. Blue-Green 비교
배포 방식특징장점단점
Canary 배포 | 점진적 트래픽 전환 | 작은 규모로 테스트 가능 | 배포 시간이 길어질 수 있음 |
Blue-Green 배포 | 완전한 환경 분리 후 한 번에 전환 | 빠른 롤백 가능 | 리소스를 두 배로 사용해야 함 |
🔥 Canary 배포는 리스크가 높은 경우 유용하고, Blue-Green 배포는 빠르게 롤백할 수 있는 장점이 있음!
📌 결론: Kubernetes 배포 전략 선택하기
✔ Canary 배포 → 점진적인 트래픽 전환이 필요할 때
✔ Blue-Green 배포 → 완전한 환경을 새롭게 배포한 후 빠르게 전환할 때
🔥 올바른 배포 전략을 선택하면 Kubernetes에서 안전한 무중단 배포가 가능! 🚀
'Kubernetes > Kubernetes Basics' 카테고리의 다른 글
📌 Kubernetes 이벤트 기반 자동 확장: KEDA 사용하기 (0) | 2025.03.04 |
---|---|
📌 Kubernetes CI/CD 최적화: GitOps 운영 방식 이해하기 (0) | 2025.03.03 |
📌 Kubernetes 로그 & 모니터링 운영 전략 (0) | 2025.03.03 |
📌 Kubernetes 비용 절감 & 리소스 최적화 전략 (0) | 2025.03.03 |
📌 Kubernetes 보안 강화하기: RBAC, 네트워크 정책, 이미지 스캐닝 (0) | 2025.03.03 |