[kubernetes] 멀티 컨테이너 패턴 (사이드카, 엠버서더, 어댑터)

vinca·2023년 12월 14일
0

☸️ kubernetes

목록 보기
26/35
post-thumbnail

멀티 컨테이너 패턴

여러 컨테이너가 하나의 파드 내에서 협력하여 작동하는 방식을 의미한다.
🤔 파드 1 : 컨테이너 1 생각을 버린.. 마치 도커 컴포즈 같은 느낌이랄까?

사이드카 패턴

'사이드카' 컨테이너는 메인 애플리케이션 컨테이너의 기능을 보조하는 역할을 수행한다.
예를 들어, 로그 수집, 모니터링, 구성 파일 업데이트 등의 작업을 수행할 수 있다.
메인 애플리케이션 컨테이너와 사이드카로 딸려있는 컨테이너는 같은 파드에 있으므로 동일한 리소스(볼륨, 네트워크)를 공유할 수 있다.

예시) 초기화(Init) 컨테이너

초기화 컨테이너에서 index.html 파일을 생성하여 파드 내 볼륨인 empty-directory에 마운트하여 미리 공유해 두고, 메인 컨테이너인 nginx의 html파일이 위치하는 공간을 empty-directory로 마운트해보자.

이를 통해서 초기화 컨테이너에서 생성한 index.html파일을 메인 컨테이너인 nginx에서 읽어와 출력한다.

확인을 위해서 간단하게 서비스를 만들고 노출시켜 보도록하자.

  • 서비스 생성 및 연결
apiVersion: v1
kind: Service
metadata:
  name: pod-initcontainers-service
spec:
  selector:
    app: nginx  # 위에서 설정한 라벨을 선택합니다.
  ports:
    - protocol: TCP
      port: 80  # 노드포트로 사용할 포트 번호를 여기에 지정합니다.
      targetPort: 80  # Pod의 타겟 포트를 여기에 지정합니다.
  type: NodePort  # 노드포트 서비스로 설정합니다.

---------------------------------------------
# 서비스 노출
kubectl apply -f your-service-definition.yaml

외부에서 <노드IP>:<노트포트> 로 접속하면 다음과 같은 결과를 확인할 수 있다.

  • 접속 결과

엠버서더 패턴

엠버서더 컨테이너는 네트워크 프록시의 역할을 수행한다. 즉, 내부의 실제 서비스가 직접적으로 노출되지 않도록 대신 노출되는 것이다.

어댑터 패턴

어댑터 컨테이너는 다른 컨테이너들로부터의 출력을 표준화하는 역할을 수행한다.

예를 들어, 여러 서비스에서 다양한 형식의 로그를 생성할 때, 어댑터 컨테이너를 사용함으로써 이를 표준 형식으로 변환할 수 있다.
이를 통해 모니터링이나 로깅 시스템이 다양한 형식의 데이터를 쉽게 처리할 수 있게 도와준다.

실습

nginx에서 측정된 데이터를 프로메테우스로 변환해서 노출시켜 보도록 하자.

apiVersion: v1
kind: Pod
metadata:
  name: pod-adapter
  labels:
    app: nginx
spec:
 # 측정될 메인 컨테이너
  containers:
  - name: web-page
    image: nginx
    volumeMounts:
    - mountPath: /etc/nginx/conf.d
      name: nginx-conf
  # 어댑터 컨테이너 연결
  - name: adapter
    image: nginx/nginx-prometheus-exporter:0.9.0
    env:
    - name: SCRAPE_URI
      value: http://localhost/stub_status
    ports:
    - containerPort: 9113
  # 볼륨 conf
  volumes:
  - name: nginx-conf
    configMap:
      name: nginx-conf
      items:
      - key: default.conf
        path: default.conf

한 파드 내 2개의 컨테이너가 Ready (2/2) 상태인 것을 확인할 수 있고, 다음 명령어를 통해서 프로메테우스가 NGINX 웹 서버에서 수집한 메트릭(metric) 정보들을 확인할 수 있다.

curl 172.16.132.25:9113/metrics

궁금하신 분들을 위해... Prometheus🔥 정보

  • nginx_connections_accepted : 클라이언트로부터 수락된 총 연결 수를 나타내는 카운터(metric)입니다.
  • nginx_connections_active : 현재 활성화된 클라이언트 연결 수를 나타내는 게이지(metric)입니다.
  • nginx_connections_handled : 총 처리된 클라이언트 연결 수를 나타내는 카운터(metric)입니다.
  • nginx_connections_reading : NGINX가 클라이언트 요청 헤더를 읽는 중인 연결 수를 나타내는 게이지(metric)입니다.
  • nginx_connections_waiting : 현재 대기 중인(Idle) 클라이언트 연결 수를 나타내는 게이지(metric)입니다.
  • nginx_connections_writing : NGINX가 클라이언트에 응답을 쓰고 있는 중인 연결 수를 나타내는 게이지(metric)입니다.
  • nginx_http_requests_total : 총 HTTP 요청 수를 나타내는 카운터(metric)입니다.
  • nginx_up: NGINX 웹 서버의 상태를 나타내는 게이지(metric)입니다. 1은 서버가 작동 중이며 정상임을 나타냅니다.
  • nginxexporter_build_info : 이 메트릭은 NGINX Exporter 빌드 정보를 제공합니다.

Reference

그림으로 배우는 쿠버네티스
컨테이너 패턴

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글