컴포넌트 개요

Zuul은 여러 컴포넌트로 구성된 분산 시스템이며, 각각에 대한 설명은 아래와 같습니다.

graph  {
   node [shape=box]
   Database [fontcolor=grey]
   Executor [href="#executor"]
   Finger [href="#finger-gateway"]
   Gerrit [fontcolor=grey]
   Merger [href="#merger"]
   Statsd [shape=ellipse fontcolor=grey]
   Scheduler [href="#scheduler"]
   Launcher [href="#launcher"]
   Zookeeper [shape=ellipse]
   Nodepool
   GitHub [fontcolor=grey]
   Web [href="#web-server"]

   Executor -- Statsd
   Executor -- "Job Node"
   Web -- Database
   Web -- GitHub
   Web -- Zookeeper
   Web -- Executor
   Finger -- Executor

   Scheduler -- Database;
   Scheduler -- Gerrit;
   Scheduler -- Zookeeper;
   Zookeeper -- Executor;
   Zookeeper -- Finger;
   Zookeeper -- Merger
   Zookeeper -- Nodepool;
   Zookeeper -- Launcher;
   Scheduler -- GitHub;
   Scheduler -- Statsd;
}

각 Zuul 프로세스는 동일한 호스트 또는 서로 다른 호스트에서 실행될 수 있습니다.

이전 버전의 Zuul은 빌드 노드를 제공하기 위해 Nodepool을 사용했습니다. 신규 설치 시에는 Nodepool 대신 Zuul의 내부 리소스 관리 기능을 사용해야 합니다.

Zuul은 최소 버전 3.5.1 이상이 실행되는 외부 ZooKeeper 클러스터가 필요하며, 모든 Zuul 및 Nodepool 컴포넌트는 해당 클러스터 내 호스트의 TLS로 암호화된 TCP 포트(통상 2281)를 통해 연결할 수 있어야 합니다.

Nodepool(또는 Zuul) 런처와 Zuul 익스큐터 모두 Nodepool(또는 Zuul)이 제공하는 호스트와 통신할 수 있어야 합니다. 이들이 사설 네트워크에 있는 경우, 익스큐터는 해당 호스트로 트래픽을 라우팅할 수 있어야 합니다.

오직 Zuul 핑거 게이트웨이와 Zuul 웹만 외부에서 접근 가능하면 되며, 익스큐터는 그럴 필요가 없습니다. 익스큐터는 fingergw와 웹에서 TCP 포트 7900을 통헤 접근 가능해야 합니다.

데이타베이스가 필요하며, /etc/zuul/zuul.confdatabase 섹션에서 설정합니다. Zuul 스케줄러와 Zuul 웹 모두 이 데이터베이스에 접근해야 합니다.

Statsd가 활성화된 경우, 익스큐터와 스케줄러는 stated로 데이터를 보낼 수 있어야 합니다. statsd는 각 호스트에서 실행되어 데이터를 전달하도록 설정하거나, 서비스가 중앙 집중식 statsd 수집기로 데이터를 보내도록 할 수 있습니다. statsd는 기본적으로 UDP 포트 8125에서 대기합니다.

최소 규모의 Zuul 시스템은 동일한 호스트에서 실행되는 스케줄러 (Scheduler)실행기 (Executor) 로 구성될 수 있습니다. 규모가 큰 설치 환경에서는 각 컴포넌트를 전용 호스트에서 실행하며 여러 개의 스케줄러, 익스큐터 및 머저를 운영하는 것을 고려해야 한다.