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

devtools/2024/11/18 8:45:14/

文章目录

  • 拉取 Git 仓库并读取文件
  • 使用 Kubernetes Persistent Volumes(通过 volumeClaimTemplates)以及任务之间如何共享数据

拉取 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-exampletemplates:- name: git-file-exampledag:tasks:- name: clone-git-repotemplate: clone-repo- name: read-git-filetemplate: print-filedepends: "clone-git-repo"arguments:artifacts:- name: git-filesfrom: "{{tasks.clone-git-repo.outputs.artifacts.repo-artifact}}"- name: clone-repocontainer:image: alpine:latestcommand: [sh, -c]args:- |apk add --no-cache gitgit clone https://gitee.com/qfxcoffee/shield.git /tmp/repooutputs:artifacts:- name: repo-artifactpath: /tmp/repo- name: print-fileinputs:artifacts:- name: git-filespath: /tmp/git-filescontainer:image: alpine:latestcommand: [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: mainvolumeClaimTemplates:- metadata:name: shared-workdir  # 共享的 PVC 名称spec:accessModes: ["ReadWriteMany"]  # 多个 Pod 可以同时读取和写入resources:requests:storage: 1Gitemplates:- name: maindag:tasks:- name: git-clonetemplate: git-clone- name: process-filestemplate: process-filesdependencies: [git-clone]  # 依赖 git-clone 任务- name: git-clonecontainer:image: alpinecommand: [sh, -c]args:- |echo 'Cloning repository...'apk add --no-cache gitgit clone https://gitee.com/qfxcoffee/shield.git /srcls -la /srccp -r /src/. /mnt/  # 将文件复制到挂载的 PVC 中volumeMounts:- name: shared-workdir  # 挂载 PVCmountPath: /mnt  # 挂载到容器的 /mnt 目录- name: process-filescontainer:image: alpinecommand: [sh, -c]args:- |echo 'Processing files...'ls -la /mnt  # 查看挂载的目录内容# 可以在这里对文件进行处理,例如文本替换、文件处理等volumeMounts:- name: shared-workdir  # 挂载相同的 PVCmountPath: /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 来实现。


http://www.ppmy.cn/devtools/134916.html

相关文章

OpenCV自学系列(2)——核心操作(core operations)

OpenCV官网指导教程第二期,对应官网的 core operation。 主要包括三大类: 1、图像基本操作 2、图像的算术操作 3、(代码)表现的测量和提高 主要使用到的方法如下: cv2.cvtColor() cv2.split() cv2.merge() cv2.copy…

用paramiko与SSH交互

# 导入paramiko库用于SSH连接,以及sys库用于处理命令行参数 import paramiko import sys# 定义一个函数send_command,用于发送命令到SSH服务器并打印输出结果 def send_command(ssh_client, cmd):# 使用exec_command方法执行命令,并获取输入、…

前馈神经网络 (Feedforward Neural Network, FNN)

代码功能 网络定义: 使用 torch.nn 构建了一个简单的前馈神经网络。 隐藏层使用 ReLU 激活函数,输出层使用 Sigmoid 函数(适用于二分类问题)。 数据生成: 使用经典的 XOR 问题作为数据集。 数据点为二维输入&#xff…

苍穹外卖学习-day11

1. Apac 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 官网地址:Apache ECharts 常见的统计图形有:柱状图,条形…

创建vue3项目步骤

脚手架创建项目: pnpm create vue Cd 项目名称安装依赖:Pnpm iPnpm Lint:修复所有文件风格 ,不然eslint语法警告报错要双引号Pnpm dev启动项目 拦截错误代码提交到git仓库:提交前做代码检查 pnpm dlx husky-in…

【汇编语言】数据处理的两个基本问题 —— 汇编语言中的数据奥秘:数据位置与寻址方式总结

文章目录 前言1. 引言1.1 两个基本问题1.2 两个描述性符号 2. bx、si、di和bp2.1 通过"[...]"来寻址,只有这四种寄存器2.2 四种寄存器寻址时的组合方式2.3 使用bp时,默认段地址为ss 3.机器指令处理的数据在什么地方?4. 汇编语言中数…

【SQL】mysql常用命令

为方便查询,特整理MySQL常用命令。 约定:$后为Shell环境命令,>后为MySQL命令。 1 常用命令 第一步,连接数据库。 $ mysql -u root -p # 进入MySQL bin目录后执行,回车后输入密码连接。# 常用参数&…

任意文件下载漏洞

1.漏洞简介 任意文件下载漏洞是指攻击者能够通过操控请求参数,下载服务器上未经授权的文件。 攻击者可以利用该漏洞访问敏感文件,如配置文件、日志文件等,甚至可以下载包含恶意代码的文件。 这里再导入一个基础: 你要在网站下…