在Kubernetes上去部署一些资源,现在通常取用helm来管理。
Helm里提供了一个hook的机制来帮助开发者控制在release的不停生命周期阶段去做某些特定操作。
比如在创建系统之前需要提前配置一些ConfigMap去给后续启动的服务提供configuration,在比如在服务启动前生成Secret,来提供必要的证书等信息。
一下时copy的一些定义:
- 预安装pre-install:在模板渲染后,kubernetes 创建任何资源之前执行
- 安装后post-install:在所有 kubernetes 资源安装到集群后执行*
- 预删除pre-delete:在从 kubernetes 删除任何资源之前执行删除请求
- 删除后post-delete:删除所有 release 的资源后执行
- 升级前pre-upgrade:在模板渲染后,但在任何资源升级之前执行
- 升级后post-upgrade:在所有资源升级后执行
- 预回滚pre-rollback:在模板渲染后,在任何资源回滚之前执行
- 回滚后post-rollback:在修改所有资源后执行回滚请求
- crd-install:在运行其他检查之前添加 CRD 资源,只能用于 chart 中其他的资源清单定义的 CRD 资源。
分享一个实际遇到的问题,
我们在已有的系统上新加一个功能,这里边要用到一个secret,所以这个secret的hook的定义就是pre-install, pre-upgrade。这个就是在install和upgrade的场景,都要创建这个secret。
但是有个问题就是pre-upgrade导致每次upgrade都会去重新创建这个secret。但是这个secret实际上在系统稳定后,里边的证书会被client端或者别的server端认证信任。再次修改会导致新的证书不被别的系统认证。这样并不能适用于实际的应用场景。
后来发现有一个声明"helm.sh/resource-policy": keep
,这个会保证这个secret保持不变,但是在查阅文档的时候发现这个功能在helm2和helm3的定义有些不同。
helm v2
helm 会跳过删除步骤只当发生helm delete的时候
https://v2.helm.sh/docs/charts_tips_and_tricks/#tell-tiller-not-to-delete-a-resource
helm v3
helm 会跳过删除步骤,当发生helm操作时helm uninstall,helm upgrade, helm rollback。还好我们用的是helm3
https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
自己敲字,原创经验分享,有问题请指正,谢谢