Kontroler 简介:用于 DAG 的 Kubernetes 调度引擎
来源:dev.to
时间:2024-11-25 21:22:06 370浏览 收藏
Golang不知道大家是否熟悉?今天我将给大家介绍《Kontroler 简介:用于 DAG 的 Kubernetes 调度引擎》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!
什么是控制器?
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 正在不断改进,因此请密切关注未来的更新!如果您想为该项目做出贡献,我们欢迎各种形式的贡献。
终于介绍完啦!小伙伴们,这篇关于《Kontroler 简介:用于 DAG 的 Kubernetes 调度引擎》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!
-
505 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
471 收藏
-
454 收藏
-
370 收藏
-
314 收藏
-
499 收藏
-
287 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习