工作流集群基于开源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