3

我想将我们的 kubernetes 集群中的备用 CPU 容量用于低优先级的作业——特别是在这种情况下使用 Tensorflow 进行 ML 训练——而不会在我们集群上的高优先级服务突然飙升时从 CPU 中剥夺,类似于如何将具有操作系统进程优先级。目前,如果 CPU 使用率超过 60%,我们配置我们的自动缩放器以添加更多节点,这意味着我们有多达 40% 的 CPU 始终未使用。

问题:(1)K8s 可以做到这一点吗?经过一些实验后, Pod 的优先级似乎并不完全相同,因为我的低优先级部署不会立即将 CPU 归还给我的高优先级部署。(2) 如果不可能,是否有另一种普遍使用的策略来利用故意过度配置的 CPU 容量,但立即让步给更高优先级的服务?

4

1 回答 1

4

根据https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/resource-qos.md#qos-classes

在一个过度使用的系统(其中限制总和 > 机器容量)中,容器最终可能不得不被杀死,例如,如果系统耗尽了 CPU 或内存资源。理想情况下,我们应该杀死不太重要的容器。对于每个资源,我们将容器分为 3 个 QoS 类:保证、突发和尽力而为,按优先级降序排列。

你可以这样做:

设置高保证

containers:
  name: high
    resources:
      limits:
        cpu: 8000m
        memory: 8Gi

将 ml-job 设置为 Best-Effort。

containers:
  name: ml-job

我不确定您的 ml-job 是否可以杀死。如果不是,那么此策略可能不适合您。

于 2020-05-22T07:56:37.717 回答