Argo Workflows v3.3发布,支持插件、调试模式、多租户,修改默认执行器,引入新SDK_python argo sdk-程序员宅基地

技术标签: kubernetes  python  java  argo  Kubernetes  


摘要: Argo Workflows v3.3 发布,支持插件、调试模式、修改默认执行器,多租户支持、引入 Python SDK

  • 新特性:插件模板允许任何开发人员使用任何语言编写扩展到他们的工作流

  • 新特性:使用工作流钩子基于条件执行模板

  • 新的 SDK: Hera 是一个新的用于指定 Argo 工作流的 Python SDK

  • 新特性:使用ARGO_DEBUG_PAUSE将任务置于调试模式

  • 增强:Pod 名称包括模板名称

  • 增强:多租户支持SSO+RBAC

  • 增强:将默认执行器更改为Emissary

  • 增强:Java 和 Python 客户端库加入了核心的 Argo 工作流代码库

插件模板

目前,工作流中的每个任务要么运行一个 pod(例如“容器”或“脚本”),要么发出一个 HTTP 请求。插件模板允许您编写自己的 HTTP 服务器,插入您的任何工作流来完成任务。

插件的一大好处是,你不需要学习 Golang,也不需要等待 Argo 团队添加功能。你可以自己用 Python 来做,然后立即部署它,这样你就可以在工作流程中使用它了。

插件有很多用例:

  • 发送 Slack 或电子邮件信息
  • 更新 Tello board
  • 启动 Spark EMR 或 Tekton job
  • 与 Airflow 或任何类似的系统集成
  • 向报表系统发送数据

插件被实现为 HTTP 服务器。下面是一个用 Python 编写的发送 Slack 消息的程序:

import json
import os
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.request import urlopen, Request


class Plugin(BaseHTTPRequestHandler):

    def args(self):
        return json.loads(self.rfile.read(int(self.headers.get('Content-Length'))))

    def reply(self, reply):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(json.dumps(reply).encode("UTF-8"))

    def unsupported(self):
        self.send_response(404)
        self.end_headers()

    def do_POST(self):
        if self.path == '/api/v1/template.execute':
            args = self.args()
            if 'slack' in args['template'].get('plugin', {
    }):
                x = urlopen(
                    Request(os.getenv('URL'),
                            data=json.dumps({
    'text': args['template']['plugin']['slack']['text']}).encode()))
                if x.status != 200:
                    raise Exception("not 200")
                self.reply({
    'node': {
    'phase': 'Succeeded', 'message': 'Slack message sent'}})
            else:
                self.reply({
    })
        else:
            self.unsupported()


if __name__ == '__main__':
    httpd = HTTPServer(('', 7522), Plugin)
    httpd.serve_forever()

一旦你写了一个插件,就可以把插件打包成一个 configmap。用kubectl apply安装它,会自动加载插件:

argo executor-plugin build ./slack-plugin
kubectl apply ./slack-plugin/slack-executor-plugin-configmap.yaml

最后,你可以使用新插件运行工作流:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
   generateName: slack-example-
spec:
   entrypoint: main
   templates:
     - name: main
       plugin:
         slack:
           text: "{
    {workflow.name}} finished!"

插件将改变用户使用 Argo 工作流构建平台的方式。了解更多关于插件模板在文档

Workflow Hooks

工作流钩子在满足配置的表达式时执行模板。工作流钩子就像带有条件的退出处理程序。钩子可以在工作流级和模板级配置。

钩子可以用来根据工作流状态的改变或步骤/任务状态的改变来配置通知,就像下面的例子:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
 generateName: lifecycle-hook-
