在管道中操作Kubernetes资源
旧版本
本页面是关于 Kubeflow Pipelines V1,有关最新信息,请参见 V2 documentation。
注意,虽然V2后端能够运行由V1 SDK提交的管道,我们强烈建议迁移到V2 SDK。作为参考,V1 SDK的最终版本是kfp==1.8.22,其参考文档在这里可用。
本页面描述了如何在管道中通过单个 Kubeflow Pipelines 组件操作 Kubernetes 资源。 用户可以处理任何 Kubernetes 资源,而创建 持久卷声明 和 卷快照 在一般情况下变得简单。
Kubernetes 资源
资源操作
这个类表示管道的一个步骤,它操作Kubernetes资源。
它实现了
Argo的资源模板。
此功能允许用户对Kubernetes资源执行某些操作 (get, create, apply,
delete, replace, patch)。用户能够设置条件,以表示执行该操作步骤的成功或失败。
Link 到相应的Python库。
参数
本节仅介绍最重要的参数。
如需更多信息,请参考前面提到的库链接。
k8s_resource: Kubernetes资源的定义。 (必需)action: 要执行的操作(默认为create)。merge_strategy: 当操作为patch时的合并策略。 (可选)success_condition: 表示该步骤成功的条件,一旦条件成立则为真。 (可选)failure_condition: 一旦条件为真,表示步骤失败的条件。(可选)attribute_outputs: 类似于file_outputs通过kfp.dsl.ContainerOp。 将输出参数名称映射到 Kubernetes 对象中的 JSON 路径。 有关此内容,请参见下面的章节。 (可选)
输出
ResourceOps 可以生成输出参数。
它们可以输出正在被操作的资源的字段值。
例如:
job = kubernetes_client.V1Job(...)
rop = kfp.dsl.ResourceOp(
name="create-job",
k8s_resource=job,
action="create",
attribute_outputs={"name": "{.metadata.name}"}
)
默认情况下,ResourceOps 输出资源的名称以及整个资源规范。
示例
为更好的理解,请参考以下示例: 1
持久卷声明 (PVCs)
请求创建PVC实例简单而快速。
卷操作
专门用于PVC创建的ResourceOp。
Link 到相应的Python库。
参数
以下参数是对 ResourceOp 参数的扩展。
如果传递了 k8s_resource,则不应提供以下任何内容。
resource_name: 要创建的资源名称。 这个字符串将以工作流名称为前缀。 这可能包含PipelineParam。 (必需)size:请求的PVC大小。
这可能包含PipelineParam。
(必需)storage_class:将要使用的存储类。 这可能包含PipelineParam。 (可选)modes: TheaccessModesof the PVC (defaults toRWM). Check 此文档 for further information. The user may find the following modes built-in:VOLUME_MODE_RWO:["ReadWriteOnce"]VOLUME_MODE_RWM:["ReadWriteMany"]VOLUME_MODE_ROM:["只读多个"]
annotations: 要在PVC中修补的注释。这些可以包含PipelineParam。(可选)data_source:用于从VolumeSnapshot创建PVC。 可以是string或V1TypedLocalObjectReference,并且可以包含PipelineParam。 (Alpha特性, 可选)
输出
此外,关于资源的整体规格及其名称
(ResourceOp 默认值),VolumeOp 还会输出绑定的持久卷的存储大小(作为 step.outputs["size"])。
然而,如果存储提供者具有
WaitForFirstConsumer 绑定模式,则此值可能为空。
如果此值不为空,则始终大于或等于请求的大小。
有用的信息
VolumeOp步骤具有一个.volume属性,该属性是一个PipelineVolume引用所创建的 PVC。有关 Pipeline Volumes 的更多信息请参见以下部分。- 一个
ContainerOp在其构造函数中有一个pvolumes参数。 这是一个字典,挂载路径作为键,卷作为值,功能类似于file_outputs(可以作为op.outputs["key"]或op.output使用)。 例如:
vop = dsl.VolumeOp(
name="volume_creation",
resource_name="mypvc",
size="1Gi"
)
step1 = dsl.ContainerOp(
name="step1",
...
pvolumes={"/mnt": vop.volume} # Implies execution after vop
)
step2 = dsl.ContainerOp(
name="step2",
...
pvolumes={"/data": step1.pvolume, # Implies execution after step1
"/mnt": dsl.PipelineVolume(pvc="existing-pvc")}
)
step3 = dsl.ContainerOp(
name="step3",
...
pvolumes={"/common": step2.pvolumes["/mnt"]} # Implies execution after step2
)
管道体积
轻松引用Kubernetes卷,挂载它们并通过它们表达依赖关系。
A PipelineVolume 本质上是一个 Kubernetes Volume(*),携带依赖项,并附加一个 .after() 方法来扩展它们。这些依赖项可以在 ContainerOp 中被正确解析,当被用于 pvolumes 参数或 add_pvolumes() 方法时,以扩展该步骤的依赖项。
Link 到相应的Python库。
(*) 继承自 Kubernetes Python 客户端的 V1Volume 类。
参数
PipelineVolume 构造函数接受所有 V1Volume 构造函数的参数。
然而,name 可以省略,系统会为该卷生成一个伪随机名称。
额外参数:
pvc:要被此PipelineVolume引用的现有 PVC 的名称。该值可以是PipelineParam。volume: 从现有的V1Volume或其继承类型(例如PipelineVolume)初始化一个新的PipelineVolume实例。
示例
卷快照
请求创建卷快照实例简便快速。
卷快照操作
一个专门用于创建卷快照的ResourceOp。
Link 到相应的Python库。
注意: 您应该检查您的Kubernetes集群管理员是否在您的集群中启用了卷快照。
参数
以下参数是对ResourceOp参数的扩展。 如果传递了k8s_resource,则以下内容均不可提供。
resource_name: 将要创建的资源的名称。这个字符串将会以工作流名称为前缀。它可能包含PipelineParam。(必需)pvc: 要快照的PVC的名称。 这可以包含PipelineParam。 (可选)snapshot_class: 要使用的快照存储类。 这可能包含PipelineParam。 (可选)volume: 一个V1Volume实例或其继承类型(例如PipelineVolume)。这可能包含PipelineParam。(可选)annotations: 要作为补丁应用在VolumeSnapshot的注释。这些可能包含PipelineParam。 (可选)
注意: 需要提供 pvc 或 volume 之一。
输出
此外,对于资源的整个规范及其名称
(ResourceOp 默认值),VolumeSnapshotOp 还输出
绑定的 VolumeSnapshot 的 restoreSize
(作为 step.outputs["size"])。
这是该快照的 PVC 克隆的最小大小。
有用的信息
VolumeSnapshotOp 步骤具有一个 .snapshot 属性,它是一个
V1TypedLocalObjectReference。
这可以作为 data_source 传递,以便从该 VolumeSnapshot 创建一个 PVC。
用户可以使用 step.outputs["name"] 作为 data_source。
示例
下一步
- 请查看Kubeflow Pipelines中的示例 repository。 例如,可以查看这些 ResourceOps, VolumeOps 和 VolumeSnapshotOps的示例。
- 了解有关 Kubeflow Pipelines 特定领域语言 (DSL) 的更多信息, 这是一些可以用于指定机器学习管道的 Python 库。
- 为了快速迭代,构建组件和管道。