본문으로 건너뛰기

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 이미지 빌드 및 배포

web

# 이미지 빌드 및 푸시
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로 복제본 관리

deploy

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

관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: Day 4 - Deployment & Container 패턴
노드 클릭 → 이동 · 드래그 → 위치 조정