“「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 也均发布了最新版本用来修正此问题。请注意及时更新。
参考资料
[1]k8s生态: https://zhuanlan.zhihu.com/container