728x90
1. 멀티 컨테이너 Pod 개요
멀티 컨테이너 Pod는 긴밀하게 결합된 여러 컨테이너를 하나의 Pod 내에서 실행하는 패턴입니다. 이 패턴은 다음과 같은 상황에서 유용합니다:
- 로그 수집기와 애플리케이션 서버
- 프록시와 웹 서버
- 데이터 동기화가 필요한 컨테이너들
2. 주요 패턴
2.1 사이드카 패턴
apiVersion: v1
kind: Pod
metadata:
name: sidecar-pod
spec:
containers:
- name: main-app
image: nginx
volumeMounts:
- name: shared-logs
mountPath: /var/log/nginx
- name: log-collector
image: busybox
command: ["sh", "-c", "tail -f /var/log/nginx/access.log"]
volumeMounts:
- name: shared-logs
mountPath: /var/log/nginx
volumes:
- name: shared-logs
emptyDir: {}
2.2 앰배서더 패턴
apiVersion: v1
kind: Pod
metadata:
name: ambassador-pod
spec:
containers:
- name: main-app
image: my-app
env:
- name: REDIS_HOST
value: localhost
- name: redis-proxy
image: redis-proxy
ports:
- containerPort: 6379
2.3 어댑터 패턴
apiVersion: v1
kind: Pod
metadata:
name: adapter-pod
spec:
containers:
- name: main-app
image: app
ports:
- containerPort: 8080
- name: adapter
image: metrics-adapter
ports:
- containerPort: 9090
3. 컨테이너 간 통신 방법
3.1 공유 볼륨
volumes:
- name: shared-data
emptyDir: {}
volumeMounts:
- name: shared-data
mountPath: /data
3.2 localhost 네트워킹
같은 Pod 내의 컨테이너들은 localhost를 통해 통신 가능:
env:
- name: SERVICE_URL
value: "http://localhost:9090"
4. 리소스 관리
각 컨테이너별로 리소스 제한을 설정해야 합니다:
spec:
containers:
- name: app
resources:
limits:
memory: "256Mi"
cpu: "500m"
requests:
memory: "128Mi"
cpu: "250m"
- name: sidecar
resources:
limits:
memory: "64Mi"
cpu: "250m"
requests:
memory: "32Mi"
cpu: "125m"
728x90
5. 라이프사이클 관리
5.1 초기화 컨테이너
spec:
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
containers:
- name: main-app
image: myapp
5.2 종료 처리
spec:
containers:
- name: main-app
lifecycle:
preStop:
exec:
command: ["/bin/sh","-c","nginx -s quit"]
6. 모니터링과 로깅
6.1 사이드카를 이용한 로그 수집
spec:
containers:
- name: app
volumeMounts:
- name: logs
mountPath: /var/log
- name: log-collector
image: fluentd
volumeMounts:
- name: logs
mountPath: /var/log
7. 실전 예시: 웹 애플리케이션과 캐시
apiVersion: v1
kind: Pod
metadata:
name: web-cache-pod
spec:
containers:
- name: webapp
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: cache-volume
mountPath: /cache
- name: cache-proxy
image: redis
ports:
- containerPort: 6379
volumeMounts:
- name: cache-volume
mountPath: /data
volumes:
- name: cache-volume
emptyDir: {}
8. 베스트 프랙티스
- Pod 내 컨테이너 수 최소화
- 적절한 리소스 제한 설정
- 헬스 체크 구현
- 로깅 전략 수립
- 보안 컨텍스트 설정
9. 문제 해결
- 컨테이너 로그 확인
kubectl logs pod-name -c container-name
- 컨테이너 진입
kubectl exec -it pod-name -c container-name -- /bin/sh
- Pod 상태 확인
kubectl describe pod pod-name
728x90
'IT 개발 > 클라우드' 카테고리의 다른 글
[쿠버네티스] Ingress 완벽 가이드 (66) | 2025.02.10 |
---|---|
[쿠버네티스] StatefulSet 완벽 가이드 (51) | 2025.02.09 |
[쿠버네티스] 매니페스트 완벽 가이드 (74) | 2025.02.07 |
[쿠버네티스] 쿠버네티스 클러스터 관리와 보안: 운영자 가이드 (70) | 2025.02.06 |
[쿠버네티스] 쿠버네티스 실전 배포 시나리오와 운영 팁: 현장 가이드 (69) | 2025.02.05 |