9.ConfigMap

Pod的配置管理

应用部署的一个最佳实践是将应用所需的配置信息与程序进行分离,这样可以使得应用程度被更好的复用。通过不同的配置也能实现更灵活的功能。将应用打包为容器镜像后,可以通过环境变量或者外挂文件的方式在创建容器时进行配置注入。Kubernetes从v1.2版本开始提供了一种统一的应用配置管理方案-ConfigMap。

ConfigMap概述

ConfigMap供容器使用的典型用法如下:

  • 生成为容器内的环境变量
  • 设置容器启动命令的启动参数(需设置为环境变量)
  • 以volume的形式挂载为容器内部的文件或者目录

ConfigMap以一个或多个key:value的形式保存再Kubernetes系统*应用使用。可以通过yaml配置文件或者直接使用kubectl create configmap命令行的方式来创建ConfigMap

部署ConfigMap

https://www.jianshu.com/p/9d55b4a4eeab
https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653588666&idx=1&sn=4ba1f98aa25e9d344e82ec9aa23ad8c9&chksm=8d3084a3ba470db53b7e98af74930ca9c20c1e506efe7301b13cef61d8c42bade19ed08af312&scene=21#wechat_redirect

configmap:热更新研究

使用yaml文件方式,更新使用apply,或者edit,更新完后10s左右pod生效
经典案例 https://www.2cto.com/kf/201906/810695.html
更新 ConfigMap 后:

使用该 ConfigMap 挂载的 Env 不会同步更新
使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新
ENV 是在容器启动的时候注入的,启动之后 kubernetes 就不会再改变环境变量的值,且同一个 namespace 中的 pod 的环境变量是不断累加的,参考 Kubernetes中的服务发现与docker容器间的环境变量传递源码探究。为了更新容器中使用 ConfigMap 挂载的配置,可以通过滚动更新 pod 的方式来强制重新挂载 ConfigMap,也可以在更新了 ConfigMap 后,先将副本数设置为 0,然后再扩容。
configmap中的nginx文件更新后需要配置文件更改了,但是服务不会reload,因此要么手动登陆pod去更新,或者使用patch方式【最后一行】,或者过滤出对应容器,并重启容器
https://jimmysong.io/kubernetes-handbook/concepts/configmap-hot-update.html

上一篇:k8s数据持久化之Secret和configMap


下一篇:k8sConfigMap资源