1. Overview

Cloud Foundry는 Diego를 사용하여 앱 컨테이너를 관리한다. Diego는 Cloud Controller의 앱 예약 및 관리 책임을 담당한다.

Diego는 네트워크 장애 및 충돌을 피하기 위해 Diego Cell에서 실행중인 인스턴스 수를 유지하려고 시도하는 자체 복구 컨테이너 관리 시스템이다. Diego는 Task 및 LRP를 예약하고 실행한다. Task및 LRP에 대한 자세한 내용은 Diego Auction이 Task를 할당하는 방법을 참조한다.

BBS API를 사용하여 원하는 수의 Task 및 LRP를 제출, 업데이트 및 검색 할 수 있다.

한편 과거에는 Ruby 기반의 DEA가 있었다. 차이점을 살펴보자.

  • Diego는 DEA에서 발전된 아키텍처로 Go 언어로 작성되어 있다.
  • 과거에는 DEA Node였지만 지금은 Diego Cell이다.
  • Warden 컨테이너는 Linux에서만 실행할 수 있었지만 지금의 Garden 컨테이너는 확장성이 더 높다.
  • SSH 패키지가 추가되어 컨테이너에 바로 접속해볼 수 있다.

2. Diego가 App을 실행시키는 방법

이제부터 Diego가 App 실행 요청을 처리하는 방법을 설명한다. 이것은 Diego의 처리 프로세스 중 하나 일뿐입니다. 예를 들어 App을 실행하면 App이 이미 준비된 것으로 가정한다.

2.1. Receives the Request to Run an App

Cloud Controller는 App 실행 요청을 BBS에 전달한다. BBS는 요청 정보를 자신의 데이터베이스(bbs db)에 저장한다.

2.2. Passes Request to the Auctioneer Process

BBS는 Scheduler(Auctioneer)를 호출하여 App을 위한 Desired 리소스 기반으로 Auction을 생성한다. 이 때 데이터베이스(bbs db)에 저장된 정보를 참조합니다.

Scheduler는 App 컨테이너를 어떠한 Cell에 배포할지 결정하는 역할을 한다.

2.3. Performs Auction

경매를 통해 Scheduler(Auctioneer)는 앱을 실행할 Diego Cell을 탐색한다. Diego Cell의 Rep 작업은 Auction 요청을 받아들인다.

2.4. Creates Container and Runs App

In-process Executor는 Diego Cell에 Garden 컨테이너를 생성한다. Garden은 Staging 프로세스의 Droplet을 다운로드하고 컨테이너에서 App을 실행한다.

2.5. Emits Route for App

route-emitter 프로세스는 Diego Cell에서 실행중인 새 App에 대한 라우팅 등록 메시지를 Gorouter로 내보낸다.

2.6. Sends Logs to Loggregator

Loggregator 에이전트는 App 로그, 오류 및 메트릭을 Cloud Foundry Loggregator로 포워드한다.


3. 각 컴포넌트 소개

3.1. Rep

  • Task와 LRP를 위한 Diego Auction 내 Cell을 나타낸다. 
  • Cell과 BBS 사이의 모든 통신을 중재
  • Task들과 Cell에 있는 컨테이너의 BBS 내 LRP 간 동기화 보장
  • BBS의 Task와 Actual LRP 정보가 Cell 내의 실제 컨테이너와 일치하는지 확인하고 BBS 내 Cell이 실재하도록 유지, 관리
  • Container 및  RunAction 레시피 생성을 위한 in-process Executor의 요청에 의해 Task 및 LRP 실행

Rep은 Cell을 대표하여 여러 역할을 한다.  특정 Cell이 실패하면 Converger가 자동으로 해당 인스턴스를 다른 Cell로 옮긴다. 또 Task/LRP 수신을 위해 Action에 참여하고 Executor에 요청, Tasks/LRPs를 실행하여 컨테이너를 생성하고 컨테이너 내에서 수행될 액션을 실행한다.

3.2. Executor

  • Rep 안에 있는 논리적인 프로세스로 실행한다.
  • STDOUT, STDERR을 Cell 상에 실행 중인 Metron 프로세스로 스트리밍한다.

3.3. Garden

Garden 컨테이너가 관리하기 위한 플랫폼 독립적 서버와 클라이언트를 제공한다.

3.4. Metron Agent

App 로그와 App/Diego 메트릭을 Loggregator의 Dopler 컴포넌트로 포워드한다.

3.5. Route-emitter

  • Rep으로부터 Desired LRP Auctual LRP 상태를 모니터링하고, 변경 사항이 감지될 떄 Gorouter로 등록 및 등록 해제 메시지를 내보낸다.
  • 주기적으로 Gorouter로 전체 라우팅 테이블을 내보낸다.