반응형
알아볼 유형은 크게 3가지(기본은 뺏음)
1. 초기화 컨테이너
2. 사이드카 컨테이너(로그 수집 등에 활용)
3. 앰버서더 컨테이너(프록시 서버 등에 활용)
1. 초기화 컨테이너 (Init Containers)
초기화 컨테이너는 파드(Pod) 내의 일반 컨테이너들이 시작되기 전에 실행되는 특수한 컨테이너로, 파드가 정상적으로 작동하기 위해 필요한 초기화 작업을 수행
주요 특징:
- 순차 실행: 초기화 컨테이너는 일반 컨테이너가 시작되기 전에 순차적으로 실행됨
- 독립된 환경: 각 초기화 컨테이너는 다른 초기화 컨테이너와 독립된 환경에서 실행되기 때문에 서로 다른 이미지를 사용할 수 있음
- 실패 처리: 초기화 컨테이너가 실패하면, Kubernetes는 이를 재시도하며, 모든 초기화 컨테이너가 성공적으로 완료될 때까지 일반 컨테이너는 시작되지 않음
사용 사례:
- 애플리케이션 시작 전에 설정 파일을 생성하거나, 데이터베이스 마이그레이션을 수행하는 작업.
- 네트워크 설정이나 권한 설정 등의 초기화 작업.
예시
apiVersion: v1
kind: Pod
metadata:
name: init-container-example
spec:
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'echo Initializing...; sleep 5']
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 80
2. 사이드카 컨테이너 (Sidecar Containers)
사이드카 컨테이너는 파드 내의 메인 애플리케이션 컨테이너와 함께 실행되는 보조 컨테이너. 사이드카 컨테이너는 메인 애플리케이션을 지원하는 다양한 기능을 수행
주요 특징:
- 공유 리소스: 사이드카 컨테이너는 메인 컨테이너와 네트워크, 볼륨 등을 공유
- 독립적 기능 수행: 메인 애플리케이션을 보완하거나 확장하는 기능을 독립적으로 수행할 수 있음
사용 사례:
- 로그 수집기: 애플리케이션 로그를 수집하고 중앙 로그 시스템으로 전송.
- 프록시 서버: 트래픽을 가로채고 필터링하거나, 보안을 강화하는 역할.
- 데이터 동기화: 파일을 주기적으로 동기화하거나, 데이터를 백업하는 역할.
예시:
apiVersion: v1
kind: Pod
metadata:
name: sidecar-container-example
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 80
- name: log-collector
image: log-collector:latest
volumeMounts:
- name: shared-logs
mountPath: /var/log/myapp
volumes:
- name: shared-logs
emptyDir: {}
3. 앰버서더 컨테이너 (Ambassador Containers)
앰버서더 컨테이너는 파드 내의 다른 컨테이너들이 네트워크 요청을 외부 서비스로 보내기 전에 요청을 가로채고 처리하는 역할을 한다. 이는 마이크로서비스 아키텍처에서 특정 서비스에 대한 네트워크 요청을 관리하고 제어하는 데 유용하다.
주요 특징:
- 네트워크 프록시: 앰버서더 컨테이너는 네트워크 요청을 중계하고, 필터링, 로깅, 인증 등의 추가 작업을 수행
- 독립된 네트워크 설정: 다른 컨테이너들과 독립적으로 네트워크 설정을 관리
사용 사례:
- 서비스 메쉬: 서비스 간의 트래픽을 관리하고 모니터링.
- API 게이트웨이: 외부 요청을 수신하고, 내부 서비스로 전달하기 전에 인증 및 권한 부여 수행.
- 네트워크 요청 변환: 요청을 특정 포맷으로 변환하거나, URI를 리디렉션.
예시:
apiVersion: v1
kind: Pod
metadata:
name: ambassador-container-example
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 8080
env:
- name: API_URL
value: "http://localhost:8000" ## 어플리케이션에서는 로컬호스트를 사용하여 프록시서버로 보냄
- name: ambassador
image: simple-proxy:latest
ports:
- containerPort: 8000
env:
- name: PROXY_PORT
value: "8000"
- name: TARGET_URL
value: "http://external-service:80" ## 프록시 서버를 통해 요청이 전달됨
댓글