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

Stella981
• 阅读 594

使用ConfigMap

很多应用程序的配置需要通过配置文件,命令行参数和环境变量的组合配置来完成。这些配置应该从image内容中解耦,以此来保持容器化应用程序的便携性。ConfigMap API资源提供了将配置数据注入容器的方式,同时保持容器是不知道Kubernetes的。ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。

ConfigMap总览

ConfigMap API资源保持键-值对配置数据,这个数据可以在pods里使用,或者被用来为像controller一样的系统组件存储配置数据。虽然ConfigMap跟Secrets类似,但是configmap可以更方便的处理不包含敏感信息的字符串

让我们来看看完成的例子吧:

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

data 一栏包括了配置数据。就如同你们看到的那样,ConfigMap可以被用来保存单个属性,也可以用来保存一个配置文件。

配置数据可以通过很多种方式在Pods里被使用。ConfigMaps可以被用来:

1、     设置环境变量的值

2、     在容器里设置命令行参数

3、     在数据卷里面创建config文件

用户和系统组件两者都可以在ConfigMap里面存储配置数据。

创建ConfigMaps

你可以使用 kubectl create configmap 命令轻松从文字值、文件或者目录来创建ConfigMaps。

让我们来看一看创建ConfigMap的很多不同的方法吧:

1、从文件创建

现在我们已经有一个包含一些文件的目录,它已经包含了我们想要设置ConfigMaps的数据:

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

kubectl create configmap命令可以被用来创建ConfigMap来存储这个目录里面每个文件的内容:

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

--from-file指向目录的时候,每个在目录底下的所有文件会被用在ConfigMap里面创建一个键值对,键的名字就是文件名,值就是文件的内容。

让我们来看一下这个命令创建的ConfigMap:

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

你可以看到在映射里面的两个是从kubectl指定的目录中创建的文件名。这些键的内容可能会很大,所以在kubectl describe的输出中,你只能够看到键的名字和他们的大小。

如果我们想要看到键的值的话,我们可以仅仅只是kubectl get资源:

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

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

2、从文件创建

我们也可以传递给--from-file一个特定文件,并且多次传递到kubectl。以下命令跟上文例子中的结果是一样的:

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

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

我们也可以用 --from-file 通过传递 key=value为个别文件设置键来使用:

--from-file=game-special-key=docs/user-guide/configmap/kubectl/game.properties

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

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

3、从字面值创建

为ConfigMap使用kubectl create configmap提供字面值。--from-literal选项采用了 语法,这个语法允许字面值被直接运用到命令行:

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

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

在pods里面使用ConfigMap

使用案例:在环境变量中使用ConfigMap

ConfigMap可以被用来填入环境变量。举个例子,思考以下的ConfigMap:

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

我们可以像这样在一个pod中来使用这个ConfigMap的键:

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

当这个pod运行的时候,它的输出将包括以下几行:

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

使用案例:用ConfigMap设置命令行参数

ConfigMap也可以被使用来设置容器中的命令或者参数值。这是一个已经完成的使用Kubernetes**$(VAR_NAME)**替换的语法。考虑ConfigMap:

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

为了输入值到命令行里面,我们必须使用我们想要使用的键来作为环境变量,就如在上一个例子中的一样。然后我们可以参考他们,在容器的命令里使用**$(VAR_NAME)**语法。

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

当这个pod正在运行的时候,从test-container容器的输出将会是:

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

使用案例:通过数据卷插件使用ConfigMap

ConfigMap也可以在数据卷里面被使用。再次回到我们的ConfigMap的例子:

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

在数据卷里面使用这个ConfigMap,我们有不同的选项。最基本的就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容:

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

当这个pod运行的时候,输出是这样的:

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

我们也可以在ConfigMap值被映射的数据卷里控制路径。

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

当pod运行的时候,输出是这样的:

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

真实案例:配置Redis

让我们来看一下真实的案例:用Configmap配置redis。我们想要将redis作为一个缓存用推荐配置来输入redis。Redis 配置应该包括:

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

 docs/user-guide/configmap/redis里面有这样一个文件;有了它,我们可以使用下面的命令来创建一个ConfigMap实例:

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

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

现在,让我们用这个配置来创建一个pod:

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

注意,这个pod有一个ConfigMap数据卷,它在一个叫redis.conf的文件里替代了 example-redis-config  ConfigMap的 redis-config密钥。这个数据卷增长到redis容器的 /redis-master目录里,在**/redis-master/redis.conf里替代了我们的配置文件,/redis-master/redis.conf**

就是image为master查找的redis配置文件。

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

如果我们kubectl exec到这个pod,并且运行redis-cli工具,我们可以检查到我们的配置被正确运用:

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

限制条件

ConfigMaps必须在pod中被使用之前创建。Controllers可以会被写来容忍某些配置文件数据的缺失。Configmaps属于namespace。他们只有在相同的namespaces中通过pods被引用。

ConfigMap大小的配额是已经一个设置好的功能。

Kubelet只支持从API服务器的pods使用ConfigMap。这包括了任意的用Kubectl创建的pods,或者间接的通过replication controller创建的pods。它不包括通过Kubelet的 --manifest-url标志创建的pods,也不包括从它的REST API创建的pods(一般不用这些方法创建pods)。

(如果需要转载,请联系我们哦,尊重知识产权人人有责;)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这