Skip to content

bsalamat/kube-arbitrator

 
 

Repository files navigation

kube-arbitrator

build Go Report Card

kube-arbitrator provides policy based resource sharing for a Kubernetes cluster. The following section describes the target scenario of this project:

As a cluster admin, I’d like to build an environment to run different workloads together, e.g. long running service, bigdata. As those applications are managed by different departments, I have to provide a resource guarantee to each applications, demonstrated as following:

  1. Long running service (app area) and bigdata (bigdata area) can share resources:
    • Define resource usage of each area, e.g. 40% resources to app area, 60% to bigdata area.
    • Borrow/lending protocol: if the resources are idle in one area, they can be lent out and reclaimed through preemption
  2. Run multiple clusters in bigdata area:
    • Define resource usage of each cluster within bigdata area, e.g. Spark, Hadoop
    • Share resources between those big data clusters, e.g. borrow/lending protocol

The detail of requirements for the "bigdata" are

  • Run a set of applications
  • Provide each application guaranteed access to some quantity of resources
  • Provide all applications best-effort access to all unused resources according to some target weight (one weight assigned to each application, i.e. if all applications wanted to use all free resources, then they would be allowed to do so in some relative proportion)
  • If some application A is using less than its guarantee, and then if it decides to use its guarantee and there aren't enough free resources to do so, it should be able to evict tasks from some other application or applications (that is/are using more than their guarantee) in order to obtain its guarantee

Further, group "bigdata" apps and "service" apps into two buckets, providing each bucket (in aggregate) guaranteed access to some fraction of the cluster, and best-effort access to the entire cluster with the understanding that usage above the guarantee can be revoked at any time.

Architecture

architect

Community, discussion, contribution, and support

Learn how to engage with the Kubernetes community on the community page.

You can reach the maintainers of this project at:

Kubernetes Incubator

This is a Kubernetes Incubator project. The project was established 2017-07-01. The incubator team for the project is:

  • Sponsor: Joe Beda (@jbeda)
  • Champion: Timothy St. Clair (@timothysc)
  • SIG: sig-scheduling, sig-bigdata

Roadmap

  1. Enhance basic user case for quota (in upstream)
  2. Support percentage by ResourceQuotaAllocator (vs. hard code)
  3. Support dynamic ResourceQuotaAllocator:
    1. Resource allocation by policy (DRF by default)
    2. Support fair sharing on GPU
    3. Make policy pluggable
  4. Support QueueJob based on ResourceQuotaAllocator
  5. Integrate with Spark on Kubernetes, and other frameworks, e.g. Tensorflow
  6. Support Hierarchical namespaces (or other “tenants”)
  7. Support object quota as child Namespace Quota
  8. Support resource estimation for ResourceQuota & ObjectQuota
  9. Integrate with priority/preemption feature to revoke resource according to policy
  10. Handle unbound Queue (persist in etcd, and external sort)

Code of conduct

Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.

About

Policy based resource sharing for Kubernetes cluster

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 92.9%
  • Shell 7.1%