Upgrade to Pro — share decks privately, control downloads, hide ads and more …

混合雲環境整合異質工作流程工具運行關鍵業務 Job 的經驗分享

混合雲環境整合異質工作流程工具運行關鍵業務 Job 的經驗分享

在一個混合雲環境中,各團隊使用不同工作流程工具是常見樣態,如何整合由多個開發團隊使用,運行在公司內網與公有雲、容器與虛擬機的異質環境,是近幾年 104 Kubernetes 團隊在實務上遇到的難題。

本演講將分享 104 Kubernetes 團隊如何整合 AWS Step Functions、Argo Events、Argo Workflows 及 Rundeck 來運行關鍵業務工作流程,透過 Step Functions 為流程控制器,指揮運行在雲端與地端的多個工作流程工具(Argo Workflows、Rundeck)。

導入這樣的混合型架構,我們也面臨許多挑戰,包括:
- 如何設計一套工作流程框架,同時服務開發者、雲端與地端維運團隊?
- 如何讓不同執行平台(如 Kubernetes Job Pod、AWS Lambda、VM 上的 Job)之間交換執行狀態?
- 如何在跨系統流程中導入錯誤回報、重試機制?

這樣的流程整合不僅提升作業的可視性與協作效率,也讓流程邏輯從「人力排程」轉變為「事件驅動」,大幅提升處理彈性與系統韌性。

當然,整合多種截然不同的工作流程執行平台,也讓我們踩過不少坑。本演講將分享這一路走來的設計思維、實踐成果、以及我們如何逐步讓流程平台從「工具箱」走向「作業骨幹」。

Avatar for Yao-Siang Su (蘇曜祥)

Yao-Siang Su (蘇曜祥)

October 21, 2025
Tweet

More Decks by Yao-Siang Su (蘇曜祥)

Other Decks in Technology

