工作流在工作流集群中被存儲為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。