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

Helm的小小黑科技,让你简单快速地更新那些使用ConfigMap的应用程序。随时随心更改配置文件内容,而应用程序将实时根据变化而更新~nginx

文内有逐步的步骤详解,还有打包好的helm chart供你使用哟!git


Helm让Kubernetes应用程序的管理工做变得绝不费力。Helm Charts使Kubernetes应用程序的安装和升级更加容易。本文将讨论Helm的一个极妙的技巧:如何使用Helm,简单快速地更新那些使用ConfigMap的应用程序。github

更新部署函数

上图的示例就是一个部署的配置文件。咱们假设它是用于运行应用程序的。您能够在spec.template部分下指定pod模板。如今,若是您想更新应用程序,则必须今后spec.template部分更改内容。这意味着,容器镜像更改以后,部署将更新,但spec.replicas不会发生任何改变。blog

更新使用ConfigMap的部署ip

某些应用须要某些特定的配置文件和值,咱们不建议将这些配置文件或配置值打包进容器镜像中,由于若是这么作的话,那每次配置文件发生更改时,都必须从新建立容器镜像。而Kubernetes提供了一种管理配置文件/值的好方法——使用ConfigMap资源。资源

有两种方法能够将ConfigMap数据暴露给一个pod:部署

  • Env varsget

  • Volume mountskubernetes

下面咱们将重点关注暴露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

相关文章
相关标签/搜索