正文
Deserved(Resource):arbitrator分配给namespace的资源总数。
Overused:如果使用的资源超过deserved的资源,命名空间将被认为是overused的。
随着Kubernetes的发展,目前可以通过以下几个功能实现资源Qos控制和共享。
抢占和重调度
一个pod可以被驱逐,因为一些其他pod需要它使用的资源(抢占)。有一个基于优先级的抢占方案(每个Pod都有一个优先级,而具有更高和可能相同优先级的pod可以抢占它;谁做出决定及哪个Pod要抢占还待定,但可以是默认的调度程序,也可以是重调度器,也可能是集成了调度功能的基于应用的控制器,当然也可以是他们配合工作)。抢占总是使用优雅的终止方式。优先权方案通常意味着配额在每个优先级别的基础上分配,以便应用程序可以在最高优先级级别给予有限数量的配额,并且可以给予更大量的配额(甚至是无限的,即集群的整体能力),但是优先级较低。与此同时,重调度器通过驱逐Pod来执行集群级别的策略(目前有一个原始的重调度器来执行这样一个策略:关键的pod,如Heapster,DNS等不会由于集群中的可用资源不足而被阻止运行;但还有很多其他策略可以执行)。它通过驱逐一个或多个pod来允许一些待处理的Pod(s)进行调度。抢占需要在命名空间之间调度资源;arbitrator会是优先级规则的定义者,比如没有满足deserved的namespace的优先级高于overused的namespace。arbitrator将使用驱逐(Eviction)功能进行抢占。重调度器确保关键Pod不会由于资源不足而停止运行,也会重新调度其他Pods使其获得更好的安置(译者注:拥有合理的运行所需资源)。有了arbitrator之后,kube-system命名空间将能够获得无限的资源:即申请多少就能够得到多少,其他命名空间共享剩余的资源;对于“更好的安置(译者注:重新调度以获得更合理的资源)”没有其他影响。
工作负载专用控制器和ThirdPartyResource
ThirdPartyResource对象是使用新的API对象类型扩展Kubernetes API的一种方法。新的API类型将被赋予一个API endpoint并支持相应的增、删、改、查操作。您可以使用此API endpoint创建自定义对象。通过mesos-style.md和ThirdPartyResource,开发人员可以使用自定义对象构建workload customized controller(译者注:工作负载自定义控制器)。
k82cn/kube-arbitrator(https://github.com/k82cn/kube-arbitrator)有一个例子,它通过ThirdPartyResource功能提供资源共享和抢占功能。
水平/垂直缩放和节点级QoS
节点级资源使用率的改进,对集群级资源共享并无贡献。但是关于节点级QoS,还应该考虑Pod的请求和限制。
概要
为了满足上述要求,需要一个新的组件(k8s-arbitrator)和两个ThirdPartyResource(Consumer和Allocation)。
Consummer是arbitrator的ThirdPartyResource,以下yaml文件演示了Consumer的定义:
apiVersion: kuabe-arbitrator.incubator.k8s.io/v1