Kubernetes 1.2 新功能解析:ConfigMap (上)

2020 年 3 月 12 日

Kubernetes 1.2 新功能解析:ConfigMap (上)

容器的配置管理——把应用的代码和配置区分开,是一个好的操作。我们希望能够让应用的开发者在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


2020 年 3 月 12 日 22:4967

评论

发布
暂无评论
发现更多内容

从构建小系统到架构分布式大系统,Spring Boot2的精髓全在这里了

Java成神之路

Java 程序员 架构 面试 编程语言

天啊!怎么会有人把Spring Cloud微服务架构讲得这么透彻?

Java成神之路

Java 程序员 架构 面试 编程语言

一文搞懂RESTful API

bigsai

RESTful Rest

史上最好用的Android全量版本更新库XUpdate使用指南

android UI 框架开发 xupdate

史上最实用的Android切片应用库XAOP使用指南

android aop 开源项目 框架

面试被问线程安全怎么保障,我的回答让面试官眼前一亮

996小迁

Java 学习 架构 面试 笔记

详解TCP IP网络协议栈底层原理到徒手实现

赖猫

c++ Linux 编程 程序 网络协议栈

roblox 杂记

katichar

架构师训练营第 12 周总结

邓昀垚

如何在高速发展中等一等老人 银行数字化服务显温度

CECBC区块链专委会

银行 养老服务

史上最优美的Android原生UI框架XUI使用指南

android UI 框架开发

架构词典:SLA

lidaobing

架构 SLA

default-servlet-handler不生效原因,springmvc静态资源拦截方案比较

叫练

springmvc 静态资源拦截 default-servlet-handler 资源配置不生效

网络入门模拟器:Cisco Packet Tracer

网络技术平台

我把Github上最牛b的Java教程和实战项目整合成了一个PDF文档

Java成神之路

Java 程序员 架构 面试 编程语言

京东T8Java架构师总结整理的《15w字的Java面试手册》,涵盖了大厂所有主流技术面试题及答案!

Java成神之路

Java 程序员 架构 面试 编程语言

二本毕业、两年Javacrud经验,面试阿里侥幸通过成功拿到P6级offer,分享面经!

Java成神之路

Java 程序员 架构 面试 编程语言

Java对IPv6的支持详解:支持情况、相关API、演示代码等

JackJiang

Java 网络编程 ipv6 ipv4

Flutter Plugin插件开发填坑指南

flutter 经验分享

架构师训练营第12周作业

邓昀垚

为什么说区块链完全去中心化做不到且没有意义

CECBC区块链专委会

区块链 去中心化

字节总监首发1121道LeetCode算法刷题笔记(含答案)

Crud的程序员

程序员 面试 算法 字节 面试刷题

深入理解Git的实现原理

程序员小灰

c++ git Linux 项目管理 架构师

话题讨论 | 那些年奇葩的面试经历

三号无名指

话题讨论

史上最全的开源项目创作指南

开源 经验分享

我是因为这个才选择当程序员的,那么你呢?

Java架构师迁哥

开源软件联盟PostgreSQL分会投稿指南

PostgreSQLChina

数据库 postgresql 软件 投稿

移动端技术方案设计的经验总结

张明云

android 架构 移动应用 架构师 技术方案

Gemini双子新约软件系统开发|Gemini双子新约APP开发

开發I852946OIIO

系统开发

技术博客,从零到数万访问,这两年我都做了什么

android 博客 经验分享

腾讯云区块链总经理李力:产业区块链的四大发展趋势

CECBC区块链专委会

区块链 大数据

Kubernetes 1.2 新功能解析:ConfigMap (上)-InfoQ