选择 Argo Workflows 执行器
旧版本
此页面关于 Kubeflow Pipelines V1,最新信息请参阅 V2 文档。
注意,虽然 V2 后端能够运行由 V1 SDK 提交的 pipelines,但我们强烈建议迁移到 V2 SDK。供参考,V1 SDK 的最终版本是 kfp==1.8.22
,其参考文档可在此处获取。
Argo 工作流执行器是符合特定接口的进程,该接口允许 Argo 执行某些操作,例如监控 pod 日志、收集 artifact、管理容器生命周期等。
Kubeflow Pipelines 运行在 Argo Workflows 工作流引擎上,因此 Kubeflow Pipelines 用户需要选择一个工作流执行器。
选择工作流执行器
Emissary 执行器 自 KFP 1.8 正式发布(2022 年 2 月)以来一直是 Kubeflow Pipelines 的默认执行器。我们推荐使用 Emissary 执行器,除非您遇到已知的 Emissary 兼容性问题,在这种情况下,请在Emissary 执行器反馈 Github issue 中提交您的反馈。
Docker 执行器 可作为旧版选择使用。如果您确实遇到了 Emissary 执行器的兼容性问题,并且您的集群运行在较旧的 Kubernetes 版本(<1.20)上,您可以配置使用 Docker 执行器。
请注意,Argo Workflows 支持其他工作流执行器,但 Kubeflow Pipelines 团队仅推荐在 Emissary 执行器和 Docker 执行器之间进行选择。
Emissary 执行器
Emissary 执行器是 Kubeflow Pipelines v1.8+ 的默认工作流执行器。它于 Argo Workflows v3.1(2021 年 6 月)首次发布。Kubeflow Pipelines 团队认为其架构和可移植性改进使其成为大多数人将来应该使用的默认执行器。
容器运行时:任何
可靠性:尚未充分测试且不太流行,但 Kubeflow Pipelines 团队支持它。
安全性:更安全
- 无
privileged
访问。 - 无法逃脱 pod 的服务账户权限。
- 无
迁移:必须在Kubeflow Pipelines 组件规范 中指定
command
。注意,Kubeflow Pipelines v2 兼容模式 也需要相同的迁移要求,请参阅已知注意事项和重大变更。
迁移到 Emissary 执行器
先决条件:emissary 执行器仅在 Kubeflow Pipelines 后端版本 1.7+ 中可用。要升级,请参阅升级 Kubeflow Pipelines。
配置现有 Kubeflow Pipelines 集群以使用 emissary 执行器
安装 kubectl。
通过 kubectl 连接到您的集群。
切换到您安装 Kubeflow Pipelines 的命名空间
kubectl config set-context --current --namespace <your-kfp-namespace>
注意,通常是
kubeflow
或default
。确认当前工作流执行器
kubectl describe configmap workflow-controller-configmap | grep -A 2 containerRuntimeExecutor
使用 docker 执行器时,您会看到如下输出
containerRuntimeExecutor: ---- docker
将工作流执行器配置为 emissary
kubectl patch configmap workflow-controller-configmap --patch '{"data":{"containerRuntimeExecutor":"emissary"}}'
确认工作流执行器已成功更改
kubectl describe configmap workflow-controller-configmap | grep -A 2 containerRuntimeExecutor
您会看到如下输出
containerRuntimeExecutor: ---- emissary
使用 emissary 执行器部署新的 Kubeflow Pipelines 集群
对于 AI Platform Pipelines,安装过程中请勾选“使用 emissary 执行器”复选框。
对于Kubeflow Pipelines Standalone,安装 env/platform-agnostic-emissary
kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/platform-agnostic-emissary?ref=$PIPELINE_VERSION"
如有疑问,您始终可以先部署 Kubeflow Pipelines 集群,然后按照现有集群的说明在安装后配置工作流执行器。
迁移 pipeline 组件以在 emissary 执行器上运行
某些 pipeline 组件需要手动更新才能在 emissary 执行器上运行。对于Kubeflow Pipelines 组件规范 YAML,必须指定 command
字段。
组件迁移分步教程
有一个 hello world 组件
name: hello-world implementation: container: image: hello-world
我们可以运行不带 command/args 的容器
$ docker run hello-world Hello from Docker! ...
查找镜像中的默认 ENTRYPOINT 和 CMD 是什么
$ docker image inspect -f '{{.Config.Entrypoint}} {{.Config.Cmd}}' hello-world [] [/hello]
因此 ENTRYPOINT 未指定,而 CMD 是 ["/hello"]。请注意,ENTRYPOINT 大致等于
command
,CMD 大致等于arguments
。command
和arguments
连接起来作为用户命令。更新组件 YAML
name: hello-world implementation: container: image: hello-world command: ["/hello"]
更新后的组件现在可以在 emissary 执行器上运行了。
注意:Kubeflow Pipelines SDK 编译器总是为基于 python 函数的组件 指定一个命令。因此,这些组件无需修改即可继续在 emissary 执行器上工作。
Docker 执行器
Docker 执行器在 Kubeflow Pipelines v1.8 之前是默认的工作流执行器。
警告
Docker 执行器依赖于 docker 容器运行时,该运行时在 Kubernetes 1.20+ 上已弃用。- 容器运行时:仅限 docker。然而,Kubernetes 在 v1.20 后弃用 Docker 作为容器运行时。在 Google Kubernetes Engine (GKE) 1.19+ 上,容器运行时已默认为 containerd。
- 可靠性:经过最充分测试且最流行的 argo workflows 执行器
- 安全性:最不安全
- 它需要挂载宿主机的
docker.sock
的privileged
访问权限。这通常会被 Open Policy Agent (OPA) 或您的 Pod 安全策略 (PSP) 拒绝。GKE Autopilot 模式也拒绝它,因为不允许特权 Pod。 - 它可以逃脱 pod 的服务账户权限。
- 它需要挂载宿主机的
为 Docker 执行器准备 GKE 集群
对于 GKE,节点镜像决定使用哪种容器运行时。要使用 docker 容器运行时,您需要指定一个包含 Docker 的节点镜像。
您必须使用以下节点镜像之一
- 带有 Docker 的 Container-Optimized OS (cos)
- 带有 Docker 的 Ubuntu (ubuntu)
如果您的节点未使用 docker 作为容器运行时,运行 pipelines 时将始终收到类似如下的错误消息
此步骤处于 Error 状态,消息为:failed to save outputs: Error response from daemon: No such container: XXXXXX
参考
- Argo Workflow 执行器文档
- KFP docker 执行器不支持 Kubernetes 1.19 或更高版本 kubeflow/pipelines#5714
- 功能请求 - 默认使用 emissary 执行器 kubeflow/pipelines#5718