如何强制helm rollback执行失败以测试错误处理逻辑?
让Helm Rollback强制失败的临时测试方法
以下是几种能让helm rollback执行失败的临时方案,适用于测试错误处理机制:
修改历史版本的Manifest内容
Helm将Release的历史版本存储在K8s的Secret中,你可以篡改目标回滚版本的Manifest,让K8s无法正常应用:
- 先通过
helm history <你的Release名称>获取要回滚的目标版本号 - 找到对应版本的Secret,命名格式通常为
sh.helm.release.v1.<你的Release名称>.v<版本号> - 执行
kubectl edit secret sh.helm.release.v1.<你的Release名称>.v<版本号>进入编辑界面- 找到
data.release字段,将其值用Base64解码(比如用echo <值> | base64 -d) - 修改解码后的Manifest内容:比如把Deployment的镜像改成完全不存在的
invalid/image:fake-tag,或者把API版本改成不存在的apps/v1beta3 - 将修改后的内容重新Base64编码,替换回
data.release字段,保存退出
- 找到
- 此时执行
helm rollback <你的Release名称> <版本号>,K8s会因为无法应用无效Manifest而导致回滚失败
切断Helm与K8s集群的连接
临时让Helm无法访问K8s API,直接触发回滚失败:
- 先备份当前KubeConfig:
cp ~/.kube/config ~/.kube/config.tmp - 修改KubeConfig中的集群地址,比如把
server字段改成https://invalid-k8s-endpoint:6443 - 执行
helm rollback命令时,Helm会因无法连接K8s API而直接报错退出 - 测试完成后恢复配置:
mv ~/.kube/config.tmp ~/.kube/config
删除回滚依赖的关键资源并阻止重建
提前删除回滚版本中必须存在的核心资源,并确保无法自动重建:
- 比如回滚版本依赖一个名为
my-app-pvc的PersistentVolumeClaim,执行kubectl delete pvc my-app-pvc - 确保对应的存储类无法动态创建新PV,或者手动删除关联的PV
- 执行
helm rollback时,Helm会尝试恢复该PVC,但因存储资源缺失导致回滚失败
注意:以上方法均为临时测试手段,测试完成后务必恢复环境,避免影响正常业务。
内容的提问来源于stack exchange,提问作者anini
相关产品推荐
相关产品推荐

