DATA GROUND 로고DATA GROUND
Kubernetes

[Kubernetes] Pod 안에 여러 개의 컨테이너를 사용하는 이유

S.H. Yoo
마지막 업데이트: 2024-04-13

Kubernetes Pod 안에 여러 개의 컨테이너를 배치하는 이유와 장점, 그리고 사이드카 패턴 등 대표적인 활용 사례를 정리합니다.

작성일: 2024-04-13작성자: S.H. Yoo마지막 업데이트: 2024-04-13

Pod 안에 여러 개의 컨테이너를 사용할 수 있는 이유

Kubernetes에서는
하나의 Pod 안에 하나 이상의 컨테이너를 포함할 수 있습니다.

그렇다면 왜 컨테이너를 각각 분리해 배포하지 않고,
여러 개의 컨테이너를 Pod 단위로 묶어서 배포할까요?

이는 단순한 기능이 아니라
Kubernetes 설계 철학과 밀접하게 연결된 중요한 개념입니다.


1. 리소스 공유

Pod 내부의 컨테이너들은 다음 리소스를 공유할 수 있습니다.

  • 네트워크 네임스페이스
  • IPC 네임스페이스
  • 스토리지 볼륨

이로 인해 다음과 같은 특징이 생깁니다.

  • 컨테이너 간 통신을 localhost로 수행 가능
  • Pod 내부 모든 컨테이너는 같은 IP 주소 사용
  • 포트 공간을 공유하여 네트워크 설정이 단순해짐
  • 공유 볼륨을 통해 데이터 교환 가능

2. 강한 커플링(Co-location)

서로 밀접하게 연관된 컴포넌트들은
같은 Pod에 배치하는 것이 관리 측면에서 유리합니다.

대표적인 예시는 다음과 같습니다.

  • 메인 애플리케이션 컨테이너
  • 로그 수집기 컨테이너
  • 모니터링 에이전트

이러한 구성 요소들은
서로 강하게 의존하므로 함께 배포·운영되는 것이 자연스럽습니다.


3. 생명주기 관리

Pod 안의 컨테이너들은
함께 시작되고, 함께 종료됩니다.

이는 다음과 같은 장점을 제공합니다.

  • 의존적인 컨테이너 간 생명주기 동기화
  • 애플리케이션 시작/종료 시 주변 컴포넌트 자동 정렬
  • 운영 중 상태 관리 단순화

4. 효율적인 리소스 사용

여러 컨테이너를 개별 Pod로 배포하면
각각에 대해 오버헤드가 발생합니다.

Pod 단위로 묶을 경우:

  • 네트워크 리소스 공유
  • 스토리지 공유
  • 관리 단위 축소

결과적으로
리소스를 더 효율적으로 사용할 수 있습니다.


5. 디스크 볼륨 공유의 중요성

실무에서 가장 많이 활용되는 이유 중 하나가
디스크 볼륨 공유입니다.

예를 들어:

  • 애플리케이션 컨테이너 (Tomcat, Node.js)
  • 로그 수집기 컨테이너 (Fluentd, Filebeat)

일반적으로 컨테이너는
서로 파일 시스템이 완전히 분리되어 있습니다.

따라서 컨테이너를 분리 배포하면
로그 수집기가 애플리케이션 로그 파일을 직접 읽을 수 없습니다.

하지만 Kubernetes에서는
같은 Pod 안의 컨테이너끼리는 볼륨을 공유할 수 있습니다.

이를 통해:

  • 애플리케이션 로그 파일을 동일한 볼륨에 기록
  • 로그 수집 컨테이너가 해당 파일을 읽어 수집

이라는 구조가 가능합니다.


사이드카(Sidecar) 패턴

이처럼 애플리케이션과
그 애플리케이션을 보조하는 컨테이너를
같은 Pod에 배치하는 패턴을 **사이드카 패턴(Sidecar Pattern)**이라고 합니다.

대표적인 사이드카 예시:

  • 로그 수집기
  • 프록시 (Envoy, Nginx)
  • 모니터링 에이전트

이 외에도 Kubernetes에는 다음과 같은 패턴들이 존재합니다.

  • Ambassador 패턴: 외부 통신을 담당
  • Adapter 패턴: 데이터 포맷 변환 및 표준화

마무리하며

Pod 안에 여러 컨테이너를 배치하는 것은
단순한 편의 기능이 아니라
Kubernetes의 핵심 설계 철학 중 하나입니다.

정리하면 다음과 같습니다.

  • 함께 동작해야 하는 컴포넌트는 함께 배치
  • 리소스와 생명주기를 공유
  • 사이드카 패턴을 통한 확장성과 유연성 확보

이 개념을 이해하면
Kubernetes 아키텍처 설계가 훨씬 명확해집니다.

마지막 업데이트: 2024-04-13

당신이 관심있을 만한 글