使用RDS MySQL转移大规模工作流

工作流在工作流集群中被存储为Kubernetes资源,该资源大小不能超过1 MB。工作流资源中包含每个子任务的状态,该状态被存储在资源的/status/nodes字段中,当工作流的子任务很多时,资源的总大小可能超过1 MB,此时工作流的状态更新会出现异常。为解决此问题,您可以将工作流的状态信息存储在外部SQL数据库中,以突破1 MB的限制。本文介绍如何使用阿里云RDS MySQL存储工作流的状态信息以支持大规模工作流的运行。

前提条件

操作步骤

  1. 使用以下内容,创建secret.yaml,用于保存数据库的用户名和密码。

    apiVersion: v1
    stringData:
      username: <database-username>  # 替换为您数据库的用户名。
      password: <database-password>  # 替换为您数据库的密码。
    kind: Secret
    metadata:
      name: argo-mysql-config
      namespace: default
    type: Opaque
  2. 执行以下命令,创建Secret。

    kubectl apply -f secret.yaml
  3. 编辑workflow-controller-configmap文件,在persistence中添加nodeStatusOffLoad: true以启用转移工作流特性。关于编辑workflow-controller-configmap文件的更多信息,请参见修改工作流集群配置

      persistence: |
        connectionPool:
          maxIdleConns: 100
          maxOpenConns: 0
          connMaxLifetime: 0s # 0 means connections don't have a max lifetime
        archiveTTL: 30d
        nodeStatusOffLoad: true
        mysql:
          host: rm-****.mysql.cn-beijing.rds.aliyuncs.com
          port: 3306
          database: argo-workflow  # 前提条件中已创建的数据库
          tableName: argo_workflows
          userNameSecret:
            name: argo-mysql-config
            key: username
          passwordSecret:
            name: argo-mysql-config
            key: password

    参数

    说明

    nodeStatusOffLoad

    需设置为true,以开启转移工作流特性。

    mysql.host

    RDS实例地址。

    mysql.database

    RDS数据库名称。

  4. 配置完成后,重启Argo Server Pod,并确认Pod运行正常。

    kubectl delete pod argo-server-xxx -n <cluster-id>
    说明

    如果重启Argo Server Pod后,Pod出现反复重启,需要检查工作流集群和数据实例的连接,是否处于同一个VPC,数据库白名单是否允许工作流集群访问。

相关文档