我们可以自动和动态地剥离一个 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 中做到这一点?的主要内容,如果未能解决你的问题,请参考以下文章

k8s集群安装

#yyds干货盘点# Kubernetes 怎样控制业务的资源水位?(16)

第二节Igress部署安装(nginx)

如何彻底剥离可执行文件

K8S数据迁移方法

桌子分拣机-斑马剥离