본문 바로가기
Development, Architecture/Docker, k8s

[쿠버네티스] 다양한 컨테이너 유형 정리

by ggyongi 2024. 7. 27.
반응형

알아볼 유형은 크게 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"  ## 프록시 서버를 통해 요청이 전달됨
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글