遇到的问题
在使用helm升级的时候,升级了一半,ssh连接意外断开,导致helm状态没有更新(一直处于pending-upgrade状态)。
实际上,helm已经升级完成,pod都已经ready了,但是状态一直没有更新。
处理方式
首先确认pod已经能够正常对外提供服务,为了不影响已经对外提供服务的pod,需要手工修改helm状态。
目前helm的状态保存在secret中,命名方式为sh.helm.release.v1.<release-name>.vxxx
,其中<release-name>
为helm release的名称,vxxx
为版本号。当前卡住的release的版本号可以通过helm history <release-name>
查看。
首先,通过secret,获取helm发布状态文本:
kubectl get secret sh.helm.release.v1.<release-name>.vxxx -o jsonpath='{.data.release}' | base64 -d
这里的文本内容是经过base64编码的json压缩字符串,首先解码,然后修改状态:
kubectl get secret sh.helm.release.v1.<release-name>.vxxx -o jsonpath='{.data.release}' | base64 -d | base64 -d | gunzip > release.json
修改release.json文件,将info.status
字段修改为deployed
,然后重新编码,更新secret:
cat release.json | gzip | base64 | base64
最后,更新secret:
kubectl patch secret sh.helm.release.v1.<release-name>.vxxx -p '{"data":{"release":"<base64编码后的内容>"}}'
最后,通过helm status <release-name>
查看状态,应该已经变为deployed
。