Day 4 - Deployment & Container 패턴
Day 4 - Deployment & Container 패턴
목차
사전 준비
# spa-web 압축 해제
unzip spa-web.zip
# 노드 상태 확인
kubectl get nodes
# 스왑 비활성화
ssh k8s-n1 "sudo swapoff -a"
ssh k8s-n2 "sudo swapoff -a"
ssh k8s-n3 "sudo swapoff -a"
1. Docker 이미지 빌드 및 배포

# 이미지 빌드 및 푸시
docker build -t web:nginx-1.29.3-alpine .
docker tag web:nginx-1.29.3-alpine pyh5523/web:nginx-1.29.3-alpine
docker push pyh5523/web:nginx-1.29.3-alpine
# Pod 및 Service 생성
kubectl run pod-web --image=pyh5523/web:nginx-1.29.3-alpine-v2
kubectl expose pod pod-web --name=svc-web --type=NodePort --port=8080 --target-port=80
Service Type 비교
| Type | 외부 접근 | 사용 사례 |
|---|---|---|
| ClusterIP | ❌ | 내부 통신 |
| NodePort | ✅ | 개발/테스트 |
| LoadBalancer | ✅ | 클라우드 환경 |
2. Deployment로 복제본 관리

Deployment 생성
kubectl create deployment deploy-web \
--image=pyh5523/web:nginx-1.29.3-alpine-v2 \
--port=80 \
--replicas=3
kubectl expose deployment deploy-web \
--name=svc-deploy-web \
--port=8081 \
--target-port=80 \
--type=NodePort
자가 복구 테스트
# Pod 삭제해도 자동 재생성
kubectl delete pod deploy-web-xxxxx
kubectl get pods # 새 Pod 확인
삭제
kubectl delete deployment deploy-web
kubectl delete svc svc-deploy-web
3. InitContainer 패턴
InitContainer는 메인 컨테이너 실행 전 초기화 작업 수행
서비스 의존성 예제
kubectl apply -f weather/myservice.yaml
kubectl apply -f weather/myapp-init-pod.yaml
nslookup으로 서비스 존재 확인 후 메인 컨테이너 시작
날씨 API 예제
kubectl apply -f weather/weather.yaml
kubectl expose pod pod-weather --name=svc-weather --type=NodePort --port=80
- InitContainer가 날씨 API 호출 → index.html 저장
- Nginx가 해당 파일 서빙
4. Sidecar Container 패턴
메인 컨테이너를 보조하는 컨테이너를 같은 Pod에 배치
| 용도 | 예시 |
|---|---|
| 로그 수집 | Fluentd, Filebeat |
| 프록시 | Envoy, Istio |
| 모니터링 | 메트릭 수집 에이전트 |
4-1. 시간 로그 예제
kubectl apply -f sidecar/sidecar-pod.yaml
kubectl expose pod log-pod --name=svc-log --type=NodePort --port=80
┌─────────────────────────────────────┐
│ Pod │
│ ┌─────────┐ ┌───────────────┐ │
│ │ nginx │◄───│ sidecar │ │
│ │ │ │ (시간 기록) │ │
│ └────┬────┘ └───────┬───────┘ │
│ └────────┬────────┘ │
│ emptyDir │
└─────────────────────────────────────┘
4-2. Nginx 로그 모니터링
kubectl apply -f sidecar/blog-web.yaml
kubectl expose pod blog-web --name=svc-blog --type=NodePort --port=80
# 로그 확인
kubectl logs -f blog-web -c sidecar-container
삭제
kubectl delete pod log-pod blog-web
kubectl delete svc svc-log svc-blog