Cloud/CloudFoundry

Diego 작동원리 (How it works Diego)

퐁스 2019. 11. 13. 10:17

Diego는 Cloud Foundry 내부에서 컨테이너를 관리하는 시스템이다. 원래는 DEA였다는데 GO언어로 작성되서 DEA+GO로 Diego가 됐다고 한다. (왜 DEA+GO가 Diego가 되는지 영알못은 모르겠따)

Diego는 Diego cell에서 실행중인 인스턴스의 수를 유지하고 컨테이너를 복구해준다. <-- 이 정도로 그냥 넘어가도 되는데 궁금해진 이유는 이 것 때문이였다.

cf-push가 안된다는 질문이였는데 diego-cell 용량이 부족해서 빌드가 안된다는 답변이였다. diego-cell이 뭐지?_? 그냥 컨테이너 관리(kubernetes처럼) 해주는 애가 아닌가..? 하면서 찾아봤다. 

 피보탈 사이트에서 뽀려온 diego의 아키텍처는 다음 그림과 같다.

보기만해도 알고싶지 않아진다. 

Diego 요소
Diego Brain Auctionner
CC-Uploader
File-Server
SSH Proxy
TPS Watcher
TCP Route-emitter
Nsync
Stager
Diego Database Diego Bulletin Board System
MySQL
Locket
Diego Cell Rep
Executor
Garden
Metron Agent
Rout-emitter

대충 요소 파악이 끝났으니 Diego가 cf build를 어떻게 처리하는지 보자.

(https://docs.cloudfoundry.org/concepts/diego/diego-architecture.html#components)

cloud controller는 사용자에게 요청을 받아온다. Diego BBS(Diego Bulletin Board System)에게 넘겨주면 해당 요청을 DB에 저장한다.

그리고 auctioneer에게 경매를 생성해달라고 한다. diego의 경매시스템을 짧게 적어보자면 새로운 컨테이너를 생성할 때 어떤 VM에 위치해야할지 정해주는 방법이다. 당연히 가용 리소스가 많은 놈이 가져가게 되어있다.

경매가 생성되면 적합한 놈이 가져가서 diego cell로 요청을 넘긴다.

그럼 이제 cell 안에서 garden container를 만들고 droplets에서 적합한 빌드팩을 다운 받는다.그 다음 실행쓰한다.

앱이 정상적으로 실행되면 route-emitter가 GoRouter에게 앱 만들었다고 알려준다.

garden 컨테이너의 로그는 loggregator-agent가 외부로 보낸다. 

diego cell = host vm 이라고 이해하면 쉬운 것 같다. K8S로 치면 (약간 다르지만) 워커노드 정도..? 따라서 deigo cell의 용량이 부족하다는건 가용 리소스가 부족하단 소리와 같다. diego가 상태만 관리해주는 것이 아니라 컨테이너 배분, 위치, 리소스 관리까지 다 해주는 것으로 파악된다 ㅡㅡㅋ