使用 Helm 管理應用的一些 Tips

Helm tips.png

背景

Helm 是一個 Kubernetes 的包管理工具,有點類似於 Mac 上的 brewPython 中的 PIP;可以很方便的幫我們直接在 kubernetes 中安裝某個應用。

比如我們可以直接使用以下命令方便的在 k8s 集羣安裝和卸載 MySQL

helm install my-sql oci://registry-1.docker.io/bitnamicharts/mysql -n mysql

helm uninstall my-mysql -n mysql

對於一些複雜的應用使用 Helm 一鍵安裝會更簡單,以 Pulsar 舉例:
image.png
它有着多個組件,比如 bookkeeper、zookeeper、broker、proxy 等,各個組件還有着依賴關係。

如果我們手動安裝流程會比較繁瑣,而使用 Helm 時便非常簡單:

helm repo add apache https://pulsar.apache.org/charts

helm install my-pulsar apache/pulsar --version 3.0.0 -n pulsar

當然他也只是幫我們生成了部署所需要的 yaml 文件,也沒有太多黑科技。

升級

看似簡單的工具我在實際線上使用的時候也踩過一個坑,最大的一個問題就是某次升級 Pulsar 的時候生成的 yaml 文件是空的,導致整個集羣被刪除了😭。

還好最後使用 helm rollback version 將集羣恢復過來了,我們的持久化數據也還在。

而出現這個問題的原因是我執行了下面這個命令:

helm upgrade pulsar ./charts/pulsar --version 2.9.2 -f charts/pulsar/values-2.10.3.yaml -n pulsar

我們是將 pulsarHelm-Chart 源碼下載到本地,然後修改 value.yaml 的方式執行升級的。

當時執行命令的時候沒有注意,在一個沒有 values-2.10.3.yaml 文件的目錄下執行的,導致生成的 yaml 文件是空的,也就導致 k8s 在 pulsar 這個 namespace 下刪除了所有的資源。

模擬升級

爲了避免今後再次出現類似的問題,需要在升級前先模擬升級:

helm upgrade pulsar ./charts/pulsar --version 2.9.2 -f charts/pulsar/values-2.10.3.yaml -n pulsar --dry-run --debug > debug.yaml

其中關鍵的 dry-rundebug 參數可以指定模擬升級和輸出詳細的內容。

這樣我們就可以在升級前先查看 debug.yaml 裏的內容是不是符合我們的預期。

對比升級

但這樣並不能直觀的看出哪些地方是我們修改的,還好社區已經有了相關的插件,可以幫我們高亮顯示修改的地方。

helm plugin install https://github.com/databus23/helm-diff

我們先安裝好這個 helm 插件。

然後在升級前先使用該插件:

helm diff upgrade pulsar ./charts/pulsar --version 2.9.2 -f charts/pulsar/values-2.10.3.yaml -n pulsar

image.png

這樣就可以高亮顯示出修改的內容。

不用擔心這個命令會直接升級,它會自動加上 --dry-run --debug 參數。

更多命令可以參考官方文檔:
https://github.com/databus23/helm-diff

Helm 功能很強,在操作生產環境的時候必須得謹慎,都是血淋淋的教訓啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章