工作流在工作流集群中被存储为Kubernetes资源,该资源大小不能超过1 MB。工作流资源中包含每个子任务的状态,该状态被存储在资源的/status/nodes
字段中,当工作流的子任务很多时,资源的总大小可能超过1 MB,此时工作流的状态更新会出现异常。为解决此问题,您可以将工作流的状态信息存储在外部SQL数据库中,以突破1 MB的限制。本文介绍如何使用阿里云RDS MySQL存储工作流的状态信息以支持大规模工作流的运行。
前提条件
- 重要
设置网络时,RDS MySQL实例需要和已创建的工作流集群的VPC保持一致,并且在设置白名单时,放开该VPC网段。
数据库创建完成后,请记录数据库名称、数据库的用户名和密码(需要具有数据库的读写权限)、RDS实例地址等信息。关于如何查看RDS实例地址,请参见查看RDS实例地址。
操作步骤
使用以下内容,创建secret.yaml,用于保存数据库的用户名和密码。
apiVersion: v1 stringData: username: <database-username> # 替换为您数据库的用户名。 password: <database-password> # 替换为您数据库的密码。 kind: Secret metadata: name: argo-mysql-config namespace: default type: Opaque
执行以下命令,创建Secret。
kubectl apply -f secret.yaml
编辑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数据库名称。
配置完成后,重启Argo Server Pod,并确认Pod运行正常。
kubectl delete pod argo-server-xxx -n <cluster-id>
说明如果重启Argo Server Pod后,Pod出现反复重启,需要检查工作流集群和数据实例的连接,是否处于同一个VPC,数据库白名单是否允许工作流集群访问。
相关文档
如需查看工作流运行状态及相关计费信息,请参见创建工作流。
关于转移大规模工作流的更多信息,请参见Offloading Large Workflows。