當前位置:
首頁 > 最新 > 如何使用Helm更新使用ConfigMap的應用程序

如何使用Helm更新使用ConfigMap的應用程序

Helm讓Kubernetes應用程序的管理工作變得毫不費力。Helm Charts使Kubernetes應用程序的安裝和升級更加容易。本文將討論Helm的一個極妙的技巧:如何使用Helm,簡單快速地更新那些使用ConfigMap的應用程序。

更新部署

上圖的示例就是一個部署的配置文件。我們假設它是用於運行應用程序的。您可以在spec.template部分下指定pod模板。現在,如果您想更新應用程序,則必須從此spec.template部分更改內容。這意味著,容器鏡像更改之後,部署將更新,但spec.replicas不會發生任何改變。

更新使用ConfigMap的部署

某些應用需要某些特定的配置文件和值,我們不建議將這些配置文件或配置值打包進容器鏡像中,因為如果這麼做的話,那每次配置文件發生更改時,都必須重新創建容器鏡像。而Kubernetes提供了一種管理配置文件/值的好方法——使用ConfigMap資源。

有兩種方法可以將ConfigMap數據暴露給一個pod:

Env vars

Volume mounts

下面我們將重點關注暴露ConfigMap的卷掛載方式。

我創建了一個非常簡單的chart作為例子來討論這個問題。在這個chart中,我有一個如下的ConfigMap的配置文件:

如您所見,ConfigMap的名稱是nginx-cm,一個名為default.conf的文件正在讀取其數據。這個default.conf是一個nginx配置文件。

現在我想為我的應用程序使用這個ConfigMap nginx-cm。所以我將通過我的應用程序的部署的配置文件中的Volume Mounts來暴露它。

如上面的示例,我們需要在【volumes】部分下添加ConfigMap,並為其指定一個唯一的名稱(config-volume,如示例中所示)。然後,我們需要將這個卷添加到【containers】部分下的卷掛載中。volumeMounts.mountPath欄位是容器中可供容器使用的配置文件的確切位置。

因此,使用這些配置文件,我們就可以運行使用ConfigMap提供的nginx配置文件內容的應用程序了。

下面我們需要更改nginx配置文件。更改此配置文件後,不要忘了還需要相應地更新ConfigMap,不然的話,那些使用此ConfigMap的應用程序將不會使用更新後的內容。

我們當然也可以使用kubectl update命令來更新ConfigMap。按理說,同樣的,接下來我們應該更新部署。那麼,kubectl update命令可以用來更新部署嗎?

在我嘗試這麼做的時候,我收到了下面這條消息:

這是因為即使在更新ConfigMap資源之後,部署的spec.template部分也沒有更改。即使ConfigMap的數據部分發生了變化,但這並沒有引起部署spec.template的任何變化。對此的一種解決方法,是刪除這一部署所管理的所有pod,之後部署就會創建新的pod,這些新pod使用的就是更新後的configMap了。

但我不太喜歡這種方法,因為你必須手動刪除所有的pod,正因為如此我才開始尋找更好的解決方案,也就是本文所說的Helm的這個小技巧。

https://github.com/kubernetes/helm/blob/master/docs/charts_tips_and_tricks.md#automatically-roll-deployments-when-configmaps-or-secrets-change

正如你在注釋中看到的那樣, 你可以提供configmap文件的路徑,並將其傳遞給sha256 sum函數。這樣一來,每次configmap文件發生更改時,注釋部分也會得到相應的更新,進而更新部署的spec.template部分。我發現這一招非常妙,因為如此一來,你就可以經常更改您的配置文件內容了。因為這個訣竅,Helm能夠確保你的應用程序將一直及時地反映這些變化。

我已經做好了一個Helm chart放在GitHub上,你可以自行下載使用,體驗一下我在本文中分享的這個竅門~ 相信你一定也會發現它對你的應用程序非常有用:

https://github.com/mrajashree/helm-cm1

英文原文:

https://rancher.com/blog/2018/helm-tips-and-tricks-updating-app-with-configmap/


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 RancherLabs 的精彩文章:

多Kubernetes集群角色管理

TAG:RancherLabs |