Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Jason's Blog

MSA 관리를 위한 Service Mesh : ISTIO - 2 본문

Microservice Architecture

MSA 관리를 위한 Service Mesh : ISTIO - 2

Jason Jongjin Lim 2018. 7. 29. 18:52
본 포스팅에선 ISTIO를 Openshift 환경(Kubernetes + Docker)에서 설치하고 예제(BookInfo)를 이용하여 설치하고, ISTIO가 어떻게 동작하며 MSA를 어떻게 구성하는지, DevOps를 어떤 형식으로 구현해 내는지에 대한 이야기를 해볼것이다.




동작 방식을 효율적으로 보여주기 위해 다음과 같은 추가 툴을 사용할 것이다.



  • Prometheus - System 모니터링 및 Alert을 위한 툴킷으로, CNCF(Cloud Native Computing Foundation)의 2번째 호스팅 프로젝트로 선정될 정도로 활발한 오픈소스 모니터링 프로젝트이다.(1번째는 Kubernetes)




  • Grafana - 등록되어있는 서비스(Application)과 상호작용하는 쿼리, 통신, 상태 등을 시각적으로 보기 좋게 나열해주는 metrics visualization 도구이다. 개인적으로 우리나라의 UI와도 잘 어울리는 오픈소스 시각화 프로젝트라고 생각한다.



  • Jaeger Tracing - 등록되어있는 서비스들의 시계열 데이터를 모아 Tracking을 제공해주는 툴킷으로 트러블슈팅, Latency 이슈 등을 트레이싱 할 수 있는 MSA 환경에서의 분산 트레이싱 도구이다.



  • Servicegraph - Mesh안에서 서비스들의 그래프를 나타내주는 툴킷이다.






ISTIO 설치



ISTIO를 설치하기 위해서는 ISTIO #1에서 언급된 것과 같이 Kubernetes 기반의 플랫폼이 미리 준비되어야 한다. 
본 포스트에서는 Openshift 3.7(Kubernetes 1.7)으로 테스트를 진행할 것이다.


먼저, istio 패키지의 배포를 위하여 cluster admin 권한을 가진 유저로 로그인한다


oc login master.jasonopenshift.com -u admin -p admin —insecure-skip-tls-verify=true



현재 istio의 오픈소스 최신버전은 0.8.0이다.(최근 구글에서 istio v1.0을 출시했다) 버전 정보 및 명령어 실행을 위한 PATH를 지정해준다



curl -kL https://git.io/getLatestIstio | sed 's/curl/curl -k /g' | ISTIO_VERSION=${ISTIO_VERSION} sh -
export PATH="$PATH:${ISTIO_HOME}/bin"
cd ${ISTIO_HOME}



다음 미리 정의되어있는 yaml file을 이용하여 istio, prometheus, grafana, service graph, jaeger를 쿠버네티스 환경에 배포한다.
미리 정의된 yaml file은 필자의 github repo에 저장해 두었다.






설치 후 모든 svc를 expose 해준다.


oc expose svc grafana
oc expose svc servicegraph
oc expose svc jaeger-query
oc expose svc istio-ingress
oc expose svc prometheus


Openshift Master console에 접속하여 istio-system project에 접근하면 배포된 service mesh의 전체 스택을 확인할 수 있다.








샘플 Application 배포



이번 단계에선, 샘플 Application을 구성된 Openshift(Kubernetes) 환경에서 설치하고, Istio로 동작할 수 있도록 구성한다.

이 Application은 이미 Python, Node.js, Java, Ruby 네 종류의 언어로 개발된 MSA 구조로, Service Mesh의 명확한 동작 확인을 위해 구성된 샘플이다. 물론 Istio를 제외해도 Openshift 환경에서 동작이 가능하다.


이 샘플 Application의 이름은 Bookinfo이며, 책에 대한 정보, 온라인 스토어, 평점 등을 보여주는 매우 간단한 서비스이다. 




Bookinfo는 다음과 같은 Microservice들로 이루어져 있다.


  • Productpage : 전체 서비스를 이루는 Layout Front-end 페이지이다. 뒤에 나오는 Review 페이지와 Detail 페이지를 포함한다. Python으로 이루어져 있다.

  • Details : 내부 컨텐츠인 책의 상세 정보를 보여주는 microservice로 Ruby로 이루어져 있다.

  • Reviews : 책에 대한 리뷰 정보를 보여주는 microservice로 별점을 호출하기 위하여 Ratings 서비스와 연결된다.

  • Ratings : 각 Reviews에 대한 별점 정보를 저장하는 microservice로 node.js로 이루어져 있다.



이 중, Reviews 서비스는 3가지 Microservice로 이루어져 있다.

  • V1 : ratings 서비스를 호출하지 않는다.

  • V2 : ratings 서비스를 호출하며, 평점에 대한 정보를 검정색 별로 보여준다.

  • V3 : ratings 서비스를 호출하며, 평점에 대한 정보를 빨간색 별로 보여준다.




이 전체 Bookinfo Application의 end-to-end architecture는 아래 그림과 같다. 








Bookinfo 설치


다음 명령어를 master node에서 실행해 준다.



oc project istio-system



 Bookinfo Application은 Deployments, Services, Routes같은 간단한 Kubernetes object로 이루어져 있다. 또한 소스코드가 아닌 이미지로 배포하는 매우 심플한 Application이다.



설치 과정 중 살펴보면, Bookinfo Application을 Istio 기능을 통해 “decoreate” 시켜준다. 구체적으로 언급하자면, 평범한 Microservice Application에 Istio Envoy 컨테이너를 삽입하여 Application pod에 두가지 컨테이너가 동작하게 만들어 준다.



조금 어려운 이야기이지만, 이는 Netflix OSS의 Service mesh 기능을 사용하기 위해 maven dependencies에 라이브러리를 등록하고, API를 사용하기 위해 소스코드를 수정해야하는 수고로움이 줄어드는 효과가 있다.





Bookinfo 접속



Openshift Console에 접속하여 Bookinfo Product page의 routes 주소로 접근한다. 접근하면 다음과 같은 화면이 나온다.



Bookinfo 화면




여기서 특이점은, 브라우저의 refresh(f5) 버튼을 계속 눌러보면, 지속적으로 랜덤하게 다른 버전의 revies service가 나타나는 것을 볼 수 있다. - 별이 없는 것은 v1, 검정색 별은 v2, 빨간색 별은 v3 :


  • v1
  • v2
  • v3


그 이유는 3가지 다른 버전의 reviews deployment가 Application stack에 있으며, Istio의 Load-balancer는 round-robin 알고리즘을 이용하여 3개의 인스턴스를 고르게 Routing해주기 때문이다.

Bookinfo 배포 및 Istio Inject 작업을 완료한 후 Openshift Pod는 모든 종류의 microservice와 Envoy sidecar 2가지 컨테이너를 구성하게 된다. 이 Microservice들은 productpage, details, ratings, reviews이며, 이 중 reviews는 3가지 버전의 pod를 가지고 있다.






금번 포스팅에선 Istio를 설치하고, Service mesh를 사용하기 위한 간단한 Sample application인 Bookinfo를 배포, 확인하였다. 다음 포스팅에서 부턴 Microservice Architecture 관리를 위한 Service Mesh의 기능들을 살펴보도록 하겠다.


Comments