• This repository has been archived on 12/Apr/2022
  • Stars
    star
    409
  • Rank 105,709 (Top 3 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created about 9 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[EOL] A Firmament-based Kubernetes scheduler

Build Status

Introduction

The Poseidon/Firmament scheduler incubation project is to bring integration of Firmament Scheduler OSDI paper in Kubernetes. At a very high level, Poseidon/Firmament scheduler augments the current Kubernetes scheduling capabilities by incorporating a new novel flow network graph based scheduling capabilities alongside the default Kubernetes Scheduler. Firmament models workloads on a cluster as flow networks and runs min-cost flow optimizations over these networks to make scheduling decisions.

Due to the inherent rescheduling capabilities, the new scheduler enables a globally optimal scheduling for a given policy that keeps on refining the dynamic placements of the workload.

As we all know that as part of the Kubernetes multiple schedulers support, each new pod is typically scheduled by the default scheduler. But Kubernetes can also be instructed to use another scheduler by specifying the name of another custom scheduler at the time of pod deployment (in our case, by specifying the 'schedulerName' as Poseidon in the pod template). In this case, the default scheduler will ignore that Pod and instead allow Poseidon scheduler to schedule the Pod on a relevant node.

Key Advantages

  • Flow graph scheduling provides the following

    • Support for high-volume workloads placement.
    • Complex rule constraints.
    • Globally optimal scheduling for a given policy.
    • Extremely high scalability.

    NOTE: Additionally, it is also very important to highlight that Firmament scales much better than default scheduler as the number of nodes increase in a cluster.

Current Project Stage

Alpha Release

Design

Poseidon/Firmament Integration architecture

For more details about the design of this project see the design document.

Installation

In-cluster installation of Poseidon, please start here.

Development

For developers please refer here

Release Process

To view details related to coordinated release process between Firmament & Poseidon repos, refer here.

Latest Benchmarking Results

Please refer to link for detail throughput performance comparison test results between Poseidon/Firmament scheduler and Kubernetes default scheduler.

Roadmap

  • Release 0.9 onwards:
    • Provide High Availability/Failover for in-memory Firmament/Poseidon processes.
    • Scheduling support for “Dynamic Persistence Volume Provisioning”.
    • Optimizations for reducing the no. of arcs by limiting the number of eligible nodes in a cluster.
    • CPU/Mem combination optimizations.
    • Transitioning to Metrics server API – Our current work for upstreaming new Heapster sink is not a possibility as Heapster is getting deprecated.
    • Continuous running scheduling loop versus scheduling intervals mechanism.
    • Priority Pre-emption support.
    • Priority based scheduling.
  • Release 0.8 – Target Date 15th February, 2019:
    • Pod Affinity/Anti-Affinity optimization in 'Firmament' code.
  • Release 0.7 – Target Date 19th November, 2018:
    • Support for Max. Pods per Node.
    • Co-Existence with Default Scheduler.
    • Node Prefer/Avoid pods priority function.
  • Release 0.6 – Target Date 12th November, 2018:
    • Gang Scheduling.
  • Release 0.5 – Released on 25th October 2018:
    • Support for Ephemeral Storage, in addition to CPU/Memory.
    • Implementation for Success/Failure of scheduling events.
    • Scheduling support for “Pre-bound Persistence Volume Provisioning”.
  • Release 0.4 – Released on 18th August, 2018:
    • Taints & Tolerations.
    • Support for Pod anti-affinity symmetry.
    • Throughput Performance Optimizations.
  • Release 0.3 – Released on 21st June, 2018:
    • Pod level Affinity and Anti-Affinity implementation using multi-round scheduling based affinity and anti-affinity.
  • Release 0.2 – Released on 27th May, 2018:
    • Node level Affinity and Anti-Affinity implementation.
  • Release 0.1 – Released on 3rd May, 2018:
    • Baseline Poseidon/Firmament Scheduling capabilities using new multi-dimensional CPU/Memory cost model is part of this release. Currently, this does not include node and pod level affinity/anti-affinity capabilities. As shown below, we are building all this out as part of the upcoming releases.
    • Entire test.infra BOT automation jobs are in place as part of this release.

More Repositories

1

external-storage

[EOL] External storage plugins, provisioners, and helper libraries
Go
2,696
star
2

heapster

[EOL] Compute Resource Usage Analysis and Monitoring of Container Clusters
Go
2,626
star
3

kubefed

Kubernetes Cluster Federation
Go
2,484
star
4

contrib

[EOL] This is a place for various components in the Kubernetes ecosystem that aren't part of the Kubernetes core.
Go
2,467
star
5

bootkube

This project now lives at https://github.com/kinvolk/bootkube
Go
1,154
star
6

kube-aws

[EOL] A command-line tool to declaratively manage Kubernetes clusters on AWS
Go
1,130
star
7

kubeadm-dind-cluster

[EOL] A Kubernetes multi-node test cluster based on kubeadm
Shell
1,109
star
8

kube-batch

A batch scheduler of kubernetes for high performance workload, e.g. AI/ML, BigData, HPC
Go
1,065
star
9

service-catalog

Consume services in Kubernetes using the Open Service Broker API
Go
1,049
star
10

multi-tenancy

A working place for multi-tenancy related proposals and prototypes.
Go
950
star
11

frakti

The hypervisor-based container runtime for Kubernetes.
Go
670
star
12

kube-deploy

[EOL] A place for cluster deployment automation
Go
535
star
13

kubernetes-anywhere

[EOL] {concise,reliable,cross-platform} turnup of Kubernetes clusters
Shell
534
star
14

kubernetes-bootcamp

[EOL] please see https://kubernetes.io/docs/tutorials/kubernetes-basics/ instead
JavaScript
268
star
15

cluster-registry

[EOL] Cluster Registry API
Go
237
star
16

kubernetes-docs-zh

[EOL] Chinese-language Kubernetes documentation
HTML
219
star
17

kubedash

[EOL] Analytics dashboard for Kubernetes
JavaScript
217
star
18

federation

[EOL] Cluster Federation
Go
209
star
19

kube-ui

[EOL] Deprecated Web UI for Kubernetes; please try dashboard instead
Go
150
star
20

drivers

[EOL] Example CSI Drivers
Go
139
star
21

rktlet

[EOL] The rkt implementation of the Kubernetes Container Runtime Interface
Go
138
star
22

kube-mesos-framework

[EOL] Kubernetes as a Mesos framework
HTML
108
star
23

minibroker

A minibroker for your minikube!
Go
89
star
24

csi-driver-image-populator

[EOL] CSI driver that uses a container image as a volume
Go
88
star
25

spartakus

[EOL] Anonymous Usage Collector
Go
75
star
26

nfs-provisioner

Go
71
star
27

cluster-api-bootstrap-provider-kubeadm

LEGACY REPO. NEW CODE IS https://github.com/kubernetes-sigs/cluster-api/tree/master/bootstrap/kubeadm
Go
62
star
28

go-open-service-broker-client

A golang client for service brokers implementing the Open Service Broker API
Go
60
star
29

cluster-api-provider-docker

A Cluster API Provider implementation using docker containers as the infra provider. Cluster API locally for a change!
Go
51
star
30

application-images

[EOL] Image build contents for Kubernetes applications.
Shell
48
star
31

kubernetes-docs-ko

[EOL] Korean-language Kubernetes documentation
HTML
34
star
32

testing_frameworks

[EOL] test frameworks for testing kubernetes
Go
34
star
33

csi-api

[EOL] CSIDriver CRD object
Go
23
star
34

mutating-trace-admission-controller

[EOL] a mutating admission controller which enables experimental tracing of kubernetes object lifecycle
Go
22
star
35

funding

Funding requests for project infrastructure, events, and consulting.
16
star
36

kubernetes-docs-ja

[EOL] Japanese-language Kubernetes documentation
HTML
16
star
37

k8s-gsm-tools

Controllers to sync and rotate kubernetes secrets with google secret manager
Go
14
star
38

contributor-tweets

Repo for automating tweets to the K8sContributor twitter account owned by the k8s Contributor Comms Team within SIG-contribex (https://github.com/kubernetes/community/tree/master/communication/contributor-comms)).
JavaScript
14
star
39

typescript

[EOL] see https://github.com/kubernetes-client/javascript instead
TypeScript
11
star
40

csi-driver-flex

[EOL] CSI Flexadapter driver and its build and dependent configuration files.
Shell
9
star
41

sig-usability

[EOL] SIG-Usability related docs and code
8
star
42

staging-noderesourcetopology-api

NodeResourceTopology API enables Topology aware scheduling in Kubernetes.
Shell
8
star
43

cosi-driver-minio

[EOL] Sample Driver that provides reference implementation for Container Object Storage Interface (COSI) API
Go
7
star
44

architecture-tracking

[EOL] Program management board for Kubernetes SIG-Architecture governed processes
7
star
45

csi-lib-fc

[EOL] A go package that can be imported to help CSI plugins with connecting to fibre channel devices
Go
6
star
46

csi-driver-fibre-channel

[EOL] Fibre Channel CSI Driver
Makefile
3
star
47

md-check

Go
2
star
48

kubernetes-csi-migration-library

[EOL] created due to https://github.com/kubernetes/org/issues/153
Go
1
star