Architecture

Spinnaker microservices

Spinnaker is composed of a number of independent microservices:

  • Deck is the browser-based UI.

  • Gate is the API gateway.

    The Spinnaker UI and all api callers communicate with Spinnaker via Gate.

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

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

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

  • Rosco is the bakery.

    It is used to produce machine images (for example GCE images, AWS AMIs, Azure VM images). It currently wraps packer, but will be expanded to support additional mechanisms for producing images.

  • Igor is used to trigger pipelines via continuous integration jobs in systems like Jenkins and Travis CI, and it allows Jenkins/Travis stages to be used in pipelines.

  • Echo is Spinnaker’s eventing bus.

    It supports sending notifications (e.g. Slack, email, Hipchat, SMS), and acts on incoming webhooks from services like Github.

  • Fiat is Spinnaker’s authorization service.

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

  • Kayenta provides automated canary analysis for Spinnaker.

  • Halyard is Spinnaker’s configuration service.

    Halyard manages the lifecycle of each of the above services. It only interacts with these services during Spinnaker startup, updates, and rollbacks.

System dependencies

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

graph TB deck(Deck) --> gate; api(Custom Script/API Caller) --> gate(Gate); gate --> kayenta(Kayenta); orca --> kayenta(Kayenta); gate --> orca(Orca); gate --> clouddriver(Clouddriver); orca --> clouddriver; gate --> rosco(Rosco); orca --> front50; orca --> rosco gate --> front50(Front50); gate --> fiat(Fiat); gate --> kayenta(Kayenta); orca --> kayenta; 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:1px,fill:none; classDef external fill:#c0d89d,stroke:#39546a; class deck,api external

In the table below, 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’ i’s typical for services to resolve their dependencies via load balancers or discovery systems (for example 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
Halyard 8064
Kayenta 8090