helm uninstall failed 處理方式

Helm 是一個在 Kubernetes 上部署K8s資源的工具。可以將應用程式以template方式打包,搭配變數,便於在不同環境上快速使用 Helm 命令來安裝、更新、移除和管理K8s資源(例如service , deployment , pods , configmap….等)。最近遇到一個問題是使用 helm uninstall 時,發生"failed to delete release: myapp"的錯誤,本篇就來看看怎麼解決這個問題。

首先分2個方向來處理它,第1個是目前已經 uninstall failed,我們要怎麼手動清掉它,再來是找出 uninstall failed 的原因,修正它。

(1)目前已經 uninstall failed,我們要怎麼手動清掉它

使用 helm uninstall 指令移除想要移除的 chart 發生 failed to delete release: myapp 錯誤

helm uninstall {release name} -n {namespace}

使用 helm list 指令列出所有已安裝清單以及相關資訊,這時候會發現清單上找不到這個release (uninstall失敗,但清單上卻也找不到它)

helm ls -n {namespace}

如果再重新做一次 helm install 會發生 helm cannot re-use a name that is still in use 錯誤( helm 不允許重覆的 release name ),但明明清單上看不到這個 release 了啊,預設 list 只會顯示已安裝的清單,原先以為 uninstall failed ,就表示算在已安裝清單,事實證明它的狀態已有改變,這時候可以進一步使用 helm -n {namespace} ls -a ,加上參數  a ,可以看到最完整的清單,該 release 也會現形

 helm -n {namespace} ls -a

會發現原先的這個 release 處於 uninstalling (若是 install failed 則會是 pending )狀態,也就是它卡住了,然而 helm uninstall 並沒有 --force 這樣的參數可以強制刪除,所以要排除它得手動清掉。

step 1,移除 helm install 時產生的 K8s Secrets,這樣一來這個 release 會真正在 helm list 消失,重新 install 也就不會有 helm cannot re-use a name that is still in use 錯誤

kubectl delete secrets sh.helm.release.v1.xxx.vxx

step 2,要注意的是,這樣做僅僅是把它從 helm list 中移除,但原先透過 helm 建立的K8s相關資源並不會跟著一併delete,所以接著用 kubectl delete 指令把K8s相關service deployment pod 給 delete掉

kubectl delete service myservice
kubectl delete deployment mydeployment
....

(2) 是什麼原因引起"failed to delete release: myapp"的錯誤

helm uninstall 若要輸出 uninstall 過程的詳細資訊,必須加上debug參數,如此一來便可以知道是什麼原因導致了 uninstall failed,後續就可以針對原因去修正囉,以我的例子是因為K8s權限問題造成 uninstall failed。

helm uninstall {release name} --debug

 

若本文對您有所幫助,歡迎轉貼,但請在加註【轉貼】及來源出處,並在附上本篇的超連結,感恩您的配合囉。

By No.18