自学内容网 自学内容网

Argo workflow 拉取git 并使用pvc共享文件

拉取 Git 仓库并读取文件

在 Argo Workflows 中,如果你想要一个任务拉取 Git 仓库中的文件,另一个任务读取该文件,你可以按照以下方式构建工作流:

第一个任务(拉取 Git 仓库):这个任务将使用 git 命令克隆指定的 Git 仓库。
第二个任务(读取 Git 文件):这个任务会读取第一个任务拉取的 Git 仓库中的文件。
我们将使用 Argo Workflows 中的 Artifact 机制来传递 Git 仓库中的文件,gitclone.yaml


apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: git-file-processing-
spec:
  entrypoint: git-file-example
  templates:
  - name: git-file-example
    dag:
      tasks:
      - name: clone-git-repo
        template: clone-repo
      - name: read-git-file
        template: print-file
        depends: "clone-git-repo"
        arguments:
          artifacts:
            - name: git-files
              from: "{{tasks.clone-git-repo.outputs.artifacts.repo-artifact}}"

  - name: clone-repo
    container:
      image: alpine:latest
      command: [sh, -c]
      args:
        - |
          apk add --no-cache git
          git clone https://gitee.com/qfxcoffee/shield.git /tmp/repo
    outputs:
      artifacts:
        - name: repo-artifact
          path: /tmp/repo

  - name: print-file
    inputs:
      artifacts:
        - name: git-files
          path: /tmp/git-files
    container:
      image: alpine:latest
      command: [sh, -c]
      args:
        - |
          cat /tmp/git-files/pom.xml


正确读取到文件

在这里插入图片描述

解释:

  1. 工作流结构 (git-file-example)
    这个工作流包含两个任务:
    clone-git-repo:拉取 Git 仓库并保存到 /tmp/repo 路径。
    read-git-file:读取 clone-git-repo 任务拉取的 Git 仓库中的文件。
  2. clone-repo 任务
    这个任务使用 alpine 镜像,首先安装 git,然后通过 git clone 命令将 Git 仓库克隆到容器的 /tmp/repo 路径下。
    它将 /tmp/repo 目录作为 artifact 输出,名为 repo-artifact。
  3. print-file 任务
    这个任务从 clone-repo 任务中获取名为 repo-artifact 的 artifact。
    它将 Git 仓库中的文件读取并通过 cat 命令输出。你可以根据需要修改路径和文件名(例如 cat /tmp/git-files/.txt)。
  4. depends 和 arguments
    read-git-file 任务依赖于 clone-git-repo 任务,因此设置了 depends: “clone-git-repo”。
    通过 arguments 传递 artifact,from: “{{tasks.clone-git-repo.outputs.artifacts.repo-artifact}}” 表示 read-git-file 任务将从 clone-git-repo 任务的输出中获取文件。

使用 Kubernetes Persistent Volumes(通过 volumeClaimTemplates)以及任务之间如何共享数据

在 Argo Workflows 中,使用 Persistent Volume Claim (PVC) 来共享文件是一个常见的场景。PVC 允许不同的任务或 Pod 之间共享持久存储,因此可以实现文件共享。下面是如何通过 PVC 在 Argo Workflows 中共享文件的步骤和示例。

  1. 创建 PVC(Persistent Volume Claim)
    你可以通过 volumeClaimTemplates 来在 Argo Workflow 中动态创建 PVC。这个 PVC 会被多个任务或容器共享。

  2. 配置 Argo Workflow 使用 PVC
    在 Argo Workflow 中,volumeClaimTemplates 用于定义和创建 PVC。然后,通过 volumeMounts 将 PVC 挂载到容器中,使得任务可以访问共享的存储。

  3. 示例:通过 PVC 共享文件
    假设我们有两个任务:一个任务负责将文件克隆到 PVC 中,另一个任务从 PVC 中读取这些文件并处理。创建文件volume.yaml

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: pvs-demo-
spec:
  entrypoint: main
  volumeClaimTemplates:
    - metadata:
        name: shared-workdir  # 共享的 PVC 名称
      spec:
        accessModes: ["ReadWriteMany"]  # 多个 Pod 可以同时读取和写入
        resources:
          requests:
            storage: 1Gi
  templates:
    - name: main
      dag:
        tasks:
          - name: git-clone
            template: git-clone
          - name: process-files
            template: process-files
            dependencies: [git-clone]  # 依赖 git-clone 任务

    - name: git-clone
      container:
        image: alpine
        command: [sh, -c]
        args:
          - |
            echo 'Cloning repository...'
            apk add --no-cache git
            git clone https://gitee.com/qfxcoffee/shield.git /src
            ls -la /src
            cp -r /src/. /mnt/  # 将文件复制到挂载的 PVC 中
        volumeMounts:
          - name: shared-workdir  # 挂载 PVC
            mountPath: /mnt  # 挂载到容器的 /mnt 目录

    - name: process-files
      container:
        image: alpine
        command: [sh, -c]
        args:
          - |
            echo 'Processing files...'
            ls -la /mnt  # 查看挂载的目录内容
            # 可以在这里对文件进行处理,例如文本替换、文件处理等
        volumeMounts:
          - name: shared-workdir  # 挂载相同的 PVC
            mountPath: /mnt  # 挂载到容器的 /mnt 目录


解释:
volumeClaimTemplates:

这里定义了一个名为 shared-workdir 的 PVC,使用了 accessModes: [“ReadWriteMany”],这意味着多个 Pod 可以同时读写该 PVC。
它会在 Workflow 运行时自动创建 PVC。
PVC 的存储请求为 1Gi,表示需要 1GB 的存储空间。
git-clone 任务:

该任务使用 git clone 命令从 Git 仓库克隆文件,并将其复制到挂载的 PVC (/mnt) 中。

使用 volumeMounts 将 PVC 挂载到容器的 /mnt 目录,这样文件就可以存储在 PVC 中并供其他任务访问。

process-files 任务:

该任务使用 ls 查看挂载到 /mnt 目录中的文件,并可以对其进行进一步的处理(例如分析或转换文件内容)。
同样通过 volumeMounts 将 PVC 挂载到 /mnt 目录,以便访问文件。

  1. 共享文件的工作原理
    同一个 PVC:通过 volumeClaimTemplates 创建的 PVC 在 Workflow 中的多个任务之间共享。
    不同任务共享同一个 PVC:多个任务可以通过 volumeMounts 将该 PVC 挂载到容器中,提供一个共享的文件存储区域。
    ReadWriteMany 模式:accessModes 设置为 ReadWriteMany,这允许多个 Pod 同时访问和写入该 PVC(通常要求支持该模式的存储后端,如 NFS 或某些云存储)。

  2. 注意事项
    存储后端支持:确保你使用的存储后端(如 NFS、GlusterFS、Ceph 等)支持 ReadWriteMany 模式。如果使用 ReadWriteOnce,则只能有一个 Pod 进行写入。
    PVC 清理:通过 volumeClaimTemplates 创建的 PVC 会在 Workflow 完成后被自动清理。如果你希望保留 PVC,可以通过手动创建 PVC 或修改 persistentVolumeReclaimPolicy 来实现。


原文地址:https://blog.csdn.net/qq_37362891/article/details/143828999

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!