我正在使用Azure Kubernetes Service运行一个Go应用程序,该应用程序从RabbitMQ中提取、运行一些处理并返回。pod可以扩展以处理增加的作业。很普通的东西。
HPA设置如下:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
production Deployment/production 79%/80% 2 10 10 4d11h
staging Deployment/staging 2%/80% 1 2 1 4d11h
当HPA上下缩放时,总会有2个吊舱保持运行。我们发现,在运行了这么长时间后,这些吊舱上的Go应用程序会超时。有时是几天,有时是几周。是的,我们可能会深入研究代码并弄清楚这一点,但这对团队来说是一个低优先级的问题。
我想到的另一个解决方案是让HPA首先移除最古老的吊舱。这意味着最古老的吊舱永远不会超过几个小时。先进先出的模式。
然而,我看不出有什么明确的方法可以做到这一点。这完全有可能不是,但这似乎是可行的。
我是不是错过了什么?有没有办法做到这一点
在我看来(我在评论中也提到过(,最简单(不确定是否优雅(的方法是使用一些cronjob,它会定期清理超时的pod。
一个CronJob对象就像一个crontab(cron表(文件的一行。它以Cron格式编写的给定时间表定期运行作业。CronJobs可用于创建周期性和重复性任务,如运行备份或发送电子邮件。CronJobs还可以安排特定时间的单个任务,例如为当您的集群可能处于空闲状态时。
Cronjobs示例和操作方法:
- 如何使用Kubernetes的Job和CronJob
- Kubernetes:删除X天以上的pod
- https://github.com/dignajar/clean-pods<--真实的例子