容器的配置管理——把应用的代码和配置区分开,是一个好的操作。我们希望能够让应用的开发者在Kubernetes里充分使用这样的模式。尽管Secrets API允许类似于验证信息和秘钥这些信息从应用当中分离,但在过去并没有为了普通的或者非secret配置而存在的对象。在Kubernetes 1.2中,我们加入了一个新的API资源,叫做ConfigMap来处理这种类型的配置数据。
ConfigMap基本原理
ConfigMap的API概念上来说是很简单的。从数据角度来看,ConfigMap的类型只是键值组。应用可以从不同角度来配置,所以关于给用户如何存储和使用配置数据,我们需要给他们一些弹性。在一个pod里面使用ConfigMap大致有三种方式:
命令行参数
环境变量
数据卷文件
这些不同的方法就需要有不同的数据建模方式来使用数据。为了尽可能提供多的弹性,我们使用ConfigMap来承载既有粗力度也有细粒度的数据。另外,由于应用会从环境变量和包含配置数据的文件读取配置信息,我们建立ConfigMap来支持这两者任何一种的读取方式。让我们来看一个例子,ConfigMap时如何获得这两种配置的。
用过Secrets的人会发现ConfigMap用起来很简单——二者非常相似。这些API的一个主要的区别在于,Secret的数值是用byte数组形式存起来的用来支持存储像SSH keys这样的二进制。在JSON和YAML里,byte数组被序列化成base64位字符串。这意味着光看被序列化的格式,无法很容易地得出Secret的内容是什么。由于ConfigMap是为了仅仅存储配置信息而非二进制,数值被存为字符串,这样在被序列化格式也可读。
我们希望创建ConfigMap就像在它里面存数据一样有弹性。创建一个ConfigMap对象,我们已经加了一个kubectl命令,叫做“kubectl create configmap”,提供三种方式来说明健值组:
说明liberal key和value
说明一个单独的文件
说明一个给每个文件创建key的路径
这些不同的选项可以在一个命令里混合、配对着或重复使用。
使用ConfigMap也很简单,对于用过Secrets的开发者来说也会感觉熟悉。下面是一个例子,如何来使用上文的ConfigMap来部署,跑一个游戏的server:
从上面这个例子可以看出,这个部署使用了从ConfigMap的两个不同机制的key。这个类似于属性一样的 ConfigMap的key被用作为部署模版中单个容器的环境变量,类似文件一样的key填充一个数据卷。
我们希望这些基本原理操作起来还算容易,也想看看大家用ConfigMap能搭出什么样的东西来。大家如果对K8S项目和配置方面的内容感兴趣,可以来参与我们的工作:
(1)我们关于Configuration的在slack上的渠道:点击
(2)K8S configuration这块的email list可以加入:点击
(3)Configuration兴趣小组,每周三太平洋时间上午10点:SIG-Config hangout: 点击
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。