내 잡다한 노트
[K8S] Multi container pods design patterns 본문
Kubernetes에서 Multi-Container Pods는 여러 컨테이너를 하나의 Pod에 배치하여 서로 긴밀하게 협력하는 애플리케이션 아키텍처를 구현하는 데 사용됩니다. 이러한 디자인은 컨테이너 간의 데이터 공유, 통신, 라이프사이클 관리를 단순화합니다. Multi-Container Pods는 특정 디자인 패턴에 따라 구성되며, 이를 통해 애플리케이션의 다양한 요구사항을 충족할 수 있습니다.
1. Sidecar Pattern
설명
- Sidecar는 주 컨테이너(Main Application Container)를 지원하기 위해 함께 동작하는 보조 컨테이너입니다.
- 주로 주 컨테이너의 기능을 확장하거나 개선하는 역할을 수행합니다.
- Sidecar 컨테이너는 주 컨테이너와 동일한 네트워크와 스토리지를 공유하여 밀접하게 협력합니다.
사용 사례
- 로깅 및 모니터링:
- 주 컨테이너의 로그 데이터를 수집하고 외부 시스템으로 전달.
- 프록시 및 네트워크 관리:
- 주 컨테이너로 들어오는 트래픽을 라우팅하거나 필터링.
- 데이터 동기화:
- 주 컨테이너에서 생성된 데이터를 외부 저장소로 백업.
예제
apiVersion: v1
kind: Pod
metadata:
name: sidecar-pod
spec:
containers:
- name: main-app
image: nginx
- name: sidecar-logger
image: fluentd
volumeMounts:
- name: log-volume
mountPath: /var/log
volumes:
- name: log-volume
emptyDir: {}
2. Ambassador Pattern
설명
- Ambassador 컨테이너는 주 컨테이너의 네트워크 요청을 외부 서비스로 프록시하거나 변환합니다.
- 이를 통해 주 컨테이너는 외부 서비스에 대한 복잡한 설정이나 인증 과정을 몰라도 됩니다.
사용 사례
- 외부 API와의 통합:
- 외부 서비스와의 통신을 위한 공통 네트워크 설정 처리.
- 프록시 설정:
- 주 컨테이너가 직접 처리하기 어려운 네트워크 요청을 관리.
예제
apiVersion: v1
kind: Pod
metadata:
name: ambassador-pod
spec:
containers:
- name: main-app
image: my-app
ports:
- containerPort: 8080
- name: ambassador
image: envoyproxy/envoy
ports:
- containerPort: 9090
3. Adapter Pattern
설명
- Adapter 컨테이너는 주 컨테이너에서 생성된 데이터를 변환하거나 보강하여 다른 시스템과 호환되도록 만듭니다.
- 데이터 포맷 변환, 데이터 보강, 로그 처리 등을 담당합니다.
사용 사례
- 로그 형식 변환:
- 주 컨테이너의 로그를 다른 시스템이 이해할 수 있는 형식으로 변환.
- 데이터 포맷 변환:
- JSON 데이터를 CSV로 변환하는 등 데이터 호환성을 보장.
apiVersion: v1
kind: Pod
metadata:
name: adapter-pod
spec:
containers:
- name: main-app
image: my-app
- name: adapter
image: data-transformer
volumeMounts:
- name: data-volume
mountPath: /data
volumes:
- name: data-volume
emptyDir: {}
4. Init Containers
설명
- Init Containers는 애플리케이션 컨테이너가 시작되기 전에 실행되어 초기 설정을 수행합니다.
- Pod 내 애플리케이션 컨테이너와 분리되어 있으며, 순차적으로 실행됩니다.
사용 사례
- 환경 준비:
- 주 컨테이너 실행 전에 필요한 설정, 파일 다운로드, 데이터 준비.
- 의존성 처리:
- 주 컨테이너 실행 전에 다른 서비스가 준비되었는지 확인.
apiVersion: v1
kind: Pod
metadata:
name: init-container-pod
spec:
initContainers:
- name: init-service
image: busybox
command: ["sh", "-c", "echo Initializing..."]
containers:
- name: main-app
image: nginx
5. Sidekick Pattern
설명
- Sidekick는 주 컨테이너와 유사한 기능을 수행하거나 데이터를 보완하는 컨테이너입니다.
- Sidecar와 유사하지만, 주로 주 컨테이너와 대등한 관계로 동작합니다.
사용 사례
- 데이터 보조 작업:
- 주 컨테이너에서 생성된 데이터를 처리하거나 보완.
- 백업 및 복원:
- 주 컨테이너의 데이터를 정기적으로 백업.
apiVersion: v1
kind: Pod
metadata:
name: sidekick-pod
spec:
containers:
- name: main-app
image: nginx
- name: sidekick-backup
image: backup-agent
volumeMounts:
- name: shared-data
mountPath: /data
volumes:
- name: shared-data
emptyDir: {}
멀티 컨테이너 Pods의 특징
- 공유 리소스:
- 네트워크: 같은 네트워크 네임스페이스를 공유하여 localhost로 통신 가능.
- 스토리지: 같은 스토리지 볼륨을 사용하여 데이터를 공유.
- 단일 라이프사이클:
- Pod 내 모든 컨테이너가 함께 생성되고 함께 삭제됨.
- 역할 분리:
- 주 컨테이너와 보조 컨테이너 간에 역할을 분리하여 각각의 책임을 명확히 정의.
'DevOps > 쿠버네티스' 카테고리의 다른 글
쿠버네티스 노드 관리 (0) | 2024.11.17 |
---|---|
쿠버네티스에서 ~From 이라는 키워드란? (2) | 2024.11.17 |
쿠버네티스 Secrets (0) | 2024.11.17 |
쿠버네티스 ConfigMap (0) | 2024.11.16 |
쿠버네티스 업데이트 및 배포 전략 (0) | 2024.11.16 |