728x90
들어가며
이전 포스트에서 다룬 쿠버네티스의 핵심 개념들을 실제 환경에서 어떻게 활용하는지 알아보겠습니다. 실제 배포 시나리오와 함께 현장에서 유용한 운영 팁들을 공유하겠습니다.
1. 무중단 배포 전략
롤링 업데이트 (Rolling Update)
가장 기본적인 무중단 배포 방식입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
# ... pod 템플릿 설정 ...
블루-그린 배포
새 버전을 완전히 배포한 후 트래픽을 전환합니다.
# 블루 버전 (현재 운영 버전)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-blue
spec:
replicas: 3
selector:
matchLabels:
app: my-app
version: blue
template:
metadata:
labels:
app: my-app
version: blue
spec:
containers:
- name: my-app
image: my-app:1.0
---
# 그린 버전 (새 버전)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-green
spec:
replicas: 3
selector:
matchLabels:
app: my-app
version: green
template:
metadata:
labels:
app: my-app
version: green
spec:
containers:
- name: my-app
image: my-app:2.0
---
# 서비스 (트래픽 전환용)
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
version: blue # 버전 전환 시 이 부분만 수정
ports:
- port: 80
targetPort: 8080
2. 리소스 관리와 오토스케일링
리소스 요청과 제한 설정
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: my-app
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
HorizontalPodAutoscaler 설정
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
3. 모니터링과 로깅 설정
Prometheus + Grafana 설정
# Prometheus ServiceMonitor 예제
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app-monitor
spec:
selector:
matchLabels:
app: my-app
endpoints:
- port: metrics
중앙 로깅 시스템 연동
# Fluentd ConfigMap 예제
apiVersion: v1
kind: ConfigMap
metadata:
name: fluentd-config
data:
fluent.conf: |
<source>
@type tail
path /var/log/containers/*.log
pos_file /var/log/fluentd-containers.log.pos
tag kubernetes.*
read_from_head true
<parse>
@type json
</parse>
</source>
728x90
4. 실전 운영 팁
1. 헬스체크 설정
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: my-app
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
2. 네트워크 정책 설정
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: my-app-network-policy
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 8080
5. 유용한 운영 명령어 모음
문제 해결을 위한 명령어
# 파드 상태 확인
kubectl get pods -n <namespace> -o wide
# 파드 로그 확인
kubectl logs <pod-name> -n <namespace> -f
# 파드 내부 접속
kubectl exec -it <pod-name> -n <namespace> -- /bin/sh
# 리소스 사용량 확인
kubectl top pods -n <namespace>
배포 관련 명령어
# 롤아웃 상태 확인
kubectl rollout status deployment/<deployment-name>
# 이전 버전으로 롤백
kubectl rollout undo deployment/<deployment-name>
# 배포 히스토리 확인
kubectl rollout history deployment/<deployment-name>
6. 장애 대응 시나리오
메모리 누수 대응
- 모니터링 지표 확인
- 해당 파드의 로그 분석
- 임시 조치로 메모리 제한 상향
- 주기적 재시작 설정
# 주기적 재시작을 위한 CronJob 예제
apiVersion: batch/v1
kind: CronJob
metadata:
name: restart-deployment
spec:
schedule: "0 0 * * *" # 매일 자정
jobTemplate:
spec:
template:
spec:
containers:
- name: kubectl
image: bitnami/kubectl
command:
- /bin/sh
- -c
- kubectl rollout restart deployment/my-app
restartPolicy: OnFailure
마치며
실제 운영 환경에서는 이러한 배포 전략과 운영 팁들을 상황에 맞게 조합하여 사용해야 합니다. 특히 중요한 점은:
- 충분한 테스트 환경에서의 검증
- 모니터링과 알림 체계 구축
- 롤백 절차 준비
- 장애 대응 시나리오 문서화
다음 포스트에서는 쿠버네티스 클러스터 자체의 관리와 보안에 대해 다루도록 하겠습니다.
728x90
'IT 개발 > 클라우드' 카테고리의 다른 글
[쿠버네티스] 매니페스트 완벽 가이드 (74) | 2025.02.07 |
---|---|
[쿠버네티스] 쿠버네티스 클러스터 관리와 보안: 운영자 가이드 (70) | 2025.02.06 |
[쿠버네티스] 쿠버네티스 핵심 개념 마스터하기: 실전 가이드 (87) | 2025.02.04 |
[쿠버네티스] 도커에서 쿠버네티스로: 컨테이너 오케스트레이션의 시작 (56) | 2025.02.03 |
[도커] Docker Compose 완벽 가이드 (41) | 2025.02.02 |