我有一个CircleCI工作流,在与主分支的任何合并中,它都会构建代码,创建Docker映像,并运行helm upgrade
来更新k8s集群的最新构建。
我面临着helm的问题,主分支经常发生两次合并,CircleCI试图同时运行两次helm升级,helm开始表现得很奇怪。
许多时间释放都处于pending-install
状态,我不得不手动回滚。即使在回滚之后,也留下了许多孤立的k8s对象,我需要手动删除它们。
我阅读了helm代码,发现有一个互斥锁可以阻止并行释放。我怀疑,由于helm互斥锁不维护显式锁(远程锁(,并且我的CircleCI正在两个不同的会话(两个不同shell(中运行helm升级,因此helm不知道正在进行的发布并导致了这个问题。
我不知道如何处理这个用例,或者是否有人在过去遇到过这个问题,helm将孤立对象(主要是cronjobs
和ingress
(抛在了后面?
我能想到的一个解决方法是在运行helm升级之前通过检查helm状态来停止并行构建,这不是空闲的。
K8S版本-1.21
Helm版本-3.7.2
您描述的问题主要与Helm有关。您正确地注意到,可以找到变通方法:
我能想到的一个解决方法是在运行helm升级之前通过检查helm状态来停止并行构建,这不是空闲的。
总的来说,这个功能在过去有很多错误,很可能它再次无法正常工作。
这个错误通常也可能是由重复的env变量键引起的,解决方案在这个问题和这个github问题中有描述。
另请参阅关于并行helm安装和使用--concurrency=N
标志的主题。
说到这个:
我的成功率是70:30。这很奇怪,很难理解。
试着检查日志,看看可能出了什么问题。也许你的资源(例如内存(用完了?我试图重现这个问题,但对我来说,解决方案是删除重复的kyes。您也可以报告github上的错误。