什么是控制器?
kontroler 是一个开源 kubernetes 调度引擎,旨在简化有向无环图 (dag) 的管理。借助 kontroler,您可以在 yaml 中定义工作流程,将任务作为容器化作业运行,甚至可以通过可选的基于 web 的 ui 将其可视化。无论您需要按计划执行工作流程还是响应实时事件,kontroler 都能提供灵活的 kubernetes 原生解决方案。
也就是说,我必须警告 kontroler 目前处于 alpha 状态。它非常适合实验和原型设计,但可能尚未准备好用于生产使用。作为一个副项目,kontroler 不提供支持,因此在生产中使用它需要您自担风险!
如果您想查看 github 存储库,请访问:https://github.com/greedykomododragon/kontroler
为什么要使用控制器?
管理 kubernetes 上的工作流程可能具有挑战性。虽然 kubernetes 提供了强大的原语(如 cronjobs 和 jobs),但协调复杂的工作流程与依赖项、重试和动态触发器通常需要自定义脚本或外部工具。 kontroler 通过提供 kubernetes 原生解决方案来定义、安排和管理有向无环图 (dag) 的工作流程,从而简化了此过程。
以下是 kontroler 脱颖而出的原因:
1. 使用 yaml 进行 gitops dag 管理
kontroler 使您能够使用简单的 yaml 文件定义整个工作流程,包括任务、依赖项、重试逻辑和条件执行。这种方法使您的工作流程保持声明性、版本控制,并且易于在团队之间共享。
将它们包装在 helm 图表中并使用自动化部署系统(例如 argocd 或 fluxcd),您就可以在 gitops 工作流程中管理 dag。
2. 支持事件驱动和预定的工作流程
无论您需要工作流程定期运行(例如 cronjobs)还是对实时触发器做出反应(例如来自队列的消息),kontroler 都能满足您的需求。它无缝集成了两种调度范例,使其适用于各种用例。
kontroler 使用 dagruns(kontroler 可以监控的自定义资源定义或 crd)进行操作。要执行 dag 运行,您只需创建一个 dagrun,然后 kontroler 管理执行。通过在控制器外部公开此功能,kontroler 可以与外部系统无缝集成。请参阅下面的 dagrun 示例:
apiVersion: kontroler.greedykomodo/v1alpha1 kind: DagRun metadata: labels: app.kubernetes.io/name: dagrun app.kubernetes.io/instance: dagrun-sample name: dagrun-sample spec: dagName: dag-sample parameters: - name: first fromSecret: secret-name-new - name: second value: value_new
您只需提供 dag 的名称,可以选择包含任何参数。如果未指定,参数将使用默认值。
3. 与容器无缝集成
作为 kubernetes 原生应用程序,kontroler 利用了该平台的优势。从简单的脚本到复杂的应用程序,kontroler 的容器优先设计确保任何工作负载都可以轻松集成到 dag 中。
为了进一步减少重复工作,我们添加了对 crd 形式的任务的支持。
4. 提供可选 ui 以提高可见性
虽然 yaml 非常适合基础设施即代码,但可视化工作流程并跟踪其执行可以显着简化调试和优化。 kontroler 提供了一个可选的基于 web 的 ui,用于创建和监控 dag,为团队提供了一种直观的方式来管理工作流程。
在上面的屏幕截图中,它向您展示了:
- 任务之间的联系
- 在 dagrun 中它将显示状态
- 单击网络时的 pod 结果
在底层,此功能由 vis-network 提供支持,vis-network 是一个用于创建图形的开源项目。您可以在此处找到他们的 github 存储库。最初,我们开发了自己的图形工具,但发现很难扩展并且使复杂的图形可读具有挑战性。因此,我们采用了这个开源解决方案。
5. 用于高级配置的灵活 pod 模板
kontroler 的 pod 模板可让您使用高级 kubernetes 功能(如机密、pvc、节点亲和性、安全上下文等)自定义任务。这使您可以对任务的执行方式进行细粒度控制,确保与集群的特定要求兼容。
数据存储的灵活性
管理工作流程的关键挑战之一是确保底层基础设施可以根据您的需求进行扩展。 kontroler 提供灵活的数据库支持和日志记录功能,使团队能够更轻松地管理 dag 并捕获详细的执行日志。无论您使用的是轻量级设置还是更强大的生产环境,kontroler 都有可以满足您需求的选项。
sqlite(默认 小规模)
对于较小的设置或开发过程,sqlite 是 kontroler 使用的默认数据库。它简单、轻量,不需要太多配置。如果您刚刚开始或出于测试目的运行 kontroler,sqlite 是一个方便的选择,因为它“开箱即用”,无需额外的数据库设置。
如果您更喜欢使用 sqlite,则无需对部署进行任何其他更改。只需按照安装说明进行操作,kontroler 就会处理剩下的事情。
postgresql(用于生产/大规模)
对于大型生产级部署,推荐使用 postgresql 来存储 dag 和 dagrun。 kontroler 使用 postgresql 提供处理大量工作流数据所需的更高性能、可扩展性和可靠性。 kontroler 兼容 postgresql 16 及以上版本
日志收集
对于许多 kubernetes 用户来说,集中式日志存储是可观察性和故障排除的关键要求。 kontroler 与 amazon s3 无缝集成以进行日志存储,从而可以轻松收集、存储和分析 dag 执行的日志。这种集成确保您可以捕获详细的日志,长期保存它们以供审核,并在出现问题时使用它们进行事后分析。
我们正在使用 minio 进行测试以避免成本,但在幕后,它使用 aws s3 api,并且应该能够检测您的 iam 属性以授予对 s3 存储桶的访问权限。
最后的评论
我们希望您能看看 kontroler!您可以在这里找到它:https://github.com/greedykomododragon/kontroler。
尽管仍处于 alpha 阶段,kontroler 对于希望简化 kubernetes 运营的团队来说具有巨大的潜力。随着它的发展,kontroler 的目标是成为在 kubernetes 中编排工作流程的强大工具,为团队提供轻松自动化复杂流程所需的可靠性和可扩展性。
kontroler 正在不断改进,因此请密切关注未来的更新!如果您想为该项目做出贡献,我们欢迎各种形式的贡献。