K8S 生态周报| Argo Workflows 新版本发布,带来众多新特性

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」

Trivy 新版本发布

本周 Trivy 相继发布了 v0.24.3 和 v0.24.4 版本。最需要关注的变更是如下两个:

  • #1791 更新了 hcl2json 的版本,以便于修正 hcl2json 在处理无效 HCL 配置时的发生的 panic;
  • #1852 修正了一个自 v0.24.3 开始引入的 bug, 如果不提供镜像的 tag,在 v0.24.3 中将会报错,现在会遵循 Docker 的相关行为,如果不提供 tag 则默认使用 latest

更多详情请参考其 ReleaseNote

Argo Workflows v3.3 正式发布

Argo Workflows 是一个 Kubernetes 上的通用 Workflow 引擎,近期发布的 v3.3 是它的一个特性版本。这里我主要列几个我所关注的变更:

  • Plugin template 允许开发者使用任何语言对 workflow 进行扩展,这是一个非常棒的特性。在之前,如果我们想在 Workflow 中执行一些通知,或者做一些报告,那么我可能需要添加一个新的步骤。这样会让整个流程变长。而且,假如我需要上一步的执行结果或输出,那么我还需要单独的处理参数传递等事情,很繁琐。但是,v3.3 中增加的这个 Plugin template 能力,就让事情变得很简单了。比如我可以使用如下配置进行消息通知:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
   generateName: plugin-example-
spec:
   entrypoint: main
   templates:
     - name: main
       plugin:
         webhook:
           text: "{{workflow.name}} finished!"

而要实现一个 Plugin template 也非常的简单,它可以用任何语言实现,只要实现一个 HTTP server,处理相关请求即可。具体内容可参考 https://argoproj.github.io/argo-workflows/plugins/

  • Workflow Hooks 可以配置表达式了。在之前的版本中,Workflow 的 Hooks 是按照任务的实际执行情况进行触发的。这个版本中增加了条件判断,比如:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
 generateName: test-hook-
spec:
 entrypoint: main
 hooks:
   exit:
     template: notice
   running:
     expression: workflow.status == "Running"
     template: notice
 templates:
   - name: main
     steps:
       - - name: step1
           template: hello
  
   - name: hello
     container:
       image: alpine:3.15
       command: [sh, -c]
       args: ["echo \"Hello\""]
  
   - name: notice
     http:
       url: http://notice.webhook/api/v1/msg
  • Hera 是一个新的 Argo Python SDK 。我之前在用 Argo SDK 的时候,都是直接通过它的 OpenAPI 自动生成 SDK 来用的,如果对 Argo 不太了解的人会觉得很难用。这个项目主要是为了能让使用更加简单,易用。期待它的发展。

  • Debug 的增强。现在可以通过 ARGO_DEBUG_PAUSE 来动态的 debug 任务了。在之前的 debug,比较原始的方法可能是去加 sleep 之类的。现在可以使用如下配置:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: pause-before-after
spec:
  entrypoint: whalesay
  templates:
    - name: whalesay
      container:
        image: argoproj/argosay:v2
        env: 
          - name: ARGO_DEBUG_PAUSE_BEFORE
            value: 'true'
          - name: ARGO_DEBUG_PAUSE_AFTER
            value: 'true'

此外,对于 SSO + RBAC 等有了更多支持。更多详情请参考其 ReleaseNote

上游进展

#108107 · kubernetes/kubernetes 我们知道 kubelet 会按照 node-status-update-frequency 的配置定时跟 API Server 同步 Node 的状态,默认是 10 秒。如果心跳持续失败,那么会导致 Node 被标记为不可用以及所有的 Pod 都将被驱逐。不过自 v1.20 开始,默认启用了 HTTP/2 健康检查, 这允许自动的进行健康检查,把一些失败的连接自动断开。本次修改是让 kubelet 在心跳失败的时候不会强制关闭活跃连接,只是关闭 idle 的连接。如果用户不希望使用此特性,可以通过增加 DISABLE_HTTP2 的环境变量来恢复成之前的行为。

题外话

最近的安全漏洞 CVE-2022-0847 对容器环境也有一定的影响, 但是注意,受影响的 Linux 内核版本为 5.8+, 并且已经在 5.16.11, 5.15.25 和 5.10.102 等版本的 Linux 内核中进行了修复。 此外 Docker Desktop for Mac/Windows 也均发布了最新版本用来修正此问题。 请注意及时更新。


欢迎订阅我的文章公众号【MoeLove】

TheMoeLove

加载评论