여러 컨테이너가 하나의 파드 내에서 협력하여 작동하는 방식을 의미한다.
🤔 파드 1 : 컨테이너 1
생각을 버린.. 마치 도커 컴포즈 같은 느낌이랄까?
'사이드카' 컨테이너는 메인 애플리케이션 컨테이너의 기능을 보조하는 역할을 수행한다.
예를 들어, 로그 수집, 모니터링, 구성 파일 업데이트 등의 작업을 수행할 수 있다.
메인 애플리케이션 컨테이너와 사이드카로 딸려있는 컨테이너는 같은 파드에 있으므로 동일한 리소스(볼륨, 네트워크)를 공유할 수 있다.
초기화 컨테이너에서 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 빌드 정보를 제공합니다.