在管道中操作Kubernetes资源

使用SDK动态操作Kubernetes资源作为管道步骤的概述

本页面描述了如何在管道中通过单个 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: The accessModes of the PVC (defaults to RWM). 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。 可以是stringV1TypedLocalObjectReference,并且可以包含PipelineParam。 (Alpha特性, 可选

输出

此外,关于资源的整体规格及其名称 (ResourceOp 默认值),VolumeOp 还会输出绑定的持久卷的存储大小(作为 step.outputs["size"])。 然而,如果存储提供者具有 WaitForFirstConsumer 绑定模式,则此值可能为空。 如果此值不为空,则始终大于或等于请求的大小。

有用的信息

  1. VolumeOp 步骤具有一个 .volume 属性,该属性是一个 PipelineVolume 引用所创建的 PVC。有关 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
)

管道体积

轻松引用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 实例。

示例

为了更好地理解,请参考以下示例: 1, 2, 3, 4


卷快照

请求创建卷快照实例简便快速。

卷快照操作

一个专门用于创建卷快照的ResourceOp。

Link 到相应的Python库。

注意: 您应该检查您的Kubernetes集群管理员是否在您的集群中启用了卷快照。

参数

以下参数是对ResourceOp参数的扩展。 如果传递了k8s_resource,则以下内容均不可提供。

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

注意: 需要提供 pvcvolume 之一。

输出

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

有用的信息

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

示例

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

下一步

反馈

此页面有帮助吗?