我们可以自动和动态地剥离一个 Kubernetes cronjob 吗?我们如何在基于队列或通知的 AWS EKS、Azure AKS 中做到这一点?
Posted
技术标签:
【中文标题】我们可以自动和动态地剥离一个 Kubernetes cronjob 吗?我们如何在基于队列或通知的 AWS EKS、Azure AKS 中做到这一点?【英文标题】:Can we spin off a kubernetes cronjob automatically and dynamically? How can we do it in AWS EKS, Azure AKS based on queues or notifications? 【发布时间】:2021-10-08 20:58:45 【问题描述】:对于我的基于微服务的应用程序,我正在设计一个组件,如下所示:
-
我们要执行的任务是周期性的。为此,我计划使用 Kubernetes cron-jobs。它每 1 小时执行一次作业。这工作得很好。
在少数情况下,我想按需执行此任务(而不是等待下一小时窗口)。例如,如果下一个工作时间是下午 2:00,我想早点执行它,比如下午 1:20。
有一个相关问题-How can I trigger a Kubernetes Scheduled Job manually?
但我不是在寻找手动方式来实现它或明确调用kubectl
命令。有没有办法根据事件/队列自动完成?
我们的应用程序部署在 AWS EKS 和 Azure AKS 上。我可以集成 k8 集群以读取某些队列/发布订阅(例如 aws-sqs、aws-sns)并动态执行吗?
非常感谢您的帮助!
【问题讨论】:
【参考方案1】:如果您的应用程序在 Kubernetes 上运行并且不想迁移到无服务器功能并将所有内容保留在 Kubernetes 集群中,您可以使用 Knative。
使用 Knative 缩放到零
Knative 是一个构建在 Kubernetes 之上的无服务器平台。它为常见的应用程序用例提供了更高级别的抽象。
一个关键特性是它能够借助内置的缩放到零支持将通用(微)基于服务的应用程序作为无服务器运行。 Knative 推出了自己的自动缩放器 Knative Pod Autoscaler (KPA),它支持任何使用非基于 CPU 的缩放矩阵的服务缩放到零。
更新您的微服务以使用 Knative 进行微小更改,您可以在 Kubernetes 上运行它。
【讨论】:
【参考方案2】:Kubernetes 作业用于计划任务,不适用于动态或按需调用。
对于按需任务,请查看以下无服务器解决方案 - AWS Lambda 或 Azure Functions 或 Google Cloud Functions 或 Knative(本地)
【讨论】:
以上是关于我们可以自动和动态地剥离一个 Kubernetes cronjob 吗?我们如何在基于队列或通知的 AWS EKS、Azure AKS 中做到这一点?的主要内容,如果未能解决你的问题,请参考以下文章