kube-controller-manager | Kubernetes

一、参数优化

  • 调大 --kube-api-qps 值:与 apiServer 的每秒请求数量限制可以调整至 100, 默认值为20;
  • 调大 --kube-api-burst 值:可以调整至 100,默认值为 30;
  • 禁用不需要的 controller:默认启动为 --controllers,即启动所有 controller, 可以禁用不需要的controller;

# - --controllers=*,deployment.*

二、kube-controller-manager升级过程informer预加载

尽量的减小 controller-manager 单次升级对系统的中断时间,主要有以下两处改造:

  • 预启动 controller informer ,提前加载 controller 需要的数据;
  • 主 controller 升级时,会主动释放 Leader Lease ,触发备立即接管工作;

三、kube-scheduler优化

kube-scheduler | Kubernetes

首先还是使用好调度器的基本功能:

  • Pod/Node Affinity & Anti-affinity //亲和
  • Taint & Toleration //污点 & 容忍
  • Eviction & Preemption //驱逐 & 抢占

优先级抢占调度策略的核心行为分别是

驱逐 (Eviction):kubelet进程的行为。

抢占 (Preemption):Scheduler执行的行为。

驱逐:

即当一个Node发生资源不足(under resource pressure)的情况时,该节点上的 kubelet进程会执行驱逐动作,此时 Kubelet会综合考虑Pod的优先级、资源申请量与实 际使用量等信息来计 算哪些Pod需要被驱逐;当同样优先级的Pod需要被驱逐时,实际 使用的 资源量超过申请量最大倍数的高耗能Pod会被首先驱逐。对于QoS等级 为“Best Effort”的Pod来说,由于没有定义资源申请(CPU/Memory Request),所以它们实际 使用的资源可能非常大;

抢占:

当一个新的Pod因为资源无法满足而不能被调度 时,Scheduler可能(有权决定)选择 驱逐部分低优先级的Pod实例来满 足此Pod的调度目标,这就是Preemption机制;

Pod Disruption Budget(简称PDB):

通过PodDisruptionBudget控制器可以设置应用POD集群处于运行状态最低个数,也可 以设置应用POD集群处于运行状态的最低百分比,这样可以保证在主动销毁应用POD的 时候,不会一次性销毁太多的应用POD,从而保证业务不中断或业务SLA不降级。

1、 MinAvailable参数:表示最小可用POD数,表示应用POD集群处于运行状态的最小 POD数量,或者是运行状态的POD数同总POD数的最小百分比。

2、 MaxUnavailable参数:表示最大不可用PO数,表示应用POD集群处于不可用状态 的最大POD数,或者是不可用状态的POD数同总POD数的最大百分比。

四、参数优化

调大 --kube-api-qps 值:可以调整至 100,默认值为 50

五、调度器优化

  • 扩展调度器功能:目前可以通过 scheduler_extender 很方便的扩展调度器,比如对 于 GPU 的调度,可以通过 scheduler_extender + device-plugins 来支持。
  • 多调度器支持:kubernetes 也支持在集群中运行多个调度器调度不同作业,例如可 以在 pod 的 spec.schedulerName 指定对应的调度器,也可以在 job 的 .spec.template.spec.schedulerName 指定调度器。
  • 动态调度支持:由于 kubernetes 的默认调度器只在 pod 创建过程中进行一次性调 度,后续不会重新去平衡 pod 在集群中的分布,导致实际的资源使用率不均衡,此 时集群中会存在部分热点宿主,为了解决默认调度器的功能缺陷,kubernetes 孵化 了一个工具 Descheduler 来对默认调度器的功能进行一些补充,详细说明可以参考官方文档。