본문 바로가기

Cloud/Oracle Cloud Infrastructure (OCI)

OCI상에서 ISTIO를 활용하여 구현한 Service Mesh - #9. 이스티오 데모 - 서비스 시각화 (프로메테우스)

Oracle Cloud Infrastructure (OCI) 에서 이스티오(ISTIO)를 활용한 서비스 메쉬(Service Mesh)에 대한 기술 정리 및 이를 데모로 구현한 내용을 정리합니다.

글 순서

1. Overview

2. 이스티오 작동 방식

3. 이스티오 데모 - 사전 준비

4. 이스티오 데모 - 쿠버네티스 대쉬보드 설치/설정

5. 이스티오 데모 - 이스티오 설치, 엔보이 프록시 주입

6. 이스티오 데모 - 샘플 어플리케이션 (Bookinfo) 배포

7. 이스티오 데모 - 카나리 배포

8. 이스티오 데모 - 결함 주입(Fault Injection)

9. 이스티오 데모 - 서비스 시각화 (프로메테우스)

10. 이스티오 데모 - 서비스 시각화 (그라파나)

11. 이스티오 데모 - 서비스 시각화 (키알리)

12. 이스티오 데모 - 서비스 시각화 (예거)

 

REFERENCES

아래 도서 및 사이트를 참조하여 작성한 문서입니다.

  • 도메인 주도 설계로 시작하는 마이크로 서비스 개발 (위키북스)
  • 쿠버네티스 완벽 가이드 (길벗)
  • Istio로 시작하는 서비스 메시 (에이콘)
  • Isitio Documentation

 

쿠버네티스 서비스 시각화

프로메테우스(Prometheus)로 쿠버네티스 클러스터의 메트릭을 수집하고, 그라파나(Grafana), 키알리(Kiali), 예거(Yaeger) 등으로 수집된 메트릭을 시각화할 수 있습니다. 이를 살펴보겠습니다.

 

프로메테우스 (Prometheus)

프로메테우스는 오픈 소스 모니터링 시스템 및 시계열 데이터베이스입니다. 이스티오와 함께 프로메테우스를 사용하여 서비스 메쉬 내에서 이스티오 및 어플리케이션의 상태를 추적하는 메트릭을 기록할 수 있습니다.

먼저 프로메테우스를 설치합니다. Helm Chart로도 프로메테우스와 그라파나를 묶어서 배포할 수 있으나, 여기에서는 보다 간단한 kubectl 명령으로 설치했습니다.

설치는 아래에서와 같이 성능이나 보안 등에 대한 고려는 하지 않고 단지 데모용으로 빠른 설치를 진행할 수 있습니다. 또는 각 시스템 환경에 맞춰 사용자 정의로 설치할 수 있습니다. 여기에서는 데모용도 이므로 빠른 설치를 선택했습니다.

아래 방식으로 프로메테우스 설치하면 메트릭에 대한 수집은 기본값으로 활성화되어 있습니다. 참고로 메트릭에 대한 수집을 수동으로 설정할 수도 있습니다.

[opc@demo ~]$ kubectl apply -f <https://raw.githubusercontent.com/istio/istio/release-1.14/samples/addons/prometheus.yaml>
serviceaccount/prometheus created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
service/prometheus created
deployment.apps/prometheus created

 

프로메테우스 설치가 완료되면, istio-system 네임스페이스에 디플로이먼트, 파드, 서비스 등이 생성된 것을 알 수 있습니다.

[opc@demo ~]$ kubectl get deploy,po,svc -n istio-system
NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/istio-egressgateway    1/1     1            1           10h
deployment.apps/istio-ingressgateway   1/1     1            1           10h
deployment.apps/istiod                 1/1     1            1           10h
deployment.apps/prometheus             1/1     1            1           3m43s

NAME                                        READY   STATUS    RESTARTS   AGE
pod/istio-egressgateway-7fcb98978c-fx89l    1/1     Running   0          10h
pod/istio-ingressgateway-55b6cffcbc-24plw   1/1     Running   0          10h
pod/istiod-56d9c5557-nxnvj                  1/1     Running   0          10h
pod/prometheus-7cc96d969f-jjjxk             2/2     Running   0          3m43s

NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                                                      AGE
service/istio-egressgateway    ClusterIP      10.96.214.122   <none>          80/TCP,443/TCP                                                               10h
service/istio-ingressgateway   LoadBalancer   10.96.160.55    150.230.7.116   15021:30353/TCP,80:30445/TCP,443:32751/TCP,31400:32043/TCP,15443:32178/TCP   10h
service/istiod                 ClusterIP      10.96.139.78    <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        10h
service/prometheus             ClusterIP      10.96.121.169   <none>          9090/TCP                                                                     3m43s
[opc@demo ~]$

 

<END>