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

文章目录

  • 拉取 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.rhkb.cn/news/475760.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】线程池的解析

引言 在Android当中根据用途分为主线程与子线程,主线程当中主要处理与界面相关的操作,子线程主要进行耗时操作。除了Thread本身以外,在Android当中还有很多扮演者线程的角色,比如AsyncTask( 底层为线程池,…

【Linux网络编程】简单的UDP套接字

目录 一,socket编程的相关说明 1-1,sockaddr结构体 1-2,Socket API 二,基于Udp协议的简单通信 三,UDP套接字的应用 3-1,实现英译汉字典 一,socket编程的相关说明 Socket编程是一种网络通信…

【java基础】微服务篇

参考黑马八股视频。 目录 Spring Cloud 5大组件 注册中心 负载均衡 限流 CAP和BASE 分布式事务解决方案 分布式服务的接口幂等性 分布式任务调度 Spring Cloud 5大组件 注册中心 Eureka的作用 健康监控 负载均衡 限流 漏桶固定速率,令牌桶不限速 CAP和BA…

java八股-SpringCloud微服务-Eureka理论

文章目录 SpringCloud架构Eureka流程Nacos和Eureka的区别是?CAP定理Ribbon负载均衡策略自定义负载均衡策略如何实现?本章小结 SpringCloud架构 Eureka流程 服务提供者向Eureka注册服务信息服务消费者向注册中心拉取服务信息服务消费者使用负载均衡算法挑…

thinkphp6安装php-mqtt/client,并实现实时消息收发写入日志

thinkphp6安装php-mqtt/client,并实现实时消息收发写入日志 系统:centos7 第一步:宝塔面板安装php环境8.0; 第二步:宝塔自带安装composer; 第三步:下载thinkphp6 create project composer require topthink/think…

.NET9 - 新功能体验(一)

被微软形容为“迄今为止最高效、最现代、最安全、最智能、性能最高的.NET版本”——.NET 9已经发布有一周了,今天想和大家一起体验一下新功能。 此次.NET 9在性能、安全性和功能等方面进行了大量改进,包含了数千项的修改,今天主要和大家一起体…

K8S资源限制之ResourceQuota

ResourceQuota介绍 在K8S中,大部分资源都可以指定到一个名称空间下,因此可以对一个名称空间的计算资源,存储资源,资源数量等维度做资源限制。 如限制pod数量、svc数量,控制器数量,限制PVC请求的存储量 注…

永磁同步电机无速度算法--滑模观测器(PLL)

一、原理介绍 在永磁同步电机滑模观测器控制中,转子的位置和转速信息与反动电势密切相关。滑模观测器控制基本设计思路是:利用永磁同步电机的电压、电流信息,通过永磁同步电机数学模型,估算出电机在两相静止坐标系中的反电动势信…

NIO 与传统 IO:深入理解与应用场景

在 Java 编程中,IO(输入/输出)操作是不可或缺的一部分。Java 提供了两种主要的 IO 机制:传统的阻塞式 IO(Blocking IO)和非阻塞式 IO(Non-blocking IO),后者通常被称为 N…

TensorFlow 2.0 windows11 GPU 训练环境配置

前言 在一切开始之前,请确保你的cmd命令行和powershell命令行可以正常打开。如果不能,建议重装系统。我不确定这是否会影响你最终的结果,毕竟windows的坑太多了。 安装顺序:visual studio -> cuda -> cudnn -> python…

使⽤MATLAB进⾏⽬标检测

目录 数据准备定义模型并训练用测试集评估性能推理过程⼀⾏代码查看⽹络结构⼀⾏代码转onnx结语 ⼈⽣苦短,我⽤MATLAB。 Pytorch在深度学习领域占据了半壁江⼭,最主要的原因是⽣态完善,⽽且api直观易⽤。但谁能想到现在MATLAB⽤起来⽐Pytorch…

【Java】实战:多数元素

一、题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出&#x…

JAVA:探索 PDF 文字提取的技术指南

1、简述 随着信息化的发展,PDF 文档成为了信息传播的重要媒介。在许多应用场景下,如数据迁移、内容分析和信息检索,我们需要从 PDF 文件中提取文字内容。JAVA提供了多种库来处理 PDF 文件,其中 PDFBox 和 iText 是最常用的两个。…

vue3+vant实现弹幕循环播放~

1、效果图 <!-- 弹幕 --> <div style"height: 88px"><van-barragev-model"list"duration"5000":rows"rows":gap"gap":loop"loop"style"--move-distance: -345px" ><div class&quo…

南京邮电大学算法设计-二叉树先序遍历算法动态演示

二叉树先序遍历算法动态演示 一、课题内容和要求 (1)实验目的&#xff1a; 本实验通过手动输入二叉树结点信息&#xff0c;构建相应的二叉树&#xff0c;并通过图形化界面动态演示先序遍历算法的过程。通过本次实验&#xff0c;我可以深入理解二叉树的数据结构、先序遍历算法…

大数据挖掘期末复习

大数据挖掘 数据挖掘 数据挖掘定义 技术层面&#xff1a; 数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中&#xff0c;提取隐含在其中、人们事先不知道的、但又潜在有用的信息的过程。 数据准备环节 数据选择 质量分析 数据预处理 数据仓库 …

【Anomaly Detection论文阅读记录】Resnet网络与WideResNet网络

Resnet网络 网络结构&#xff1a;(层数计算不包括max pool、average pool、softmax等操作) 层数计算&#xff08;以Resnet-18为例子&#xff09;&#xff1a; conv1conv2_xconv3_xconv4_xconv5_xfc1(22)(22)(22)(22)118 WideResNet网络 WideResNet提出了一种新的体系结构&#…

基于YOLOv8深度学习的汽车车身车损检测系统研究与实现(PyQt5界面+数据集+训练代码)

本文研究并实现了一种基于YOLOV8深度学习模型的汽车车身车损检测系统&#xff0c;旨在解决传统车损检测中效率低、精度不高的问题。该系统利用YOLOV8的目标检测能力&#xff0c;在单张图像上实现了车身损坏区域的精确识别和分类&#xff0c;尤其是在车身凹痕、车身裂纹和车身划…

【前端学习笔记】Javascript学习二(运算符、数组、函数)

一、运算符 运算符&#xff08;operator&#xff09;也被称为操作符&#xff0c;是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有&#xff1a; 算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符 算数运算符&#xff1a; 、-…

python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具

python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具 文章目录 python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具项目背景技术栈用户界面核心功能实现结果展示完整代码总结 在现代软件开发中&#xff0c;测试接口的有效性与响应情况变得尤为重要。本文将指导…