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
正确读取到文件
解释:
- 工作流结构 (git-file-example)
这个工作流包含两个任务:
clone-git-repo:拉取 Git 仓库并保存到 /tmp/repo 路径。
read-git-file:读取 clone-git-repo 任务拉取的 Git 仓库中的文件。 - clone-repo 任务
这个任务使用 alpine 镜像,首先安装 git,然后通过 git clone 命令将 Git 仓库克隆到容器的 /tmp/repo 路径下。
它将 /tmp/repo 目录作为 artifact 输出,名为 repo-artifact。 - print-file 任务
这个任务从 clone-repo 任务中获取名为 repo-artifact 的 artifact。
它将 Git 仓库中的文件读取并通过 cat 命令输出。你可以根据需要修改路径和文件名(例如 cat /tmp/git-files/.txt)。 - 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 中共享文件的步骤和示例。
-
创建 PVC(Persistent Volume Claim)
你可以通过 volumeClaimTemplates 来在 Argo Workflow 中动态创建 PVC。这个 PVC 会被多个任务或容器共享。 -
配置 Argo Workflow 使用 PVC
在 Argo Workflow 中,volumeClaimTemplates 用于定义和创建 PVC。然后,通过 volumeMounts 将 PVC 挂载到容器中,使得任务可以访问共享的存储。 -
示例:通过 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 目录,以便访问文件。
-
共享文件的工作原理
同一个 PVC:通过 volumeClaimTemplates 创建的 PVC 在 Workflow 中的多个任务之间共享。
不同任务共享同一个 PVC:多个任务可以通过 volumeMounts 将该 PVC 挂载到容器中,提供一个共享的文件存储区域。
ReadWriteMany 模式:accessModes 设置为 ReadWriteMany,这允许多个 Pod 同时访问和写入该 PVC(通常要求支持该模式的存储后端,如 NFS 或某些云存储)。 -
注意事项
存储后端支持:确保你使用的存储后端(如 NFS、GlusterFS、Ceph 等)支持 ReadWriteMany 模式。如果使用 ReadWriteOnce,则只能有一个 Pod 进行写入。
PVC 清理:通过 volumeClaimTemplates 创建的 PVC 会在 Workflow 完成后被自动清理。如果你希望保留 PVC,可以通过手动创建 PVC 或修改 persistentVolumeReclaimPolicy 来实现。
原文地址:https://blog.csdn.net/qq_37362891/article/details/143828999
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!