写点什么

基于 Argo CD 与 Argo Workflows 的 GreptimeDB 云端自动化升级实践

作者:Greptime
  • 2023-08-25
    北京
  • 本文字数:2753 字

    阅读完需:约 9 分钟

基于 Argo CD 与 Argo Workflows 的 GreptimeDB 云端自动化升级实践

背景

GreptimeDB 的迭代开发过程中,我们遇到一些元数据不兼容的场景,这些场景需要进行停机维护。为了避免繁琐的手动操作,我们决定引入一套自动化流程来实现升级过程。具体而言,我们会针对元数据不兼容的情况,设计相应的自动化流程,以确保升级过程的顺利进行,这些流程包括数据备份、停机维护、升级验证等等。通过引入这套自动化流程,我们能够更加高效地进行 GreptimeDB 的升级,减少了停机时间和人为操作错误的风险

基于 Argo CD 和 Argo Workflows 的云端升级

对于专注于时序数据存算的全托管 DBaaS 服务— GreptimeCloud,我们从第一天起就积极拥抱云原生技术。利用 IaC(Infrastructure as Code)的策略,我们将资源配置转变为代码形式,达到更高效地部署和管理资源的目的。同时,我们通过 Argo CD 与 GitHub 仓库同步,使得资源能迅速部署到 Kubernetes 集群里。


对于 GreptimeDB 的升级策略,我们同样发挥了 Argo CD 和 Argo Workflows 的优势,更加流畅地实现了软件的自动化升级。

Argo CD Resource Hook

Argo CD 的资源钩子 Resource Hook 是一种机制,用于在应用程序的生命周期中执行自定义操作。资源钩子可以与应用程序的部署、同步或其他生命周期事件相关联。通过使用资源钩子,可以在特定事件发生时执行一些自定义逻辑。


在 GreptimeDB 升级过程中,我们运用了以下三种钩子:


  • PreSync 钩子:在应用程序同步之前执行的钩子。可以使用 PreSync 钩子来执行一些操作,如配置修改、执行脚本、数据备份等;

  • Sync 钩子:在应用程序同步期间执行的钩子。可以用于执行一些与同步过程相关的操作,例如启动服务、检查应用程序状态等;

  • PostSync 钩子:在应用程序同步之后执行的钩子。可以用于执行一些后续操作,如通知或其他后处理任务。


使用 Resource Hook 需要在资源中定义 annotations,下面是一个使用 PreSync Hook 的例子:


apiVersion: batch/v1kind: Jobmetadata:  name: presync-hook  annotations:    argocd.argoproj.io/hook: PreSyncspec:  template:    spec:      containers:      - name: presync-hook        image: image        command: ["./run.sh"]      restartPolicy: OnFailure
复制代码

Argo Workflows

Argo Workflows 是一个开源的工作流引擎,用于编排、执行任务和工作流程。它基于 Kubernetes,并以声明式的方式定义工作流,使得创建、管理工作流变得简单和可靠。


以下是一些 Argo Workflows 的特性:


  • 声明式的工作流定义:使用 YAML 或 JSON 格式,通过定义任务和它们之间的依赖关系来描述工作流;

  • 并行执行和控制流:Argo Workflows 允许任务并行执行,并提供了灵活的控制流机制,如条件判断、循环和分支;

  • 条件和定时触发:可以根据特定的条件或计划来触发工作流的执行;

  • 高级任务编排:Argo Workflows 提供了丰富的任务编排功能,如容错机制、重试策略、任务输出传递等;

  • 可视化和监控:Argo Workflows 提供了 UI 界面和命令行工具,用于可视化地展示工作流的执行状态和进度,可以实时监控工作流的执行,以及查看任务的日志和输出。


在本次升级中,我们采用了一种更加细化和灵活的方式来编排升级任务,定义了两种不同类型的工作流,分别为 PreSync Workflow 和 PostSync Workflow,这样可以更好地控制和管理升级过程中的各个阶段,确保升级过程的可控性、可靠性和高效性。

升级过程

