将 Kubernetes 资源作为流水线的一部分进行操作

使用 SDK 将 Kubernetes 资源动态地作为流水线步骤进行操作的概览

此页面描述了如何在流水线过程中通过 Kubeflow Pipelines 的单个组件操作 Kubernetes 资源。用户可以处理任何 Kubernetes 资源,同时创建Persistent Volume ClaimsVolume Snapshots在常见情况下变得容易。

Kubernetes 资源

ResourceOp

此类代表流水线中操作 Kubernetes 资源的一个步骤。它实现了Argo 的 resource template

此功能允许用户对 Kubernetes 资源执行某些操作(getcreateapplydeletereplacepatch)。用户可以设置条件来指示执行该操作的步骤是否成功或失败。

链接到相应的 Python 库。

参数

本节仅介绍最主要的参数。有关更多信息,请参阅上述库的链接。

  • k8s_resource: Kubernetes 资源的定义。(必需
  • action: 要执行的操作(默认为 create)。
  • merge_strategy: 操作为 patch 时的合并策略。(可选
  • success_condition: 当为 true 时表示步骤成功的条件。(可选
  • failure_condition: 当为 true 时表示步骤失败的条件。(可选
  • attribute_outputs: 类似于 kfp.dsl.ContainerOpfile_outputs。将输出参数名称映射到 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 实例。

VolumeOp

专门用于创建 PVC 的 ResourceOp。

链接到相应的 Python 库。

参数

以下参数是 ResourceOp 参数的扩展。如果传递了 k8s_resource,则不应提供以下任何参数。

  • resource_name: 将要创建的资源的名称。此字符串将以工作流名称作为前缀。这可能包含 PipelineParams。(必需
  • size: 请求的 PVC 大小。这可能包含 PipelineParams。(必需
  • storage_class: 要使用的存储类。这可能包含 PipelineParams。(可选
  • modes: PVC 的 accessModes(默认为 RWM)。有关更多信息,请查阅此文档。用户可能会找到以下内置模式
    • VOLUME_MODE_RWO: ["ReadWriteOnce"]
    • VOLUME_MODE_RWM: ["ReadWriteMany"]
    • VOLUME_MODE_ROM: ["ReadOnlyMany"]
  • annotations: 要在 PVC 中修补的注解(Annotations)。这些可能包含 PipelineParams。(可选
  • data_source: 用于从 VolumeSnapshot 创建 PVC。它可以是 stringV1TypedLocalObjectReference,并且可能包含 PipelineParams。(Alpha 功能可选

输出

除了资源及其名称的完整规范(ResourceOp 默认值)外,VolumeOp 还输出绑定持久卷的存储大小(作为 step.outputs["size"])。但是,如果存储 Provisioner 具有 WaitForFirstConsumer 绑定模式,则此值可能为空。此值(如果不为空)始终大于或等于请求的大小。

有用信息

  1. VolumeOp 步骤具有 .volume 属性,该属性是引用所创建 PVC 的 PipelineVolume。更多关于 Pipeline Volumes 的信息请参见下一节。
  2. 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
)

PipelineVolume

轻松引用 Kubernetes 卷,挂载它们并通过它们表达依赖关系。

PipelineVolume 本质上是一个携带依赖关系的 Kubernetes Volume(*),并补充了扩展其依赖关系的 .after() 方法。这些依赖关系在 pvolumes 参数或 add_pvolumes() 方法中被 ContainerOp 消费时,可以被正确解析,以扩展该步骤的依赖关系。

链接到相应的 Python 库。

(*) 继承自 Kubernetes Python 客户端的 V1Volume 类。

参数

PipelineVolume 的构造函数接受所有 V1Volume 构造函数接受的参数。但是,name 可以省略,取而代之的是为该卷生成一个伪随机名称。

额外参数

  • pvc: 此 PipelineVolume 要引用的现有 PVC 的名称。此值可以是 PipelineParam
  • volume: 从现有的 V1Volume 或其继承类型(例如 PipelineVolume)初始化一个新的 PipelineVolume 实例。

示例

为了更好地理解,请参阅以下示例:1234


卷快照

简单快速地请求创建 Volume Snapshot 实例。

VolumeSnapshotOp

专门用于 Volume Snapshot 创建的 ResourceOp。

链接到相应的 Python 库。

注意:您应检查您的 Kubernetes 集群管理员是否已在您的集群中启用 Volume Snapshots。

参数

以下参数是 ResourceOp 参数的扩展。如果传递了 k8s_resource,则不能提供以下任何参数。

  • resource_name: 将要创建的资源的名称。此字符串将以工作流名称作为前缀。这可能包含 PipelineParams。(必需
  • pvc: 要创建快照的 PVC 的名称。这可能包含 PipelineParams。(可选
  • snapshot_class: 要使用的快照存储类。这可能包含 PipelineParams。(可选
  • volume: V1Volume 的实例或其继承类型(例如 PipelineVolume)。这可能包含 PipelineParams。(可选
  • annotations: 要在 VolumeSnapshot 中修补的注解(Annotations)。这些可能包含 PipelineParams。(可选

注意:必须提供 pvcvolume 之一。

输出

除了资源及其名称的完整规范(ResourceOp 默认值)外,VolumeSnapshotOp 还输出绑定 VolumeSnapshotrestoreSize(作为 step.outputs["size"])。这是该快照的 PVC 克隆的最小大小。

有用信息

VolumeSnapshotOp 步骤具有 .snapshot 属性,它是一个 V1TypedLocalObjectReference。这可以作为 data_source 传递,以从该 VolumeSnapshot 创建一个 PVC。用户也可以使用 step.outputs["name"] 作为 data_source

示例

为了更好地理解,请参阅以下示例:12

后续步骤

反馈

此页面有帮助吗?


上次修改时间 2024年7月31日: 修复 Pipelines 中的断开链接 (#3807) (17e27bf)