重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如何使用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更新使用ConfigMap的应用程序问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。