helm3 - 升级不会强制刷新 pod
helm3 - upgrade does not refresh pod with force
我们正在使用 helm3 和 Jenkins CI/CD 管道将 Java 微服务部署到 AWS 'ECR > EKS'。然而,我们看到的是,如果我们重新 运行 Jenkins 作业来重新安装 deployment/pod,那么如果没有代码更改,pod 不会重新安装。它仍然保持旧的 运行ning pod 不变。 此处考虑的用例是, AWS Secrets Manager 配置在部署期间提取的数据库秘密已更改,因此需要通过重新触发 Jenkins 作业来重新部署服务。
方法 1:https://helm.sh/docs/helm/helm_upgrade/
我尝试按照 helm3 升级文档中的建议使用 'helm upgrade --install --force ....',但失败并在 Jenkins 日志中显示以下错误
"Error: UPGRADE FAILED: failed to replace object: Service "dbservice" is invalid: spec.clusterIP: Invalid value: "": field is immutable"
方法 2:使用早期 helm 版本的 --recreate-pods
使用 'helm upgrade --install --recreate-pods ....',我在 Jenkins 日志中低于警告
"Flag --recreate-pods has been deprecated, functionality will no longer be updated. Consult the documentation for other methods to recreate pods"
但是,pod 被重新创建。但正如我们所知 --recreate-pods 不是软重启。因此我们会有停机时间,这违反了微服务原则。
使用的头盔版本
version.BuildInfo{版本:“v3.4.0”,GitCommit:“7090a89efc8a18f3d8178bf47d2462450349a004”,GitTreeState:“clean”,GoVersion:“go1.14.10”}
问题
- 如何使用 --force with helm 3 with helm upgrade 解决上述错误?
- 如何使用已弃用的 --recreate-pods 实现软重启?
Helm 文档对此进行了很好的描述:https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
以下是我的配置方式 - 感谢@vasili-angapov 重定向到正确的文档部分。
在deployment.yaml
中,我添加了注释和rollme
kind: Deployment
spec:
template:
metadata:
annotations:
rollme: {{ randAlphaNum 5 | quote }}
根据文档,每次调用模板函数 randAlphaNum
都会生成一个唯一的随机字符串。因此随机字符串总是会改变并导致部署滚动。
文档中描述的另一种方式是针对文件的更改 SHA 值。
过去 helm 建议使用 --recreate-pods 标志作为另一个选项。此标志已标记为 deprecated in Helm 3
,以支持上面更具声明性的方法。
我们正在使用 helm3 和 Jenkins CI/CD 管道将 Java 微服务部署到 AWS 'ECR > EKS'。然而,我们看到的是,如果我们重新 运行 Jenkins 作业来重新安装 deployment/pod,那么如果没有代码更改,pod 不会重新安装。它仍然保持旧的 运行ning pod 不变。 此处考虑的用例是, AWS Secrets Manager 配置在部署期间提取的数据库秘密已更改,因此需要通过重新触发 Jenkins 作业来重新部署服务。
方法 1:https://helm.sh/docs/helm/helm_upgrade/
我尝试按照 helm3 升级文档中的建议使用 'helm upgrade --install --force ....',但失败并在 Jenkins 日志中显示以下错误
"Error: UPGRADE FAILED: failed to replace object: Service "dbservice" is invalid: spec.clusterIP: Invalid value: "": field is immutable"
方法 2:使用早期 helm 版本的 --recreate-pods
使用 'helm upgrade --install --recreate-pods ....',我在 Jenkins 日志中低于警告
"Flag --recreate-pods has been deprecated, functionality will no longer be updated. Consult the documentation for other methods to recreate pods"
但是,pod 被重新创建。但正如我们所知 --recreate-pods 不是软重启。因此我们会有停机时间,这违反了微服务原则。
使用的头盔版本
version.BuildInfo{版本:“v3.4.0”,GitCommit:“7090a89efc8a18f3d8178bf47d2462450349a004”,GitTreeState:“clean”,GoVersion:“go1.14.10”}
问题
- 如何使用 --force with helm 3 with helm upgrade 解决上述错误?
- 如何使用已弃用的 --recreate-pods 实现软重启?
Helm 文档对此进行了很好的描述:https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
以下是我的配置方式 - 感谢@vasili-angapov 重定向到正确的文档部分。
在deployment.yaml
中,我添加了注释和rollme
kind: Deployment
spec:
template:
metadata:
annotations:
rollme: {{ randAlphaNum 5 | quote }}
根据文档,每次调用模板函数 randAlphaNum
都会生成一个唯一的随机字符串。因此随机字符串总是会改变并导致部署滚动。
文档中描述的另一种方式是针对文件的更改 SHA 值。
过去 helm 建议使用 --recreate-pods 标志作为另一个选项。此标志已标记为 deprecated in Helm 3
,以支持上面更具声明性的方法。