Transcript

  1. 議程 1: 問題說明 2: 階段性變化與經驗 3: 現況與最終目標 如何整合 AWS Step

    Functions、Argo Events/Workflows、Rundeck 異質工作流程工具,讓混合雲環境下的關鍵 Job 能事件驅動運行?
  2. 在 K8s 導入中新舊工作流程遷移經驗 2021 以網站服務為優先開始導入 K8s,相關經驗分享在 Kubernetes Summit 2024。 本次會談

    104 如何把大量既有排程 Job 導入 K8s?部分需要 Workflow 控制流 程的關鍵 Job,又怎樣在新舊 Workflow 工具之間做轉移? 觀望 意願不高 幾年的流程改善 持續支援各種場景 落地生根 形成技術文化 VM K8s VM K8s VM K8s K8s
  3. 階 段 性 變 化 整合更多 Workflow 工具 Job 跑在

    VM 及 K8s 上 開始使用 Workflow 工具 只有 CronJob
  4. 2015 還是 VM 時代 只能用 Java,人工排程到特定 VM 跑 每個 Job

    要填表單,申請編號 共用組件需要申請上傳到 VM 要做資源控管,只允許運行 Java 需要設計樂觀鎖,避免 Job 重複執行 整體規模小於 300 支 Job Ops Dev
  5. 循序 缺乏工作流程概念 不同單位 Job 是上下游,A 產出資料會被 B 接手利用,循序執行 特定任務資料量太大,要拆成多個 Job

    平行執行才能在時限內跑完(e.g. 在半 夜跑完求職者跟職缺配對並寄信) 視某個 Job 執行結果去呼叫另外的 Job 分支判斷 平行
  6. 循序 (錯開時間) 缺乏工作流程概念 不同單位 Job 是上下游,A 產出資料會被 B 接手利用,循序執行 特定任務資料量太大,要拆成多個

    Job 平行執行才能在時限內跑完(e.g. 在半 夜跑完求職者跟職缺配對並寄信) 視某個 Job 執行結果去呼叫另外的 Job 平行 (複製貼上) (排相同時間) 分支判斷 (寫在一起)
  7. 1234 VM 1 2010 VM 2 1995 VM 5 345_1

    VM 1 關鍵 Job 人工排程 Monitoring 早上 緩衝 時間 停止 或接續執行 停止 或接續執行 半夜 345_2 VM 3 345_3 VM 1 Ops 叫醒 失敗或逾時
  8. EventBridge 定期驅動 Step Functions 執行 Rundeck / Job in VM

    根據參數執行特定 VM 上的特定 Job 回傳 Job 執行狀態給 Step Functions Step Functions 定義工作流程,循序或平行 Lambda 呼叫 rundeck api 接收 Job 執行結果 發送錯誤通知 AWS Step Functions + Rundeck 角色
  9. VM1 VM2 VM4 VM3 1:呼叫地端 Rundeck URL 指定 Job 編號跟

    VM 2:Rundeck 連進 VM 執行 Job 啟動 腳本 3:Job 啟動 腳本回報成功或失敗 4:回報 Step 狀態 5:若失敗 要發送告警 0:定時 啟動 Step Functions On Premises AWS 6:平行執行 判斷執行結果
  10. 技術問題解決了! 管理問題隨之而來 :( AWS Step Functions 是狀態機,不支援從特定節點直接啟動 需把一系列 Job 定義成另一個

    Step Functions,用 nested 方式才可以 這導致整個 Step Functions 圖越來越複雜! 誰有權限手動執行? 某些 Job 的管理單位沒有 AWS 帳號 第一線 support 同仁也需要權限幫忙 依賴內部 Developer Portal 處理 對組織技術文化的影響 VM 環境也能被事件驅動控制了 工作流程概念開始幫助到大家 相同 Job 平行執行,尚做不到 :( 請人開發介面給大家用
  11. AWS Step Functions + Rundeck + Argo Events + Argo

    Workflows Job in VM + Job in K8s 2024~Present
  12. K8s 在網站系統導入現況 2025 年底地端網站服務的 VM 超過 80% 導入 K8s 超過

    1000 Core CPU Argo CD Application,2024 年是 1336,2025 年是 2650 2024 年 VM Job 轉移到 K8s 規模較小,大概只有幾十個
  13. K8s 在網站系統導入現況 2025 年底地端網站服務的 VM 超過 80% 導入 K8s 超過

    1000 Core CPU Argo CD Application,2024 年是 1336,2025 年是 2650 2024 年 VM Job 轉移到 K8s 規模較小,大概只有幾十個 2025 年老闆希望快點把 VM Job 都轉移到 K8s... VM K8s VM K8s VM K8s K8s 快點 快點 快點
  14. 如何大量遷移既有的 Java Job? 如何處理 K8s 內的 Workflow? 少數產品團隊有上百支既有 Java Job,他們可不想改

    程式,或者自行 build container image! 產品團隊沒有太多時間配合,轉移流程能不能儘量自 動化跟最精簡? Java Job 執行時需要載入共用元件,部分也會寫檔, 有些還會輸出日誌到檔案系統,這些都要能持續運作 要怎麼設定這些 Job Pod 的 resource 才合理? 現行的工作流程工具,會需要控制在 VM 上的 Job, 也需要控制在 K8s 上的 Job 產品團隊想要在 K8s 上執行工作流程,也希望可以自 己手動執行 K8s 架構團隊想要簡化未來的工作流程系統,但導入 過程需要安排過渡階段 主要難點
  15. 快速遷移大量 Java Job 1.透過 GitHub Issues 驅動自動化流 程建立對應 Argo CD

    AppSet 2.自動化流程會用公司公版 K8s CronJob Helm Chart,並直接把 相關 values.yaml 設定好 3.發 PR 給開發團隊,Merge 後收工
  16. EventBridge 定期驅動 Step Functions 執行 Rundeck / Job in VM

    根據參數執行特定 VM 上的特定 Job 回傳 Job 執行狀態給 Step Functions Step Functions 定義工作流程,循序或平行 Lambda 呼叫 rundeck api 接收 Job 執行結果 發送錯誤通知 Argo Events / Argo Workflows / K8s Job Pod 根據參數執行特定 Argo Workflows K8s 的 Workflow 方案 新增 K8s 生態系工具
  17. Argo Events Argo Events 支援眾多 Event Source,其中的 Webhook 可取代 Rundeck

    API Argo Events 收到事件後會驅動 Sensor 做事情,其中一個是 Argo Workflows
  18. 1:呼叫 Argo Events Webhook 指定 Job 編號跟 Workflow 名稱 4:Argo

    Workflows 回報成功或失敗 5:回報 Step 狀態 6:若失敗 要發送告警 0:定時 啟動 Step Functions On Premises AWS 7:平行執行 判斷執行結果 2:Argo Events 驅 動 Argo Workflows 3:Argo Workflows 建立 CJ
  19. 某些問題不會消失 Argo Workflows 一樣是狀態機,仍 然需要定義 nested workflows 某些問題被解決了 開發團隊可以直接在 Argo

    Workflows 介面除錯跟自行執行 不用再手動刻介面給開發者 開發團隊可以用 Indexed Job 來同時 運行複數個相同 Job 相關經驗
  20. 某些問題不會消失 Argo Workflows 一樣是狀態機,仍 然需要定義 nested workflows 某些問題被解決了 開發團隊可以直接在 Argo

    Workflows 介面除錯跟自行執行 不用再手動刻介面給開發者 開發團隊可以用 Indexed Job 來同時 運行複數個相同 Job Argo Workflows Template 讓我們有 機會透過自動化產生,然後用 GitOps 方法管理 相關經驗
  21. 現 況 與 最 終 目 標 整合更多 Workflow 工具

    Job 跑在 VM 及 K8s 上 開始使用 Workflow 工具 只有 CronJob
  22. 既有 VM Jobs 轉移至 K8s 現況 2025 約 500 支

    VM Jobs 數量,Lab 環境 VM Jobs 已轉移超過 64% 到 K8s。 轉移單個 VM Job 大概只需開一到兩張 GitHub Issues,費時 5 分鐘。 預計明年轉移會超過 80%。 工作流程導入狀況 大部分使用 Rundeck API 呼叫的節點已改為呼叫 Argo Events/Workflows。 歷時約一年半。 現況
  23. Start VM Rundeck K8s Argo K8s Argo End Start K8s

    Argo K8s Argo K8s Argo K8s Argo End VM Rundeck 隨著時間演變
  24. 2:Argo Workflows 回報成功或失敗 3:若失敗 要發送告警 On Premises 1:Argo Events 定期驅動

    Argo Workflows 執行工作流程 4:若成功則 持續依照工作 流程執行
  25. 搭配 Argo Events、Argo Workflows, 事件驅動想法更容易被開發團隊使用, 逐步改變組織技術文化。 webhook 在許多場景都能派上用場, 例如:搭配 Self-Hosted

    GitHub Action Runner 後,CI 流程可以透過 webhook 來呼叫內部系統。 從多種工作流程工具到統一的事件驅動 架構,這不只是技術整合,更是讓流程 平台成為企業的作業骨幹。 經 驗 分 享