重新触发时,helm 回滚无法识别失败的部署

sri*_*iev 6 kubernetes microservices kubernetes-helm kubernetes-deployment kubernetes-pod

我有一个像下面这样的场景,有两个版本 - Release-A 和 Release-B。

目前,我在 Release-A 上,需要将所有微服务升级到 Release-B。我尝试使用以下命令执行微服务的掌舵升级 - “mymicroservice”以交付 Release-B。

helm --kubeconfig /home/config upgrade --namespace testing --install --wait mymicroservice mymicroservice-release-b.tgz
Run Code Online (Sandbox Code Playgroud)

由于某些问题,部署对象无法安装并进入错误状态。

观察到这一点,我执行以下回滚命令。

helm --kubeconfig /home/config --namespace testing rollback mymicroservice
Run Code Online (Sandbox Code Playgroud)

由于某些问题(可能是间歇性系统故障或用户行为),Release-A 的部署对象也进入了 failed/Crashloopbackoff 状态。虽然这会导致 helm 回滚成功,但部署对象仍然没有进入运行状态。

一旦我进行了必要的更正,我将重试回滚。由于部署规范已经使用 helm 进行了更新,因此即使处于失败状态,它也不会尝试重新安装部署对象。

Helm 是否有任何选项可以处理上述情况?

尝试使用--force标志,但在使用 --force 标志方法时,还有其他与微服务中的服务对象替换相关的错误。

Rollback "mymicroservice -monitoring" failed: failed to replace object: Service "mymicroservice-monitoring" is invalid: spec.clusterIP: Invalid value: "": field is immutable
Run Code Online (Sandbox Code Playgroud)

小智 5

也许这可以帮助你:

  • 始终使用 helm update --install命令。我看到你在使用所以你做得很好。如果图表不存在,则会安装图表;如果图表存在,则会升级图表。
  • 如果在 helm 升级期间操作失败,请使用 --atomic 标志回滚更改。
  • 标志 --cleanup-on-fail:它允许 Helm 在回滚期间删除新创建的资源,以防回滚失败。

来自文档:

--atomic:如果设置,升级过程将回滚在升级失败时所做的更改。如果使用 --atomic,则将自动设置 --wait 标志

--cleanup-on-fail 允许在升级失败时删除在此升级中创建的新资源

在某些情况下,升级会创建上一个版本中不存在的资源。设置此标志允许 Helm 在发布失败时删除这些新资源。默认是不删除它们(Helm 倾向于避免默认破坏,并给予用户对此的明确控制)

https://helm.sh/docs/helm/helm_upgrade/