在Kubernetes上去部署一些資源防嗡,現(xiàn)在通常取用helm來管理拙吉。
Helm里提供了一個hook的機制來幫助開發(fā)者控制在release的不停生命周期階段去做某些特定操作补鼻。
比如在創(chuàng)建系統(tǒng)之前需要提前配置一些ConfigMap去給后續(xù)啟動的服務提供configuration娜搂,在比如在服務啟動前生成Secret庇麦,來提供必要的證書等信息。
一下時copy的一些定義:
- 預安裝pre-install:在模板渲染后,kubernetes 創(chuàng)建任何資源之前執(zhí)行
- 安裝后post-install:在所有 kubernetes 資源安裝到集群后執(zhí)行*
- 預刪除pre-delete:在從 kubernetes 刪除任何資源之前執(zhí)行刪除請求
- 刪除后post-delete:刪除所有 release 的資源后執(zhí)行
- 升級前pre-upgrade:在模板渲染后嗤瞎,但在任何資源升級之前執(zhí)行
- 升級后post-upgrade:在所有資源升級后執(zhí)行
- 預回滾pre-rollback:在模板渲染后,在任何資源回滾之前執(zhí)行
- 回滾后post-rollback:在修改所有資源后執(zhí)行回滾請求
- crd-install:在運行其他檢查之前添加 CRD 資源听系,只能用于 chart 中其他的資源清單定義的 CRD 資源贝奇。
分享一個實際遇到的問題,
我們在已有的系統(tǒng)上新加一個功能靠胜,這里邊要用到一個secret掉瞳,所以這個secret的hook的定義就是pre-install, pre-upgrade。這個就是在install和upgrade的場景浪漠,都要創(chuàng)建這個secret陕习。
但是有個問題就是pre-upgrade導致每次upgrade都會去重新創(chuàng)建這個secret。但是這個secret實際上在系統(tǒng)穩(wěn)定后址愿,里邊的證書會被client端或者別的server端認證信任该镣。再次修改會導致新的證書不被別的系統(tǒng)認證。這樣并不能適用于實際的應用場景响谓。
后來發(fā)現(xiàn)有一個聲明"helm.sh/resource-policy": keep
损合,這個會保證這個secret保持不變,但是在查閱文檔的時候發(fā)現(xiàn)這個功能在helm2和helm3的定義有些不同娘纷。
helm v2
helm 會跳過刪除步驟只當發(fā)生helm delete的時候
https://v2.helm.sh/docs/charts_tips_and_tricks/#tell-tiller-not-to-delete-a-resource
helm v3
helm 會跳過刪除步驟嫁审,當發(fā)生helm操作時helm uninstall,helm upgrade, helm rollback。還好我們用的是helm3
https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
自己敲字赖晶,原創(chuàng)經(jīng)驗分享律适,有問題請指正,謝謝