본문 바로가기

Cloud/Oracle Cloud Infrastructure (OCI)

OCI상에서 ISTIO를 활용하여 구현한 Service Mesh - #10. 이스티오 데모 - 서비스 시각화 (그라파나)

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) 등으로 수집된 메트릭을 시각화할 수 있습니다. 이를 살펴보겠습니다.

 

그라파나 (Grafana)

그라파나는 이스티오에 대한 대쉬보드를 구성하는데 사용할 수 있는 오픈소스 모니터링 솔루션입니다. 그라파나를 이용해서 서비스 메쉬 내 어플리케이션과 이스티오의 상태를 모니터링 할 수 있습니다.

그라파나에서 사용자 정의로 대쉬보드를 꾸밀 수 있지만, 이스티오는 서비스 메쉬와 컨트롤 플레인에 대한 주요 메트릭을 미리 설정한 아래와 같은 대쉬보드로 제공하고 있습니다. 여기에서는 이를 활용할 것입니다.

  • 메쉬 대쉬보드: 메쉬에 있는 모든 서비스에 대한 개요 제공
  • 서비스 대쉬보드: 서비스에 대한 메트릭을 상세히 구분해서 제공
  • 워크로드 대쉬보드: 워크로드에 대한 메트릭을 상세히 구분해서 제공
  • 성능 대쉬보드: 메쉬의 자원 사용에 대한 모니터링 제공
  • 컨트롤 플레인 대쉬보드: 컨트롤 플레인의 상태와 성능에 대한 모니터링 제공

 

이러한 대쉬보드를 사용하기 위한 그라파나 설정은 kubectl 명령으로 배포하는 방법, grafana.com에서 제공하는 배포 사항을 임포트하는 방법, Helm Chart 등을 이용해서 사용자 정의로 설치/설정하는 방법 등이 있습니다. 여기에서는 가장 간단한 방법인 kubectl 명령으로 배포합니다.

아래와 같이 kubectl 명령으로 그라파나 매니페스트 파일을 적용합니다.

[opc@demo ~]$ kubectl apply -f <https://raw.githubusercontent.com/istio/istio/release-1.14/samples/addons/grafana.yaml>
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created

 

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

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

NAME                                        READY   STATUS    RESTARTS   AGE
pod/grafana-67f5ccd9d7-6n9jp                1/1     Running   0          2m11s
pod/istio-egressgateway-7fcb98978c-fx89l    1/1     Running   1          2d
pod/istio-ingressgateway-55b6cffcbc-24plw   1/1     Running   1          2d
pod/istiod-56d9c5557-nxnvj                  1/1     Running   1          2d
pod/prometheus-7cc96d969f-jjjxk             2/2     Running   2          37h

NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                                                      AGE
service/grafana                ClusterIP      10.96.225.188   <none>          3000/TCP                                                                     2m11s
service/istio-egressgateway    ClusterIP      10.96.214.122   <none>          80/TCP,443/TCP                                                               2d
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   2d
service/istiod                 ClusterIP      10.96.139.78    <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        2d
service/prometheus             ClusterIP      10.96.121.169   <none>          9090/TCP                                                                     37h

 

이제 그라파나 UI를 통해서 이스티오 대쉬보드를 오픈합니다. 아래 kubectl 명령으로 서비스에 포트 포워딩을 통해 대쉬보드에 접속할 수도 있습니다만, istioctl 명령으로도 가능합니다.

kubectl -n istio-system port-forward service/grafana 3000

istioctl 명령으로 대쉬보드를 오픈합니다.

[opc@demo ~]$ istioctl dashboard grafana
<http://localhost:3000>

istioctl 명령으로 리턴된 URL로 접속하면 그라파나 초기 화면을 볼 수 있습니다.

http://localhost:3000

 

다음은 메쉬 대쉬보드 접속 URL입니다.

http://localhost:3000/d/G8wLrJIZk/istio-mesh-dashboard

몇차례 Bookinfo 어플리케이션을 웹 브라우저에서 호출하고 그라파나로 돌아오면 메쉬의 서비스에 대한 메트릭이 업데이트되고 있음을 확인할 수 있습니다.

 

아래는 서비스 대쉬보드 접속 URL입니다. 서비스에 대한 메트릭 정보를 확인할 수 있습니다.

http://localhost:3000/d/LJ_uJAvmk/istio-service-dashboard

서비스 대쉬보드 General 항목의 모니터링 화면입니다.

 

서비스 대쉬보드 Client Workloads 항목의 모니터링 화면입니다.

 

서비스 대쉬보드 Service Workloads 항목의 모니터링 화면입니다.

 

아래는 워크로드 대쉬보드 접속 URL입니다. 워크로드에 대한 메트릭 정보를 확인할 수 있습니다.

http://localhost:3000/d/UbsSZTDik/istio-workload-dashboard

워크로드 대쉬보드 General 항목의 모니터링 화면입니다.

 

워크로드 대쉬보드 Inbound Workloads 항목의 모니터링 화면입니다.

 

워크로드 대쉬보드 Outbound Services 항목의 모니터링 화면입니다.

 

<END>