抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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

2020 年 4 月 15 日

如何使用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/


2020 年 4 月 15 日 23:04393

评论

发布
暂无评论
发现更多内容

我看JAVA 之 Thread & ThreadLocal

awen

Java 源码 多线程

双指针高频面试题:「三数之和」的姐妹篇 ...

宫水三叶的刷题日记

LeetCode 数据结构与算法 面试数据结构与算法

开源镜像仓库Harbor的镜像安全

运维研习社

Docker 安全 Harbor CI/CD

万绿丛中一点红——雷斯多夫效应

Justin

心理学 交互设计 28天写作 游戏设计

Linux入门篇 —— Linux 用户与组管理详解(system-config-users && 命令行)

若尘

Linux 命令行 用户

探索图神经网络的网络架构和训练方法

华为云开发者社区

神经网络 AI 图神经网络 网络架构 GNNs

Nginx中常见header配置及修改

运维研习社

nginx Linux

如何探索自己的职业价值观,让工作更有动力

一笑

28天写作

从萧何进入咸阳丞相府到数字化时代的决策

数列科技杨德华

28天写作

我看JAVA 之 基本数据类型与封装类型

awen

Java 源码 基本数据类型

我看JAVA 之 Annotation

awen

Java 源码 jdk 注解 annotation

前端170面试题+答案学习整理(良心制作)

魔王哪吒

程序员 面试 前端 28天写作 2月春节不断更

LiteOS:SpinLock自旋锁及LockDep死锁检测

华为云开发者社区

死锁 LiteOS 自旋锁 SpinLock LockDep

第十二周 作业

简简单单

记忆这件“小事”「Day 7」

道伟

心理学 28天写作

Linux常见IO分析工具

运维研习社

多年阅读《经济学人》是一种什么体验?

wbliu85

简单脚本监控SSL证书,并到期提醒续签

运维研习社

我看JAVA 之 Class

awen

Java 源码 jdk class

观点 | 破解云管理平台在数据中心管理体系中定位模糊的困局

BoCloud博云

云计算 PaaS 服务目录 多云管理平台 数据中心管理

元宵佳节快乐哦

Nydia

优雅地停止Spring Boot应用

韩斌

(28DW-S8-Day7) 比特币原始文献略读

mtfelix

比特币 区块链 白皮书 28天写作 工作量证明

写给 Go 初学者的指北

Rayjun

go

智能客服+智能助手,这波“数字员工”的业务能力太强了!

华为云开发者社区

华为 AI 数字 智能客服 智能助手

如何学习一项技能

不在调上

我看JAVA 之 枚举类型

awen

Java 源码 jdk 枚举

《经济学人》2021年2月27日刊精彩文章导读及资源下载

wbliu85

深入解读华为云细粒度文本情感分析及其应用

华为云开发者社区

AI 华为云 情感分析 语言语义 文本情感分析

第十二周 学习总结

简简单单

Enterprise Tech30(2021)

行人23

Tech ET30

Study Go: From Zero to Hero

Study Go: From Zero to Hero

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