Helm 三思而後用

2021-09-17 19:11:30 字數 2808 閱讀 9238

helm是kubernetes的包管理器。它可以大幅簡化發布過程,但有時候也會帶來問題。近日,helm已經正式提公升為頂級的cncf專案,並且在社群得到了廣泛的應用。這說明helm確實是個不錯的專案了,但我將和你分享我對於helm的一些思考。

\\ 本文將說明我不相信那些大肆宣傳的原因。

\\\\

到現在我仍然不清楚helm的價值。它沒有提供任何特別的東西。tiller帶來了什麼價值(伺服器端部分)?

\\ 許多helm圖表還很不完善,需要花些功夫才能把它們用在kubernetes集群上,例如,缺少rbac、資源限制或網路策略;這意味著你無法以二進位制方式安裝helm圖表,忘記裡面有什麼吧。

\\ 我希望有人可以向我解釋一下安全的多租戶生產環境方面,而不僅僅是使用hello world的例子吹噓它有多酷。

\\ linus torvalds說過,\"talk is cheap. show me the code.\"

\\\\

有人把tiller比作「巨型sudo伺服器」。對我來說,它只是另乙個授權層,沒有訪問控制,而且需要維護額外的tls證書。為什麼不利用kubernetes api,依賴現有的具有適當審計和rbac功能的安全模型呢?

\\\\

它就是使用values.yaml中的配置渲染和檢查go-template檔案。然後,把渲染好的kuberentes清單以及相應的元資料儲存在configmap中。

\\ 這可以使用幾個簡單的命令替代:

\\\\

據我觀察,團隊常常在每個環境中都有乙個values.yaml檔案,甚或是在使用之前從values.yaml.tmpl渲染它。

\\ 對於kubernetes secrets來說,這是沒有意義的,因為它們通常是在庫中進行加密和版本化。你既可以使用helm-secrets外掛程式來實現這一點,也可以使用set key=value來覆蓋它,但它還是增加了另外一層複雜性。

\\\\

忘了它吧。它不會奏效,特別是對於核心的kubernetes元件,如kube-dns、cni提供程式、「集群自動定標器(cluster autoscaler)」等。這些元件有不同的生命週期,helm不適合這些元件。

\\ 根據我使用helm的經驗,對於使用基礎kubernetes資源(很容易地從頭重新建立,而且沒有複雜的發布過程)的簡單部署,它可以做得很好。

\\ 遺憾的是,helm不能處理更高階和頻繁的部署,包括命名空間、rbac、網路策略、resourcequota或podsecuritypolicy。

\\ 我知道這可能會冒犯對helm著迷的人,但這是乙個可悲的事實。

\\\\

\

tiller伺服器將資訊儲存在位於kubernetes內部的configmaps中。它不需要自己的資料庫。

\

\\

遺憾的是,由於etcd的限制,configmap的限值僅有1mb

\\ 希望有人能想出個注意來擴充套件configmap儲存驅動程式,在儲存之前壓縮序列化的版本,但在我看來,這仍然不能解決實際問題。

\\\\

這是我最擔心的事情——我不能依賴它。

\\

\

error: upgrade failed: \"foo\" has no deployed releases

\\ 錯誤:公升級失敗:「foo\"沒有已部署的版本

\

\\

恕我直言,這是helm令人討厭的問題之一。

\\ 如果第一次發布失敗,那麼隨後的每次嘗試都會返回乙個錯誤,說它無法從未知狀態公升級。

\\ 下面pr通過新增--forceflag來「修復」它,但實際上是通過執行helm delete\u0026amp;helm install --replace隱藏了問題:

\\ 然而,大多數情況下,你最終會徹底清理該發布。

\\

\helm delete --purge $release_name
\\

如果serviceaccount缺失或rbac不允許建立特定的資源,helm將返回以下錯誤訊息:

\\

\error: release foo failed: timed out waiting for the condition
\\

很遺憾,helm並沒有提供出現這種情況的根本原因:

\\

\kubectl -n foo get events --sort-by=''\error creating: pods \"foo-5467744958\" is forbidden: error looking up service account foo/foo: serviceaccount \"foo\" not found
\\

有個別情況下,helm成功失敗而不做任何事情。例如,有時它不更新資源限制。

\\\\

在預設情況下,tiller不是ha的,下面的pr仍處於開啟狀態:

\\ 有一天,這可能會導致宕機……

\\\\

helm的下個版本將帶來一些值得期待的特性:\\

\\ 我非常喜歡無tiller架構的想法,但對於lua指令碼,我不確定,因為它會額外增加圖表的複雜性。

\\ 最近我發現operators有乙個大的變化,與helm圖表相比,它更像是kubernetes原生的。

\\ 我真希望社群能盡快解決這個問題,但與此同時,我更傾向於盡可能少地使用helm。

\\ 不要誤解我——我花了一些時間在kubernetes之上構建了乙個混合雲部署平台,以上這些只是我從中得出的個人觀點。

\\ 檢視英文原文:think twice before using helm

\\ 感謝張嬋對本文的審校。

Helm 三思而後用

helm是kubernetes的包管理器。它可以大幅簡化發布過程,但有時候也會帶來問題。近日,helm已經正式提公升為頂級的cncf專案,並且在社群得到了廣泛的應用。這說明helm確實是個不錯的專案了,但我將和你分享我對於helm的一些思考。本文將說明我不相信那些大肆宣傳的原因。到現在我仍然不清楚h...

Helm 三思而後用

helm是kubernetes的包管理器。它可以大幅簡化發布過程,但有時候也會帶來問題。近日,helm已經正式提公升為頂級的cncf專案,並且在社群得到了廣泛的應用。這說明helm確實是個不錯的專案了,但我將和你分享我對於helm的一些思考。本文將說明我不相信那些大肆宣傳的原因。到現在我仍然不清楚h...

Helm 三思而後用

helm是kubernetes的包管理器。它可以大幅簡化發布過程,但有時候也會帶來問題。近日,helm已經正式提公升為頂級的cncf專案,並且在社群得到了廣泛的應用。這說明helm確實是個不錯的專案了,但我將和你分享我對於helm的一些思考。本文將說明我不相信那些大肆宣傳的原因。到現在我仍然不清楚h...