我有几个 cronjobs,需要大量的 CPU 和 RAM,但它每天只运行一次,持续几分钟(从网站上抓取数据)。所以,我的问题是,我可以在执行此作业时自动缩小其他一些部署的规模,然后再扩大规模吗?
我现在只能想象一种方法:在我的 cronjob 代码中使用 k8s 客户端,在启动时和完成之前扩展其他部署,但这看起来很奇怪,而且可能不安全。
是否有任何“正确的 Kubernetes 方式”或任何最佳实践来做到这一点?如果可能的话,最好的选择是为所有部署定义一些最小数量的活动副本,并将其余的决定(不同部署的扩展多少副本)留给 k8s。
您还没有提供以下信息
基于此,您可以执行以下任一操作
使用 Pod 优先级抢占为 cronjobs 提供比某些低优先级部署更高的优先级。如果需要释放资源,K8s 将抢占优先级较低的 Pod。如果由于没有足够的可用资源(CPU、内存等)而无法调度高优先级的 Pod,Kubernetes 将尝试通过抢占较低优先级的 Pod 来释放资源。
您可以使用节点自动缩放根据总体资源需求添加或删除节点,并使用污点和容忍将新创建的节点专用于资源密集型 cronjobs。
在部署中使用 Horizontal Pod Autoscaler (HPA),根据 CPU 和内存使用情况自动扩展 Pod 数量