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

news2024/11/19 9:11:29

文章目录

  • 拉取 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-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 来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AWTK VSCode 实时预览插件端口冲突的解决办法

AWTK XML UI 预览插件:在 vscode 中实时预览 AWTK XML UI 文件,在 Copilot 的帮助下,可以大幅提高界面的开发效率。 主要特色: 真实的 UI 效果。可以设置主题,方便查看在不同主题下界面的效果。可以设置语言&#xf…

x-cmd pkg | helix - 用 Rust 打造的文本编辑器,内置 LSP 和语法高亮,兼容 Vim 用户习惯

目录 简介快速上手安装使用 功能特点竞品和相关项目进一步阅读 简介 helix 是用 Rust 开发的文本编辑器,以 Modal editing(模态编辑)为核心特性,类似于 Vim。它结合了经典的 Vim 模式编辑和现代开发工具的特性(如 LSP…

资源管理功能拆解——如何高效配置和管理项目资源?

在任何一个项目中,资源的合理配置和高效管理是决定项目成败的关键因素。无论是人力、物资还是时间,每一个资源的使用都直接关系到项目的执行效果和企业的成本控制。因此,如何在项目管理中实现资源的高效配置和监控,成为了企业管理…

SpringCloud OpenFeign负载均衡远程调用 跨服务调用 连接池优化

介绍 Spring Cloud OpenFeign 是 Spring Cloud 的一部分,提供了一种声明式的 HTTP 客户端方式来简化服务间的通信。通过 OpenFeign,开发者可以像调用本地方法一样,轻松地调用远程服务,而不需要手动处理 HTTP 请求、响应和连接等底…

Android Studio开发学习(五)———LinearLayout(线性布局)

一、布局 认识了解一下Android中的布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局), FrameLayout(帧布局),AbsoluteLayout(绝对布局),GridLayout(网格布局) 等。 二、…

Android WMS概览

WMS(WindowManagerService)是 Android 系统的核心服务,负责管理应用和系统的窗口,包括窗口的创建、销毁、布局、层级管理、输入事件分发以及动画显示等。它通过协调 InputManager 和 SurfaceFlinger 实现触摸事件处理和窗口渲染&a…

C++ 【string】使用及函数

详解 C std::string 是 C 标准库中的一个类,它用于处理字符串数据。它是容器适配器(container adapter),基于 basic_stringbuf 和 basic_ostream 类,提供了高效、安全的字符串操作。 以下是 std::string 的一些关键特…

基于的图的异常检测算法OddBall

OddBall异常检测算法出自2010年的论文《OddBall: Spotting Anomalies in Weighted Graphs》,它是一个在加权图(weighted graph)上检测异常点的算法,基本思路为计算每一个点的一度邻域特征,然后在整个图上用这些特征拟合出一个函数&#xff0c…

最新版xAI LLM 模型Grok-2 上线

xAI!Grok-2 最新版开启公测!”。这是我注册成功的截图,使用国内的邮箱就可以注册使用了! Grok API公测与免费体验: Grok API开启公测,提供免费体验128k上下文支持,。Grok-Beta与马斯克: 马斯克庆祝特朗普当…

华为云stack网络服务流量走向

1.同VPC同子网同主机内ECS间互访流量走向 一句话通过主机内部br-int通信 2.同VPC同子网跨主机ECS间互访流量走向 3.同VPC不同子网同主机ECS间互访流量走向 去往本机的mac地址都记录在br-tun流表里 4.同VPC不同子网跨主机ECS间互访流量走向 5.对等连接流量走向(跨V…

Vue Canvas实现区域拉框选择

canvas.vue组件 <template><div class"all" ref"divideBox"><!-- 显示图片&#xff0c;如果 imgUrl 存在则显示 --><img id"img" v-if"imgUrl" :src"imgUrl" oncontextmenu"return false" …

实例教程:BBDB为AHRS算法开发提供完善的支撑环境(上)

1. 概述 本教程将结合程序代码及CSS控制站工程&#xff0c;讲述如何基于PH47代码框架的BBDB固件版本&#xff0c;为开发自己的AHRS姿态解算算法提供完善支撑环境&#xff0c;以及数据分析手段。 BBDB固件已内置了一套姿态解算算法。对于需要进行AHRS算法开发研究的开发者&…

Linux操作系统 ----- (5.系统管理)

目录 1.总结 2.本章学习目标 3.图形界面管理 3.1.X-Window图形界面概述 3.2.X-Window的结构 3.3.X-Window的特点 3.4.UKUI图形环境 3.5.桌面 3.5.1.桌面图标 3.5.2.计算机属性 3.5.3.桌面快捷菜单 3.6.任务栏 3.6.1.开始菜单 3.6.2.显示任务视图 3.6.3.文件管理器…

hive复杂数据类型Array Map Struct 炸裂函数explode

1、Array的使用 create table tableName( ...... colName array<基本类型> ...... ) 说明&#xff1a;下标从0开始&#xff0c;越界不报错&#xff0c;以null代替 arr1.txtzhangsan 78,89,92,96 lisi 67,75,83,94 王五 23,12 新建表&#xff1a; create table arr1(n…

基于Python实现的HDR图像处理算法

此代码会读取两张图片&#xff0c;一张用于保留高光细节&#xff0c;另一张用于保留暗部细节。两张图片按指定比例进行像素融合&#xff0c;最终生成一张合成的HDR图片。 import cv2 import numpy as npdef hdr_fusion(highlight_img_path, shadow_img_path, output_path, alp…

网络协议(4)拥塞控制

之前已经说过了tcp也是会考虑网络的情况的&#xff0c;也就是当网络出现问题的时候tcp不会再对报文进行重传。当所有的用户在网络不好的时候都不会对丢失的报文进行重传。这样就会防止网络瘫痪。 这样的机制也就是tcp会进行拥塞控制。 拥塞控制 所谓的慢启动看下面这张图就能…

解决 IDEA 修改代码重启不生效的问题

前言 在使用 IntelliJ IDEA 进行 Java 项目开发时&#xff0c;有时会遇到一个令人头疼的问题&#xff1a;修改了代码后&#xff0c;重启服务却发现更改没有生效。通常情况下&#xff0c;解决这个问题需要通过 Maven 的 clean 和 compile 命令来强制重新编译&#xff0c;但这显…

git使用及上线流程(仅为我工作中常用)

推荐软件或者直接终端 ⚠️注意&#xff1a;在确保远程和本地分支都可使用的情况下 git常见使用命令 ls---查看所有目录 pwd---本机密码 cd 目录名---进入目录 Touch ---创建文本文件 git status---查看状态 git branch---查看分支 git pull---拉取远程最新代码 git checkou…

12.C++内存管理1(C/C++内存分布,C语言动态内存管理)

⭐本篇重点&#xff1a;C/C内存分布&#xff0c;C语言动态内存管理 ⭐本篇代码&#xff1a;c学习/04.c-动态内存管理 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) 目录 一. C/C内存分布&#xff08;C/C内存地址空间&#xff09; 二. C语言动态内存管理 2.1 …

游戏引擎学习第15天

视频参考:https://www.bilibili.com/video/BV1mbUBY7E24 关于游戏中文件输入输出&#xff08;IO&#xff09;操作的讨论。主要分为两类&#xff1a; 只读资产的加载 这部分主要涉及游戏中用于展示和运行的只读资源&#xff0c;例如音乐、音效、美术资源&#xff08;如 3D 模型和…