容器的配置管理——把应用的代码和配置区分开,是一个好的操作。我们希望能够让应用的开发者在Kubernetes里充分使用这样的模式。尽管Secrets API允许类似于验证信息和秘钥这些信息从应用当中分离,但在过去并没有为了普通的或者非secret配置而存在的对象。在Kubernetes 1.2中,我们加入了一个新的API资源,叫做ConfigMap来处理这种类型的配置数据。

ConfigMap基本原理

ConfigMap的API概念上来说是很简单的。从数据角度来看,ConfigMap的类型只是键值组。应用可以从不同角度来配置,所以关于给用户如何存储和使用配置数据,我们需要给他们一些弹性。在一个pod里面使用ConfigMap大致有三种方式:

  1. 命令行参数

  2. 环境变量

  3. 数据卷文件

这些不同的方法就需要有不同的数据建模方式来使用数据。为了尽可能提供多的弹性,我们使用ConfigMap来承载既有粗力度也有细粒度的数据。另外,由于应用会从环境变量和包含配置数据的文件读取配置信息,我们建立ConfigMap来支持这两者任何一种的读取方式。让我们来看一个例子,ConfigMap时如何获得这两种配置的。

图片描述

用过Secrets的人会发现ConfigMap用起来很简单——二者非常相似。这些API的一个主要的区别在于,Secret的数值是用byte数组形式存起来的用来支持存储像SSH keys这样的二进制。在JSON和YAML里,byte数组被序列化成base64位字符串。这意味着光看被序列化的格式,无法很容易地得出Secret的内容是什么。由于ConfigMap是为了仅仅存储配置信息而非二进制,数值被存为字符串,这样在被序列化格式也可读。

我们希望创建ConfigMap就像在它里面存数据一样有弹性。创建一个ConfigMap对象,我们已经加了一个kubectl命令,叫做“kubectl create configmap”,提供三种方式来说明健值组:

  1. 说明liberal key和value

  2. 说明一个单独的文件

  3. 说明一个给每个文件创建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: 点击


Caicloud
337 声望89 粉丝

Caicloud 作为中国最早期的容器技术云平台开拓者之一,启用新一带容器集群技术(Container Cluster),推出全新容器云计算平台和云平台运维管理系统以服务企业和开发者。核心团队成员来自美国谷歌(Google)、亚...