当进行 GreptimeDB 集群升级时,通常需要执行一系列步骤来确保顺利完成。以下是服务升级流程,详细说明了每个步骤的操作:


  1. 修改代码配置:在代码配置中将 GreptimeDB 集群的镜像版本修改为新版,然后将修改后的代码提交为一个 pull request,将其合并到 GitHub 代码库中。

  2. PreSync Workflow 程包含以下步骤:


  • 开始执行通知:发送通知给团队成员,说明开始执行升级流程;

  • 停服:停止 GreptimeDB 集群的服务,确保没有新的请求进入系统;

  • etcd 备份:执行 etcd 数据库的备份操作,以保留升级前的数据备份;

  • 上传备份数据到 S3:将 etcd 备份数据上传到 Amazon S3 存储桶,以确保数据的安全性和可恢复性;

  • 模拟升级:在实际升级之前,进行一次 Dry Run,模拟升级过程并检查潜在问题;

  • 升级:执行实际的升级操作,将元数据进行升级。


  1. 失败处理:如果升级过程中发生失败,可以执行 etcd 恢复操作,将 etcd 数据库恢复到升级之前的状态。

  2. Sync 过程:将创建一个新版本的 GreptimeDB 集群。

  3. PostSync Workflow:向团队成员发送通知升级成功通知,说明升级已成功完成。

  4. Workflow annotations:在工作流程中添加 argocd.argoproj.io/hook-delete-policy: HookSucceeded,以便 Argo CD 在工作流程成功执行后自动删除。


未来规划

通过将 Argo CD Resource Hook 和 Argo Workflows 相结合,我们成功实现了云上 GreptimeDB 的自动化升级过程,这为我们的升级流程带来了更高的效率和可靠性。然而,我们并不满足于此,未来我们将继续探索和创新,进一步完善这个流程,以确保升级过程的全面性和稳定性,部分优化措施如下:


  • Downgrade 操作:除了升级操作,我们还会引入 downgrade 操作,以便在需要时能够回滚到之前的版本,这将为我们提供更大的灵活性和容错能力;

  • 数据升级前后校验:为了确保升级过程不会对数据的完整性造成影响,我们计划在升级前后进行数据校验,涉及到验证数据的完整性、数据比对等,以确保升级后的数据与升级前没有发生任何损坏或丢失;

  • 升级后读写测试:为了验证升级后的系统性能和稳定性,我们将进行读写测试,其中包括模拟实际的读写操作。通过这些测试,我们可以确定升级对系统的影响,并及时采取措施解决潜在的问题。


我们坚信


持续完善 GreptimeDB 的升级流程并追求最佳的自动化云端升级,可以为开发者和用户带来更顺畅和可靠的体验。👀


如果你对此领域和技术充满热情,或者有任何宝贵的建议和想法,我们热烈邀请你加入我们的 Slack 社区,与我们的技术团队一同探讨和交流!👏




关于 Greptime

Greptime 格睿科技于 2022 年创立,目前正在完善和打造时序数据库 GreptimeDB 和格睿云 GreptimeCloud 这两款产品。

GreptimeDB 是一款用 Rust 语言编写的时序数据库,具有分布式、开源、云原生、兼容性强等特点,帮助企业实时读写、处理和分析时序数据的同时,降低长期存储的成本。

GreptimeCloud 基于开源的 GreptimeDB,为用户提供全托管的 DBaaS,以及与可观测性、物联网等领域结合的应用产品。利用云提供软件和服务,可以达到快速的自助开通和交付,标准化的运维支持,和更好的资源弹性。GreptimeCloud 已正式公测,欢迎关注公众号或官网了解最新动态!

官网:https://greptime.com/

公众号:GreptimeDB

GitHub: https://github.com/GreptimeTeam/greptimedb

文档:https://docs.greptime.com/

Twitter: https://twitter.com/Greptime

Slack: https://greptime.com/slack

LinkedIn: https://www.linkedin.com/company/greptime/


用户头像

Greptime

关注

专注于 Infra 技术分享 2022-09-23 加入

分布式、高性能、存储计算分离的开源云原生时序数据库

评论

发布
暂无评论
基于 Argo CD 与 Argo Workflows 的 GreptimeDB 云端自动化升级实践_rust_Greptime_InfoQ写作社区