k8s集群在离线混合部署

什么叫做在离线混合部署?

首先要明确什么叫做在线任务和离线任务:在线任务需要资源相对较少,但要求响应时间短,例如web服务;离线任务则不需要对任务进行迅速响应,但是计算量相对较大、占用资源多,例如机器学习。因此我们把在线和离线项目部署在同一个集群上就叫做在离线混合部署。

为什么要做在离线混合部署?

举一个例子,淘宝双十一的服务量是非常高的,那么为了保证双十一当天服务器不会崩溃,需要一台计算能力足够大的服务器来支持运行,但是双十一过后,如此大的一个机器便失去了他的作用,那么就会造成资源的浪费,那么我们就要采取在离线混合部署来使我们的服务始终保持一个高的资源利用率。当在线资源需求量大的时候,我们让离线资源为在线资源让路,同样的让在线资源需求量小的时候我们来让离线资源使用更高的资源。

理论支持

如何做到让离线资源为在线资源让路,我们之前写过关于Qos:服务质量等级,在这里我们介绍过优先级的概念,我们举个例子,比方说计算机中的内存和磁盘资源是不可以被压缩的,而当资源紧俏时,kubelet会根据资源对象的QoS进行驱逐:

  • Guaranteed,最高优先级,最后kill。除非超过limit或者没有其他低优先级的Pod。
  • Burstable,第二个被kill。
  • BestEffort,最低优先级,第一个被kill。

这也就意味着如果一个Node中的内存和磁盘资源被多个Pod给抢占了,那么QoS为BestEffort的Pod显然是第一个被kill的。因此我们在实际部署的时候,可以把在线服务所使用的Pod的QoS设置为Guaranteed,这样就避免了负载过大的离线任务占用过多资源把我们的在线Pod给挤掉的情况。

k8s部署在线任务

之前部署过,在这里需要对Qos进行限制,svc和之前文件一致。
在这里插入图片描述
svc文件
在这里插入图片描述
我们可以看到,在这里该pod的QoS的确是Guaranteed,有最高的优先级,最后被杀死。
在这里插入图片描述

tf-operator部署离线任务

这里我们直接在根据阿里云的教程部署立即可:阿里云上小试TBJob
在这里插入图片描述

我们在这里可以明显看出来,没有对资源进行限制,因此他的Qos属于BestEffort,因此他就可以产生给在线服务让路的目的。

prometheus+grafana监控

首先我们要下载prometheus和grafana来为我们的集群做监控。

下载完成后,我们查看svc
在这里插入图片描述
我们直接进入grafana所对应的nodeport端口来查看prometheus监控情况
在这里插入图片描述
在这里插入图片描述
这里导入我们的prometheus的监控数据,可以通过json文件,也可以直接输入315
在这里插入图片描述
导入即可
在这里插入图片描述

查看prometheus监控
在这里插入图片描述