NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
想象一个场景,在 kubernetes 集群中有的时候我们需要传递一些配置给应用,比如:数据库地址、用户名、密码等,我们可以有哪些办法呢? * 在打包镜像时将配置信息直接写入配置文件中:使用这种方式特别死板,并且配置数据不能共享,坏处显而易见 * 在配置文件中通过 env 环境变量传入:这种方式如果要修改 env,就必须修改 YAML 文件,并重启所有 container,而且配置数据也不能共享 * 在应用启动时通过数据库获取配置数据:这种方式具有一定可行性,配置信息可以多应用共享,但是自己实现起来比较麻烦 所以,kubernetes 提供了统一的应用配置管理方案 ConfigMap 方便我们将配置信息与应用程序分离。 #### ConfigMap 概述 ConfigMap 在容器中使用的场景通常有 3 种,分别如下所示: * 生成为容器中的环境变量 * 设置容器启动命令的启动参数(需设置为环境变量) * 以 Volume 的形式挂载为容器内部的文件或目录 #### 使用 ConfigMap 的限制条件 * ConfigMap 必须在 Pod 之前创建 * ConfigMap 受 Namespace 限制,只有处于相同 Namespace 中的 Pod 才可以引用它 * kubelet 只支持可以被 API Server 管理的 Pod 使用 ConfigMap,kubelet 在本 Node 上通过 --manifest-url 或 --config 自动创建的静态 Pod 无法引用 ConfigMap * 在 Pod 对 ConfigMap 进行挂载(volume)操作时,在容器内部只能挂载为“目录”,不能挂载为“文件”。在挂载到容器内部后,在目录下将包含 ConfigMap 定义的每个 item,如果在该目录下原来还有其它文件,则容器内的该目录将被挂载的 ConfigMap 覆盖。如果想要保存原来的其它文件,可以将 ConfigMap 挂载到容器内部的临时目录,再通过启动脚本将配置文件复制(cp)或链接(link)到应用所在的实际目录下