工作流集群基于開源Argo Workflow項目構建,您可以參考開源文檔自定義工作流。工作流可應用于CI/CD流水線、數據處理、機器學習和仿真計算等。本文通過示例介紹如何使用Argo CLI創建工作流,并設置工作流使用的CPU和Memory資源。
前提條件
使用說明
工作流ServiceAccount
工作流可以指定ServiceAccount用于運行中訪問其他Kubernetes資源,您可以創建自己的ServiceAccount,工作流集群會為ServiceAccount自動綁定權限,如果權限不足以支持您的工作流運行,請加入釘釘群(釘釘群號:35688562),聯系產品技術專家進行咨詢。
阿里云Argo CLI
阿里云Argo CLI完全兼容開源Argo CLI,并在此基礎上增強了Metrics能力。您可以使用阿里云Argo CLI查看工作流消耗的CPU和內存資源,并查看工作流運行的成本。同時增強了日志能力,可以獲取工作流已刪除Pod的日志。
安裝步驟如下:
Darwin:argo-cli-aliyun-darwin
Linux:argo-cli-aliyun-linux
以下安裝步驟以Linux系統為例,Darwin和Linux系統的下載鏈接分別如下:
執行如下命令下載阿里云Argo CLI
wget https://ack-one.oss-cn-hangzhou.aliyuncs.com/cli/v3.4.12/argo-cli-aliyun-linux
執行如下命令為argo-cli-aliyun-linux授予可執行權限。
chmod +x argo-cli-aliyun-linux
將執行文件移動到環境變量包含的目錄下,例如:
/usr/local/bin/
。mv argo-cli-aliyun-linux /usr/local/bin/argo
根據不同的操作系統選擇對應的版本下載,并重命名為Argo。
Darwin:下載阿里云Argo CLI。
Linux:下載阿里云Argo CLI。
創建工作流
您可以通過以下阿里云Argo CLI和kubectl兩種方式操作創建工作流。
使用阿里云Argo CLI操作工作流
使用以下內容,創建helloworld-workflow.yaml文件。
apiVersion: argoproj.io/v1alpha1 kind: Workflow # new type of k8s spec. metadata: generateName: hello-world- # name of the workflow spec. spec: entrypoint: whalesay # invoke the whalesay template. templates: - name: whalesay # name of the template. container: image: docker/whalesay command: [ cowsay ] args: [ "hello world" ]
執行以下命令,提交工作流。
argo submit helloworld-workflow.yaml
查看工作流狀態。
執行以下命令,獲取工作流列表。
argo list
預期輸出:
NAME STATUS AGE DURATION PRIORITY hello-world-lgdpp Succeeded 2m 37s 0
執行以下命令,查看工作流狀態。
argo get hello-world-lgdpp
預期輸出:
Name: hello-world-lgdpp Namespace: default ServiceAccount: unset (will run with the default ServiceAccount) Status: Succeeded Conditions: PodRunning False Completed True .... Duration: 37 seconds Progress: 1/1 ResourcesDuration: 17s*(1 cpu),17s*(100Mi memory) STEP TEMPLATE PODNAME DURATION MESSAGE ? hello-world-lgdpp whalesay hello-world-lgdpp 27s
使用kubectl操作工作流
KubeConfig設置完成后,您可以通過kubectl操作工作流集群,但不同于普通的Kubernetes集群,部分操作會受限。相關權限說明如下。
資源 | 權限說明 |
priorityclasses | 可以管理priorityclasses,并在工作流中制定priorityclasses,達到通過Pod優先級控制調度順序的目的。 |
namespaces | 可以創建Namespaces,擁有自建Namespaces的全部權限,并可訪問自建Namespaces下的資源。不能訪問系統Namespaces下的資源。系統Namespaces即以kube-開頭的Namespaces。 重要 以集群ID命名的命名空間為Argo的系統命名空間,您可以操作此系統命名空間,例如,修改workflow-controller-configmap配置Argo Workflow的運行參數。 |
persistentvolumes | 全部權限。 |
persistentvolumeclaims | 自建Namespaces下的全部權限。 |
secretsconfigmapsserviceaccounts | 自建Namespaces下的全部權限。 |
pods | 自建Namespaces下的讀權限。 |
pods/logevents | 自建Namespaces下的讀權限。 |
pods/exec | 自建Namespaces下的創建權限。 |
Argo: workflows workflowtasksets workflowtemplates cronworkflows | 自建Namespaces下的全部權限。 |
設置容器CPU和內存
工作流集群優先使用搶占式ECI實例運行工作流,并配合使用按量付費ECI應對搶占式ECI的庫存問題,以優化成本。搶占式ECI實例的保護期為1小時,請確保工作流的子步驟在一小時內完成。
由于搶占式ECI實例僅支持2 vCPU及以上規格,不支持工作流中的容器資源配置小于2 vCPU。
如果工作流中的容器沒有配置資源請求,系統默認使用2 vCPU/4 GiB。
如果工作流中的容器配置的資源請求小于2 vCPU/4 GiB,系統覆蓋使用2 vCPU/4 GiB。
如果工作流中的容器配置的資源請求大于2 vCPU/4 GiB,系統會自動匹配滿足規格的ECI。支持指定的vCPU和內存規格如下表所示。不建議使用大于8 vCPU的配置。
vCPU
內存(GiB)
2
4、8、16
4
4、8、16、32
8
4、8、16、32、64
強制使用按量計費ECI運行工作流
在成本優先模式下,如需運行關鍵任務,不希望使用搶占式ECI實例。您可以設置工作流使用按量計費ECI實例運行工作流。
配置Container的requests
和limits
字段,示例代碼如下。
apiVersion: argoproj.io/v1alpha1
kind: Workflow # new type of k8s spec.
metadata:
generateName: hello-world- # name of the workflow spec.
spec:
entrypoint: whalesay # invoke the whalesay template.
templates:
- name: whalesay # name of the template.
container:
image: docker/whalesay
command: [ cowsay ]
args: [ "hello world" ]
resources:
requests:
cpu: 0.5
memory: 1Gi
limits:
cpu: 0.5
memory: 1Gi