容器的配置管理——把应用的代码和配置区分开,是一个好的操作。我们希望能够让应用的开发者在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 上的渠道:https://kubernetes.slack.com/messages/sig-configuration/
(2) K8S configuration 这块的 email list 可以加入:https://groups.google.com/forum/#!forum/kubernetes-sig-config
(3) Configuration 兴趣小组,每周三太平洋时间上午 10 点:SIG-Config hangout: https://hangouts.google.com/hangouts/_/google.com/kube-sig-config
本文转载自才云 Caicloud 公众号。
原文链接:https://mp.weixin.qq.com/s/58ICtbnOlVlQHpdskJU9Qg
评论