在Serverless Kubernetes集群中轻松运行Argo Workflow
導讀
Argo是一個基于kubernetes實現的一個Workflow(工作流)開源工具,基于kubernetes的調度能力實現了工作流的控制和任務的運行。
 目前阿里云容器服務ACK集群中已經支持工作流的部署和調度,這里我們介紹如果在ASK(Serverless Kubernetes)集群中使用Argo,無需預留節點資源池,即可靈活動態的運行工作流任務,并最大化節省用戶的計算成本。
前置條件:
- 創建ASK集群?https://cs.console.aliyun.com/#/k8s/cluster/create/serverless
 因為argo創建的pod往往需要大規格cpu和mem資源,因此建議創建多可用區ASK集群,當一個可用區庫存不足時,后臺會在其他可用區嘗試創建pod,以緩解單可用區庫存不足的情況。
- 下載ags命令行,可參考https://help.aliyun.com/document_detail/121342.html
部署argo workflow controller
# ags install# kubectl -n argo get pod NAME READY STATUS RESTARTS AGE argo-ui-5c5dbd7d75-hxqfd 1/1 Running 0 60s workflow-controller-848cf55b64-6pzc9 1/1 Running 0 60s# kubectl -n argo get configmap NAME DATA AGE workflow-controller-configmap 0 4m55sargo默認使用docker executor api,在serverless集群中我們需要切換成k8sapi才能正常工作。
# kubectl -n argo edit configmap workflow-controller-configmap apiVersion: v1 kind: ConfigMap ... data:config: |containerRuntimeExecutor: k8sapi運行Hello-World Workflow示例
下面我們運行Hello-World example:https://github.com/argoproj/argo/blob/master/examples/hello-world.yaml
# ags submit https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml Name: hello-world-l26sx Namespace: default ServiceAccount: default Status: Pending Created: Fri Nov 15 14:45:15 +0800 (now)# kubectl get pod NAME READY STATUS RESTARTS AGE hello-world-l26sx 0/2 Completed 0 88s# ags list NAME STATUS AGE DURATION PRIORITY hello-world-l26sx Succeeded 1m 1m 0當我們需要使用大規格資源來運行workflow時,可以在workflow中給pod指定anntation。
注意此情況不要在container中指定大規格requests/limits,因為argo生成的pod中包含多個container,給單個container指定大規格的requests/limits會導致eci無法給pod分配匹配的資源,進而導致創建失敗。我們推薦給pod指定ecs規格或者cpu/mem保證pod正常運行,如下。
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata:generateName: hello-world- spec:entrypoint: whalesaytemplates:- name: whalesaymetadata:annotations:k8s.aliyun.com/eci-instance-type : "ecs.ic5.3xlarge"container:image: docker/whalesay:latestcommand: [cowsay]args: ["hello world"]結束
當運行結束后,可以清理workflow資源。
# ags delete hello-world-l26sx Workflow 'hello-world-l26sx' deleted# kubectl get pod No resources found.我們可以看到,因為ASK集群天然無需管理節點資源池,所有pod按需創建,很好的匹配了Argo工作流的任務形態,靈活動態的按需分配計算資源,更好的節省成本。
原文鏈接
 本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的在Serverless Kubernetes集群中轻松运行Argo Workflow的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 机器学习在高德起点抓路中的应用实践
- 下一篇: 阿里云环境中TLS/SSL握手失败的场景
