k8s 之ConfigMap

为了能够准确和深刻理解Kubernetes ConfigMap的功能和价值,我 们需要从Docker说起。我们知道,Docker通过将程序、依赖库、数据及 配置文件“打包固化”到一个不变的镜像文件中的做法,解决了应用的部 署的难题,但这同时带来了棘手的问题,即配置文件中的参数在运行期 如何修改的问题。我们不可能在启动Docker容器后再修改容器里的配置 文件,然后用新的配置文件重启容器里的用户主进程。为了解决这个问 题,Docker提供了两种方式:

◎ 在运行时通过容器的环境变量来传递参数;

◎ 通过Docker Volume将容器外的配置文件映射到容器内。

这两种方式都有其优势和缺点,在大多数情况下,后一种方式更合 适我们的系统,因为大多数应用通常从一个或多个配置文件中读取参 数。但这种方式也有明显的缺陷:我们必须在目标主机上先创建好对应 的配置文件,然后才能映射到容器里。

上述缺陷在分布式情况下变得更为严重,因为无论采用哪种方式, 写入(修改)多台服务器上的某个指定文件,并确保这些文件保持一 致,都是一个很难完成的目标。此外,在大多数情况下,我们都希望能

集中管理系统的配置参数,而不是管理一堆配置文件。针对上述问题, Kubernetes给出了一个很巧妙的设计实现,如下所述。

首先,把所有的配置项都当作key-value字符串,当然value可以来自 某个文本文件,比如配置项password=123456、user=root、 host=192.168.8.4用于表示连接FTP服务器的配置参数。这些配置项可以 作为Map表中的一个项,整个Map的数据可以被持久化存储在 Kubernetes的Etcd数据库中,然后提供API以方便Kubernetes相关组件或 客户应用CRUD操作这些数据,上述专门用来保存配置参数的Map就是 Kubernetes ConfigMap资源对象。

接下来,Kubernetes提供了一种内建机制,将存储在etcd中的 ConfigMap通过V olume映射的方式变成目标Pod内的配置文件,不管目 标Pod被调度到哪台服务器上,都会完成自动映射。进一步地,如果 ConfigMap中的key-value数据被修改,则映射到Pod中的“配置文件”也会 随之自动更新。于是,Kubernetes ConfigMap就成了分布式系统中最为 简单(使用方法简单,但背后实现比较复杂)且对应用无侵入的配置中 心。ConfigMap配置集中化的一种简单方案如图1.16所示。

小结

上述这些组件是Kubernetes系统的核心组件,它们共同构成了 Kubernetes系统的框架和计算模型。通过对它们进行灵活组合,用户就 可以快速、方便地对容器集群进行配置、创建和管理。除了本章所介绍 的核心组件,在Kubernetes系统中还有许多辅助配置的资源对象,例如 LimitRange、ResourceQuota。另外,一些系统内部使用的对象Binding、 Event等请参考Kubernetes的API文档。

原文来源于k8s权威指南

原文地址:https://www.cnblogs.com/sseban/p/13080787.html