개발 창고/Server

Pod 살펴보기 - Part6: 컨테이너 한 개로는 부족해

로이제로 2025. 7. 24. 22:00
반응형

들어가며: 왜 컨테이너가 하나로 부족할까?

일반적으로 하나의 Pod에는 하나의 컨테이너만 배포됩니다.
그러나 복잡한 애플리케이션 아키텍처에서는 메인 애플리케이션 외에도 로깅, 모니터링, 프록시 등의 보조 컨테이너가 필요할 수 있습니다.

Kubernetes에서는 이런 패턴을 위해 멀티 컨테이너 Pod를 지원합니다. 이번 글에서는:

  • 멀티 컨테이너 Pod의 필요성
  • 대표 패턴 (Sidecar, Ambassador, Adapter)
  • 실습 가능한 YAML 예시
  • 운영 시 주의사항

목차 (Table of Contents)

  1. 멀티 컨테이너 Pod란?
  2. 왜 멀티 컨테이너 Pod를 사용해야 할까?
  3. 멀티 컨테이너 Pod 설계 패턴
  4. Sidecar 패턴 예제
  5. 멀티 컨테이너 Pod YAML 예시
  6. 운영 시 주의사항
  7. FAQ (Answer Engine Optimization)
  8. 핵심 요약
  9. 마무리

1. 멀티 컨테이너 Pod란?

멀티 컨테이너 Pod는 하나의 Pod 내에 2개 이상의 컨테이너가 포함된 구조입니다.
Pod 내 컨테이너들은 동일한 네트워크 네임스페이스와 Volume을 공유합니다.

  • 예: 웹 애플리케이션 + 로그 수집기
  • 장점: 데이터와 포트를 공유해 추가 인프라 없이 협업 가능

2. 왜 멀티 컨테이너 Pod를 사용해야 할까?

  • 로깅 및 모니터링: 별도 컨테이너에서 로그를 수집하고 외부로 전송
  • 보안 프록시: API 요청을 메인 컨테이너로 전달하기 전에 인증·검증
  • 데이터 변환: Adapter 컨테이너가 데이터를 전처리하여 메인 컨테이너에 전달

3. 멀티 컨테이너 Pod 설계 패턴

(1) Sidecar Pattern

  • 메인 컨테이너를 지원하는 보조 컨테이너
  • 예: Nginx 웹 서버 + Fluentd 로그 수집기

(2) Ambassador Pattern

  • 외부 서비스와의 통신을 중계하는 컨테이너
  • 예: DB 연결 프록시

(3) Adapter Pattern

  • 메인 컨테이너의 출력 포맷을 다른 서비스와 호환되도록 변환
  • 예: 메트릭 데이터를 Prometheus 포맷으로 변환

4. Sidecar 패턴 예제

아래 예시는 웹 서버 컨테이너와 로그 수집기를 같은 Pod에서 실행하는 YAML입니다.

apiVersion: v1
kind: Pod
metadata:
  name: sidecar-pod
spec:
  containers:
    - name: web
      image: nginx
      volumeMounts:
        - name: shared-logs
          mountPath: /var/log/nginx
    - name: log-agent
      image: fluentd
      volumeMounts:
        - name: shared-logs
          mountPath: /var/log/nginx
  volumes:
    - name: shared-logs
      emptyDir: {}

특징: 두 컨테이너가 /var/log/nginx 볼륨을 공유해 로그 데이터를 실시간으로 전달합니다.


5. 멀티 컨테이너 Pod YAML 예시

apiVersion: v1
kind: Pod
metadata:
  name: multi-pod
spec:
  containers:
    - name: app
      image: myapp:latest
      ports:
        - containerPort: 8080
    - name: helper
      image: busybox
      command: ["sh", "-c", "while true; do echo Helper running; sleep 10; done"]

이 예시는 메인 애플리케이션(myapp)과 보조 헬퍼 컨테이너(busybox)를 동시에 실행합니다.


6. 운영 시 주의사항

  • 동일 Pod 내 컨테이너는 함께 배포되고 함께 종료됩니다.
  • 컨테이너 간 자원 경쟁이 발생할 수 있으므로 CPU/Memory Limits를 별도 설정해야 합니다.
  • Pod의 유지보수를 단순화하기 위해 Sidecar 기능은 최소화하는 것이 좋습니다.

7. FAQ (Answer Engine Optimization)

Q1. 멀티 컨테이너 Pod와 Deployment를 사용하는 차이점은?
A. Deployment는 여러 Pod를 관리하고, 멀티 컨테이너 Pod는 하나의 Pod 내부에서 컨테이너를 협업 구조로 묶습니다.

Q2. 컨테이너 간 통신은 어떻게 하나요?
A. Pod 내 컨테이너들은 localhost와 동일한 포트 공간을 공유합니다.

Q3. Sidecar 컨테이너는 꼭 필요한가요?
A. 필수는 아니지만, 로깅·보안·프록시 기능이 필요한 경우 매우 유용합니다.


8. 핵심 요약

개념 설명
멀티 컨테이너 Pod 하나의 Pod에서 2개 이상의 컨테이너 실행
Sidecar 패턴 메인 컨테이너를 지원하는 보조 컨테이너
Ambassador 패턴 외부 서비스와 연결을 중계
Adapter 패턴 데이터 변환 및 포맷팅
주의사항 자원 설정 및 복잡도 관리 필요

9. 마무리

멀티 컨테이너 Pod는 마이크로서비스 아키텍처에서 강력한 유연성을 제공합니다.


반응형