Helm并行执行导致发布处于挂起安装状态



我有一个CircleCI工作流,在与主分支的任何合并中,它都会构建代码,创建Docker映像,并运行helm upgrade来更新k8s集群的最新构建。

我面临着helm的问题,主分支经常发生两次合并,CircleCI试图同时运行两次helm升级,helm开始表现得很奇怪。

许多时间释放都处于pending-install状态,我不得不手动回滚。即使在回滚之后,也留下了许多孤立的k8s对象,我需要手动删除它们。

我阅读了helm代码,发现有一个互斥锁可以阻止并行释放。我怀疑,由于helm互斥锁不维护显式锁(远程锁(,并且我的CircleCI正在两个不同的会话(两个不同shell(中运行helm升级,因此helm不知道正在进行的发布并导致了这个问题。

我不知道如何处理这个用例,或者是否有人在过去遇到过这个问题,helm将孤立对象(主要是cronjobsingress(抛在了后面?

我能想到的一个解决方法是在运行helm升级之前通过检查helm状态来停止并行构建,这不是空闲的。

K8S版本-1.21

Helm版本-3.7.2

您描述的问题主要与Helm有关。您正确地注意到,可以找到变通方法:

我能想到的一个解决方法是在运行helm升级之前通过检查helm状态来停止并行构建,这不是空闲的。

总的来说,这个功能在过去有很多错误,很可能它再次无法正常工作。

这个错误通常也可能是由重复的env变量键引起的,解决方案在这个问题和这个github问题中有描述。

另请参阅关于并行helm安装和使用--concurrency=N标志的主题。

说到这个:

我的成功率是70:30。这很奇怪,很难理解。

试着检查日志,看看可能出了什么问题。也许你的资源(例如内存(用完了?我试图重现这个问题,但对我来说,解决方案是删除重复的kyes。您也可以报告github上的错误。

最新更新