Awesome Open Source
Awesome Open Source

Eirini

 

Build Status Maintainability Test Coverage Go Report Card Slack Status

What is Eirini?

Eirini is a Kubernetes backend for Cloud Foundry. It deploys CF applications to a Kubernetes backend, using OCI images and Kubernetes StatefulSets.

Since scheduling is increasingly commoditized, Eirini provides an Orchestrator Provider Interface (OPI) layer, that abstracts away orchestration from Cloud Foundry's control plane. This means Eirini is not solely a Kube backend at all, but that it is a generic backend for any scheduler! This means it could schedule to Diego, Kubernetes, Swarm and other orchestration providers, as long as there is an implementation of the OPI layer for the target platform.

To offer a generic orchestrator interface, Eirini uses the Diego abstractions of Long Running Processes (LRPs) and Tasks to capture Cloud Foundry's notion of long running processes and one-off tasks.

Deployment instructions are available at: cloudfoundry-incubator/eirini-release.

Orchestrator Provider Interface (OPI)

The really great thing about Diego is the high level abstractions above the level of containers and pods. Specifically, these are Long Running Processes (LRPs) and Tasks. Actually, LRPs and Tasks are most of what you need to build a PaaS, and they're cross-cutting concepts that map nicely to all current orchestrators (for example to LRPs/Tasks directly in Diego, to Deployments/Jobs in Kube, and to Services/Containers in Swarm).

Currently Eirini strictly provides a Kubernetes implementation of the OPI. However, this can be easily extended to support other orchestration platforms.

Components

Eirini Overview Diagram


Eirini is composed of:

  • opi: The main component, provides the REST API (implementing OPI) used by the Cloud Controller. It's responsible for starting LRPs and tasks.

  • event-reporter: A Kubernetes reconciler that watches for LRP instance crashes and reports them to the Cloud Controller.

  • instance-index-env-injector: A Kubernetes webhook that inserts the CF_INSTANCE_INDEX environment variable into every LRP instance (pod).

  • metrics-collector: A component that collects metric usage for all LRPs and reports it to the Loggregator component.

  • route-collector: A component that continuously collects routes and registers them in Gorouter using NATS. Usually deployed in combination with route-pod-informer and route-statefulset-informer.

  • route-pod-informer: A Kubernetes informer that reacts to LRP scale (up & down) operations and registers/unregisters routes in Gorouter. Usually deployed in combination with route-collector and route-statefulset-informer.

  • route-statefulset-informer: A Kubernetes informer that reacts to cf map-route and cf unmap-route operations and registers/unregisters routes in Gorouter. Usually deployed in combination with route-collector and route-pod-informer.

  • task-reporter: A Kubernetes reconciler that reports the outcome of tasks to the Cloud Controller and deletes the underlying Kubernetes Jobs after a configurable TTL has elapsed.

  • eirini-controller: A Kubernetes reconciler that acts on create/delete/update operations on Eirini's own Custom Resouce Definitions (CRDs). This is still experimental.

CI Pipelines

We use Concourse. Our pipelines can be found here.

Contributing

Please read CONTRIBUTING.md for details.

Have a question or feedback? Reach out to us!

We can be found in our Slack channel #eirini-dev in the Cloud Foundry workspace. Please hit us up with any questions you may have or to share your experience with Eirini!


Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
go (14,148
kubernetes (1,609
cloud-foundry (26

Find Open Source By Browsing 7,000 Topics Across 59 Categories