如何使用Helm更新使用ConfigMap的应用程序
Helm让Kubernetes应用程序的管理工作变得毫不费力。Helm Charts使Kubernetes应用程序的安装和升级更加容易。本文将讨论Helm的一个极妙的技巧:如何使用Helm,简单快速地更新那些使用ConfigMap的应用程序。
上图的示例就是一个部署的配置文件。我们假设它是用于运行应用程序的。您可以在spec.template部分下指定pod模板。现在,如果您想更新应用程序,则必须从此spec.template部分更改内容。这意味着,容器镜像更改之后,部署将更新,但spec.replicas不会发生任何改变。
某些应用需要某些特定的配置文件和值,我们不建议将这些配置文件或配置值打包进容器镜像中,因为如果这么做的话,那每次配置文件发生更改时,都必须重新创建容器镜像。而Kubernetes提供了一种管理配置文件/值的好方法——使用ConfigMap资源。
有两种方法可以将ConfigMap数据暴露给一个pod:
下面我们将重点关注暴露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
原文地址:http://blog.51cto.com/12462495/2150168
时间: 2024-10-30 20:26:45
如何使用Helm更新使用ConfigMap的应用程序的相关文章
一.更新内容 1.修改*Server类,以及承继关系.2.增加IRunDevice的IServerProvider接口继承.3.修复增加COM设备驱动可能造成的异常.4.修复网络发送数据可能引发的异常.5.完善协议驱动器. 6.修改协议驱动接口.7.修改协议命令接口.8.修复协议命令,抽象基类情况下的异常BUG. 9.增加协议接口GetPackageLength,数据交互更灵活.10.修复一些BUG.11.优化代码. 二.GetPackageLength接口的使用 这个接口主要的使用场景是:当协
前几天,小编在公众号发布了一篇关于"附近的小程序"新功能的文章,那时候微信还没有正式发出更新通知,昨天晚上11点,微信的更新通知就来了,这次不仅带来了"附近的小程序"的新功能,还有小程序后台管理功能升级. "附近的小程序"中的分类项目 这几天有打开"附近的小程序"的用户,应该会发现,在这界面中多出了分类项目,只有"全部"和"餐饮美食"两个选项. "全部"不用说,&qu
使用ClickOnce部署winform应用程序.无论是安装或者自动更新都极为方便,但有时候一些疑难杂症也令人头疼 1.注意每次部署完成之后 setup.exe无需覆盖,只需要在Application.File中将最新的发布程序包拷进去,把*soft.application文件覆盖掉即可 2.部署与应用程序标识不一致问题,如下图的发布选项千万别乱动,否则客户会全部升级错误, 准备正式发布出去的时候这里一定要想清楚,千万别发布完了才想到改,那时候就晚了,这是血的教训啊! 3. 无法安装此应用程序,
Kubernetes的ConfigMap说明 这篇博文,我们来说一说,关于在kubernetes的pod中自定义配置的问题. 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等.而我们的一个应用程序从写第一行代码开始,要经历开发环境.测试环境.预发布环境只到最终的线上环境.而每一个环境都要定义其独立的各种配置.如果我们不能很好的管理这些配置文件,你的运维工作将顿时变的无比的繁琐.为此业内的一些大公司专门开发了自己的一套配置管理中
作用理解 核心用途就是容器和配置的分离解耦. 如启用一个mysql容器,mysql容器重要的文件有两部分,一部分为存储数据文件,一部分为配置文件my.cnf,存储数据可以用持久存储实现和容器的分离解耦,配置文件也能够实现和容器的分离解耦,也就是说mysql容器能够直接读取并使用预先配置好的配置文件(而不是使用容器中默认自带的配置文件).这就是configMap的功能. ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件.ConfigMap 跟 secret
Secret secret也是k8s中的一个资源对象,主要用于保存轻量的敏感信息,比如数据库用户名和密码,令牌,认证密钥等. 我们可以将这类敏感信息放在secret对象中,如果把它们暴露到镜像或者pod spec中稍显不妥,将其放在secret对象中可以更好地控制及使用,并降低意外暴露的风险.Secret可以使用volume或者环境变量的方式来使用这些轻量级数据. Secret有三种类型: Service Account:用来访问kubernetes API,由k8s自动创建,并且会自动挂载到p
如果您要构建 Node.js 应用程序,那么可以使用 IBM® Bluemix® Live Sync 快速更新 Bluemix 上的应用程序实例,并像在桌面上进行操作一样进行开发,而无需重新部署.执行更改后,您可以立即在运行中的 Bluemix 应用程序中看到该更改.Bluemix Live Sync 可从命令行以及在 Web IDE 中运行.您可以使用 Bluemix Live Sync 来调试以 Node.js 编写的应用程序. Bluemix Live Sync 由三个功能部件组成 桌面同
存储管理子系统(DFSMS) 存储管理也是系统的一项基本服务. 系统存储管理子系统(Storage Management System,SMS)定义了系统中的各种输入/输出设备,并控制这些设备的操作:同时,它还提供文件系统的基本功能,使用户可以方便.快速地访问数据.系统的各种程序及数据都保存在硬盘上,如果希望执行某些程序,必须用到存储管理的服务,因此,SMS一般先于其他子系统启动,以提供基本的存储管理服务. 存储管理软件组件(Data Facility Storage Management Su
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6676121.html 序言 Android 用甜点作为它们系统版本的代号的命名方法开始于 Andoird 1.5 发布的时候.作为每个版本代表的甜点按照26个英文字母顺序的原则进行命名:纸杯蛋糕,甜甜圈,松饼,冻酸奶,姜饼,蜂巢... Build.VERSION_CODESGoogle官网地址 https://developer.android.google.cn/reference/android/o