Skip to content

Commit

Permalink
Updated the document as per review comments. Added config details.
Browse files Browse the repository at this point in the history
  • Loading branch information
anvithks committed Jan 9, 2019
1 parent 8339c88 commit 43c68bf
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ weight: 80
---

{{% capture overview %}}

{{< feature-state for_k8s_version="v1.13" state="alpha" >}}

Poseidon is the [Firmament scheduler](https://github.com/Huawei-PaaS/firmament) integration for 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. It models the scheduling problem as a constraint-based optimization over a flow network graph – by reducing scheduling to a min-cost max-flow optimization problem.
Poseidon is the [Firmament scheduler](https://github.com/Huawei-PaaS/firmament) integration for Kubernetes. Poseidon/Firmament scheduler augments the current Kubernetes scheduling capabilities. It incorporates new novel flow network graph based scheduling capabilities alongside the default Kubernetes Scheduler.

{{% /capture %}}

Expand All @@ -15,11 +17,11 @@ Poseidon is the [Firmament scheduler](https://github.com/Huawei-PaaS/firmament)

## Introduction

Poseidon is the [Firmament scheduler](https://github.com/Huawei-PaaS/firmament) integration for 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. It models the scheduling problem as a constraint-based optimization over a flow network graph – by reducing scheduling to a min-cost max-flow optimization problem.
Poseidon is the [Firmament scheduler](https://github.com/Huawei-PaaS/firmament) integration for Kubernetes. Poseidon/Firmament scheduler augments the current Kubernetes scheduling capabilities. It incorporates new novel flow network graph based scheduling capabilities alongside the default Kubernetes Scheduler.

Due to the inherent rescheduling capabilities, the new scheduler enables a globally optimal scheduling environment that constantly keeps refining the workloads placements dynamically.
It models the scheduling problem as a constraint-based optimization over a flow network graph. This is achieved by reducing scheduling to a min-cost max-flow optimization problem. Due to the inherent rescheduling capabilities, the Poseidon/Firmament scheduler constantly keeps refining the workloads placements dynamically.

Poseidon/Firmament scheduler runs alongside the default Kubernetes Scheduler as an alternate scheduler – multiple schedulers running simultaneously. As part of the Kubernetes multiple schedulers support, each new pod is typically scheduled by the default scheduler, but Kubernetes can be instructed to use another scheduler by specifying the name of another custom scheduler (“Poseidon” in our case) in the PodSpec at the time of pod creation. In this case, the default scheduler will ignore that Pod and allow Poseidon scheduler to schedule the Pod on a relevant node.
Poseidon/Firmament scheduler runs alongside the default Kubernetes Scheduler as an alternate scheduler – multiple schedulers running simultaneously.

## Key Advantages

Expand All @@ -34,7 +36,16 @@ Poseidon/Firmament scheduler runs alongside the default Kubernetes Scheduler as

## Poseidon-Firmament Scheduler - How it works

As part of the Kubernetes multiple schedulers support, each new pod is typically scheduled by the default scheduler, but Kubernetes can be instructed to use another scheduler by specifying the name of another custom scheduler (“Poseidon” in our case) in the PodSpec at the time of pod creation. In this case, the default scheduler will ignore that Pod and allow Poseidon scheduler to schedule the Pod on a relevant node.
As part of the Kubernetes multiple schedulers support, each new pod is typically scheduled by the default scheduler. Kubernetes can be instructed to use another scheduler by specifying the name of another custom scheduler (“poseidon” in our case) in the PodSpec (**schedulerName** field of the PodSpec) at the time of pod creation. In this case, the default scheduler will ignore that Pod and allow Poseidon scheduler to schedule the Pod on a relevant node.

```yaml
apiVersion: v1
kind: Pod

...
spec:
schedulerName: poseidon
```


{{< note >}}
Expand Down Expand Up @@ -75,7 +86,7 @@ Although, Poseidon/Firmament scheduler is capable of scheduling various types of
|High Availability|Y|N**|Planned.|
|Real-time metrics based scheduling|N|Y**|Initially supported using Heapster (now deprecated) for placing pods using actual cluster utilization statistics rather than reservations. Plans to switch over to "metric server".|
|Support for Max-Pod per node|Y|Y|Poseidon/Firmament scheduler seamlessly co-exists with K8S default scheduler.|
|Support for Ephemeral Storage, in addition to CPU/Memory|Y|Y|This feature was working earlier. However, for some reason since K8S release 1.10 onwards it does not seem to work as expected. We are looking at resolving the issue soon.|
|Support for Ephemeral Storage, in addition to CPU/Memory|Y|Y||


## Installation
Expand All @@ -87,25 +98,12 @@ In-cluster installation of Poseidon, please start [here](https://github.com/kube

For developers please refer [here](https://github.com/kubernetes-sigs/poseidon/blob/master/docs/devel/README.md).

## Latest Performance Testing Results

### Scheduling time of Pods with CPU/Mem requirements only (without bind time)

![Scheduling time of Pods with CPU/Mem requirements only (without bind time)](/images/docs/perf-test-result-1.png)
## Latest Throughput Performance Testing Results

### Scheduling time of Pods with CPU/Mem requirements only (including bind time)
![Scheduling time of Pods with CPU/Mem requirements only (including bind time)](/images/docs/perf-test-result-2.png)
As mentioned earlier, workloads (pods) are bulk scheduled for enabling scheduling decisions at massive scale. Based on the extensive performance test results, Poseidon/Firmament scales much better than Kubernetes default scheduler as the number of nodes increase in a cluster. This is due to the fact that Poseidon/Firmament is able to amortize more and more work across workloads.

### Total time for 10k Pods and Throughput Pods/sec using Scheduler Perf.
![Total time for 10k Pods and Throughput Pods/sec using Scheduler Perf.](/images/docs/perf-test-result-3.png)

### Scheduling time of Pods with Affinity requirements
![Scheduling time of Pods with Affinity requirements](/images/docs/perf-test-result-4.png)

### Scheduling time of Pods with Affinity requirements
![Scheduling time of Pods with Affinity requirements](/images/docs/perf-test-result-5.png)

### Scheduling time of Symmetry Pods
![Scheduling time of Symmetry Pods](/images/docs/perf-test-result-6.png)
{{< note >}}
Please refer to [this link](https://github.com/kubernetes-sigs/poseidon/blob/master/docs/benchmark/README.md) for detailed throughput performance comparison test results between Poseidon/Firmament scheduler and Kubernetes default scheduler.
{{< /note >}}

{{% /capture %}}
Binary file removed static/images/docs/perf-test-result-1.png
Binary file not shown.
Binary file removed static/images/docs/perf-test-result-2.png
Binary file not shown.
Binary file removed static/images/docs/perf-test-result-3.png
Binary file not shown.
Binary file removed static/images/docs/perf-test-result-4.png
Binary file not shown.
Binary file removed static/images/docs/perf-test-result-5.png
Binary file not shown.
Binary file removed static/images/docs/perf-test-result-6.png
Binary file not shown.

0 comments on commit 43c68bf

Please sign in to comment.