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