spec:
 entrypoint: main
 hooks:
   exit:
     template: http
   running:
     expression: workflow.status == "Running"
     template: http
 templates:
   - name: main
     steps:
       - - name: step1
           template: heads

   - name: heads
     container:
       image: alpine:3.6
       command: \[sh, -c\]
       args: \["echo \\"it was heads\\""\]

   - name: http
     http:
       url: [http://dummy.restapiexample.com/api/v1/employees](http://dummy.restapiexample.com/api/v1/employees)

Hera: Argo 工作流的一个新的 Python SDK

Hera (Hera -workflow)是一个新的高效的 SDK,用于在 Python 中指定 Argo 工作流。Hera 的目标是为 Python 开发人员提供一种更简单的方式来构建和提交实验工作流,特别是机器学习。

Hera 是围绕 Argo 工作流的两个核心概念构建的:

  • Task:保存用于远程执行的 Python 函数的对象
  • 工作流:任务的集合

下面是一个使用 Hera 的 DAG 工作流示例:

from hera.task import Task
from hera.workflow import Workflow
from hera.workflow_service import WorkflowService
def say(message: str):
    """
    This can be anything as long as the Docker image satisfies the dependencies. You can import anything Python
    that is in your container e.g torch, tensorflow, scipy, biopython, etc - just provide an image to the task!
    """
    print(message)
ws = WorkflowService('my-argo-domain.com', 'my-argo-server-token')
w = Workflow('diamond', ws)
a = Task('A', say, [{
    'message': 'This is task A!'}])
b = Task('B', say, [{
    'message': 'This is task B!'}])
c = Task('C', say, [{
    'message': 'This is task C!'}])
d = Task('D', say, [{
    'message': 'This is task D!'}])
a.next(b).next(d)  # a >> b >> d
a.next(c).next(d)  # a >> c >> dw.add_tasks(a, b, c, d)
w.submit()

调试暂停

许多用户都要求改进调试功能。到目前为止,还不能将任务设置为调试模式。现在有了ARGO_DEBUG_PAUSE, Argo 将暂停你的任务执行器,这样你就可以调试它。指定一些环境变量,选择是否在任务之前或之后暂停,然后将kubctl exec放入容器以调试它。

Pod 名称包括模板名称

在 v3.2 中,pod 名称是通过接受工作流名称并根据任务 ID 添加散列后缀来生成的。在 v3.3 中,pod 名称还包含模板的名称。这使得在使用kubectl get pod时,更容易看到哪个 pod 是哪个任务:

Before (v1):

NAME                     READY STATUS AGE
coinflip-jjzd8–1241984900 0/2 Completed 0
coinflip-jjzd8–2544588297 0/2 Completed 0

After (v2):

NAME                               READY STATUS RESTARTS
coinflip-lg6w4-flip-coin-1886328558 0/2 Completed 0
coinflip-lg6w4-heads-661049787      0/2 Completed 0

这个特性是可选择的。增加POD_NAMES=v2标志启动控制器.

SSO+RBAC Namespace Delegation

在 v3.2 中,必须在argo Namespace 中设置 SSO+RBAC 特性。这对于小团队来说很有效。但是,在每个团队都有自己的 Namespace 的多租户系统中,这可能会变得笨拙。

在 v3.3 中,我们支持在user Namespace 中设置 RBAC。这个更改允许每个团队设置自己的 RBAC,当有许多团队时,可以更容易地管理 RBAC。

将默认执行器更改为 Emissary

Kubernetes 对 Docker 的支持正在消失见之前的帖子。我们将用Argo Emissary 执行器取代它。

Emissary 执行器提供几个优势:

  • 比现有的执行器更安全
  • 比现有的执行器更快,甚至比 PNS(Process Namespace Sharing)执行器更快
  • 支持 ContainerSet 模板(允许您运行更快的步骤和降低成本)

支持新的“调试暂停”功能(帮助调试工作流程中的容器)

支持 Java 和 Python 客户端库

您可能已经使用了社区维护的客户端库之一,将 Argo 工作流集成到您的应用程序中。然而,保持这些最新的总是一个挑战。

现在,我们在核心代码库中包含了 Java 和 Python 客户端库,这样它们就可以与 Argo 工作流同步进行维护和发布。我们的目标是确保它们始终是最新的和功能齐全的。

在 Github 这里找到这些Argo sdk

升级到 v3.3

查看GitHub 上最新的 Argo 工作流版本

在升级到 3.3 版本之前,请确保在这里查看所有更改

翻译自

What’s new in Argo Workflows v3.3

关注

本文首发于微信公众号【我的小碗汤】,扫左侧码关注,了解更多咨询,更有免费资源供您学习

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ll837448792/article/details/122781647

智能推荐

反射全解_object 反射-程序员宅基地

文章浏览阅读2.3w次,点赞1.4k次,收藏861次。反射的概念反射的引入:Object obj = new Student();若程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,但程序又需要调用该对象运行类型的方法:1.若编译和运行类型都知道,使用 instanceof判断后,强转。2.编译时根本无法预知该对象属于什么类,程序只能依靠运行时信息来发现对象的真实信息,这时就必须使用反射了。3.要是想得到对象..._object 反射

sass 自定义函数_sass定义函数-程序员宅基地

文章浏览阅读2.6k次。sass 自定义函数jcLee95 的 CSDN 博客CSDN 主页:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343邮箱 :[email protected]本文地址:https://blog.csdn.net/qq_28550263/article/details/123350343相关文章推荐:Sass 预定义函数总结sass 混入(mixin)目 录1. Sass函数的概念2. Sass函数 与 Sass混_sass定义函数

兰州大学计算机科学考研科目,2019兰州大学计算机考研初试科目、参考书目、报录比汇总...-程序员宅基地

文章浏览阅读1.3k次。本次推荐院校是位于甘肃的兰州大学,作为老牌知名高校,兰州大学近年来因地理位置导致发展不如预期,优质生源匮乏,其中计算机专业报考人数较少,虽然复试线已经低于同一等级的高校,但上线人数依然严重不足。然而仅凭兰州大学的金字招牌,就值得各位同学报考兰州大学。本文由新祥旭徐老师系统介绍兰州大学计算机考研详情,主要有以下几个板块:学院介绍,专业情况介绍,2019录取情况分析,考研科目介绍,专业课参考书目及备考...

NR 5G 网络整体架构及功能总结_5gc下,ng -enb和gnb间为x2接口-程序员宅基地

文章浏览阅读2.9w次,点赞17次,收藏201次。5G网络的整体架构5G的网络架构主要包括5G接入网和5G核心网,其中NG-RAN代表5G 接入网,5GC代表5G核心网。5G接入网(NG-RAN)5G接入网主要包含一下两个节点:  1、gNB: 为5G网络用户提供NR的用户平面和控制平面协议和功能  2、ng-eNB:为4G网络用户提供NR的用户平面和控制平面协议和功能 其中gNB和gNB之间,gNB和ng-eNB之间,ng-eNB..._5gc下,ng -enb和gnb间为x2接口

c语言三个传教士和三个野人,有三个传教士和三个野人过河-Read.DOC-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏5次。有三个传教士和三个野人过河-Read传教士和野人渡河问题刘宪国 050422023野人过河问题描述如下: 有三个传教士和三个野人过河,只有一条能装下两个人的船,在河的任何一方或者船上,如果野人的人数大于传教士的人数,那么传教士就会有危险.一、算法分析先来看看问题的初始状态和目标状态,假设分为甲岸和乙岸:初始状态:甲岸,3野人,3传教士; 乙岸,0野人,0传教士; 船停在甲岸,船上有0个人;..._有三个传教士m和三个野人c过河

logback root level logger level 日志级别覆盖?继承?-程序员宅基地

文章浏览阅读7.2k次。1. logback-spring.xml 配置 1 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 2 ... 3 </appender> 4 5 <appender name="ALL" class="ch.qos.logback..._logback root level

随便推点

一种常见的OkHttp错误调用方式_java okhttpclient 报错找不到-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏3次。最近在工作中开发安卓项目。碰到了一个棘手的问题:代码在虚拟机中使用正常,但是在真机上一直出现网络问题。表现为网络联通性有规律的周期性,周期为2小时。从图表中可以轻易看出,在2小时里连续的40分钟内,网络是正常的,但在其他时间段是异常,异常反馈是读取数据超时。一开始以为是网络环境的问题,但经过排查,发现问题并没有这么简单。_java okhttpclient 报错找不到

马克飞象上下标写法_马克飞象图片语法-程序员宅基地

文章浏览阅读259次。1. 上标方法1,markdown自带语法:2N 的写法为:2^N^方法2,html语法:2N 的写法为:2<sup>N</sup>方法3,markdown公式表示法2N2^N2N表达式写法:$$2^N$$。注意:这种方式会强制要求换行,如果写公式用这种方式比较好。2. 下标方法1,markdown自带语法:2N 的写法为:2~N~方法2,html语法:2N 的写法为:2<sub>N</sub>..._马克飞象图片语法

8.1 图像腐蚀-程序员宅基地

文章浏览阅读6.5k次,点赞12次,收藏24次。一、什么是图像腐蚀? 比如左边的图像,白色是前景,黑色是背景。如果对当前的图像进行腐蚀,就会得到右边的图像。 简单点就是边被腐蚀掉了。 下面是官网上给的例子: 二、腐蚀的原理 腐蚀一般针对的是二值图像,也就是只有0和1两个。0就是黑色,1就是白色。我们所谓的腐蚀是指针对他的前景色,就是像素点的值为1的那些像素点。 我们进行腐蚀操作,有两个..._图像腐蚀

因子分析法之因子旋转-程序员宅基地

文章浏览阅读2.7w次,点赞9次,收藏72次。因子分析法之因子旋转1.因子旋转及其意义建立因子分析模型的目的不仅是要找出公因子以及对变量进行分组,更重要的是要知道每个公因子的意义,以便对实际问题做出科学分析。因子旋转即对因子载荷矩阵A,用一个正交矩阵T右乘A实现对因子载荷矩阵的旋转(一次正交变换即对应坐标系的一次旋转),旋转后因子载荷矩阵结构简化,更容易对公因子进行解释。结构简化就是重新分配每个因子所解释方差的比例,使每个变量仅在一个公因子上有较大的载荷,在其他公因子上的载荷较小,即是使因子载荷矩阵每行或者每列元素的平方值向0与1两极分化。2._因子旋转

【Python】输入一行字符(20 个以上字符),分别统计出其中英文字母、空格、数字和其它字 符的个数。_1.用户从键盘输入一行字符(不少于20个,至少包括数字、英文字母、空格及其他特殊符-程序员宅基地

文章浏览阅读5.3k次,点赞14次,收藏15次。输入一行字符(20 个以上字符),分别统计出其中英文字母、空格、数字和其它字 符的个数。运行结果如下:请输入一个字符串:45se r,d5d~ s58*英文字母=6 个,空格=4 个,数字=5 个,其他=3 个s=input('请输入一个字符串:\n')letters=0space=0digit=0others=0for c in s: if c.isalpha():..._1.用户从键盘输入一行字符(不少于20个,至少包括数字、英文字母、空格及其他特殊符

使用DBeaver连接达梦数据库,接上文安装达梦数据库_达梦连接工具有哪些-程序员宅基地

文章浏览阅读2k次。修改Idea配置文件找到idea的安装目录,在bin文件夹下找到以下两个文件,用记事本或者其他软件打开:idea.exe.vmoptionsidea64.exe.vmoptions_达梦连接工具有哪些

推荐文章

热门文章

相关标签