Architecture

Spinnaker Microservices

Spinnaker is composed of a number of independent microservices:

  1. Deck is the browser-based UI.

  2. Gate is the API gateway. The Spinnaker UI and all api callers communicate with Spinnaker via Gate.

  3. Orca is the orchestration engine. It handles all ad-hoc operations and pipelines.

  4. Clouddriver is responsible for all mutating calls to the cloud providers and for indexing/caching all deployed resources.

  5. Front50 is used to persist the metadata of applications, pipelines, projects and notifications.

  6. Rosco is the bakery. It is used to produce machine images (e.g. GCE images, AWS AMIs, Azure VM images). It presently wraps packer, but will shortly be expanded to support additional mechanisms for producing images.

  7. Igor is used to trigger pipelines via continuous integration jobs in systems like Jenkins and Travis, and to allow for Jenkins/Travis stages to be used in pipelines.

  8. Echo is Spinnaker’s eventing bus. It supports sending notifications (e.g. Slack, email, Hipchat, SMS), and act on incoming webhooks from services like Github.

  9. Fiat is Spinnaker’s authorization service. It is used to query a user’s access permissions for accounts, applications and service accounts.

  10. Halyard is Spinnaker’s configuration service. Halyard manages the lifecycle of each of the above services. It only interacts with the above services during Spinnaker startup, updates, and rollbacks.

System Dependency Graph

graph TB deck(Deck) --> gate; api(Custom Script/API Caller) --> gate(Gate); gate --> orca(Orca); gate --> clouddriver(Clouddriver); orca --> clouddriver; gate --> rosco(Rosco); orca --> front50; gate --> front50(Front50); gate --> fiat(Fiat); clouddriver --> fiat; orca --> fiat; front50 --> fiat; echo(Echo) --> orca; echo --> front50; igor(Igor) --> echo; classDef default fill:#d8e8ec,stroke:#39546a; linkStyle default stroke:#39546a,stroke-width:2px,fill:none; classDef external fill:#c0d89d,stroke:#39546a; class deck,api external

The diagram above represents which microservices depend on each other. The green boxes represent “external” components, including Deck, the single-page JavaScript application that runs in your browser.

A filled cell indicates that the system listed in the heading of that column has a dependency on the system listed in the heading of that row. As all Spinnaker services can be run in their own server group, it is typical for services to resolve their dependencies via load balancers or discovery systems (e.g. Eureka or Consul).

Port mappings

By default Spinnaker binds ports according to the following table

Service Port
Deck 9000
Gate 8084
Orca 8083
Clouddriver 7002
Front50 8080
Rosco 8087
Igor 8088
Echo 8089
Fiat 7003