写点什么

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

  • 2020-03-13
  • 本文字数:2108 字

    阅读完需:约 7 分钟

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

使用 ConfigMap

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

ConfigMap 总览

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


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



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


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


1、设置环境变量的值


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


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


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

创建 ConfigMaps

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


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

从目录创建

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



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



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


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



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


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


从文件创建

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



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


--from-file=game-special-key=docs/user-guide/configmap/kubectl/game.properties 
复制代码



从字面值创建

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


在 pods 里面使用 ConfigMap

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


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



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



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


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

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



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



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


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

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



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



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



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



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


真实案例:配置 Redis

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



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




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



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


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



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


限制条件

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)。


本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/qBL9P6LkU4_ko_o33IuqZg


2020-03-13 17:25488

评论

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

用户文章转载:P4 Rmdir 会自动删除空目录?不,没那么简单

龙智—DevSecOps解决方案

perforce P4 P4 Rmdir

资料分享|kafka学习推荐书籍

Kafka中文社区

如何使用Kubernetes里的NetworkPolicy

Jerry Wang

Kubernetes k8s 28天写作 docker build 12月日更

Elasticsearch 可搜索快照技术原理及最佳实践

腾讯云大数据

Elastic Search

走访数年,编撰3年:你能看到的互联网企业案例最多的一本书

博文视点Broadview

行业分析| 实时音视频的未来

anyRTC开发者

音视频 WebRTC 实时通信 语音通话 视频通话

智汇华云 | 使用Kubeadm进行Kubernetes集群版本升级

华云数据

架构实战营 第 4 期 模块三作业

架构实战营 模块三 构架 「架构实战营」

流计算 Oceanus | 巧用 Flink 构建高性能 ClickHouse 实时数仓

腾讯云大数据

flink Clickhouse 流计算 Oceanus

Flink 实践教程-进阶(5):排序(乱序调整)

腾讯云大数据

流计算 Oceanus

seata入门介绍与seata-service部署与验证(一)

恒生LIGHT云社区

架构 分布式 seata

给弟弟的信第27封|学会说不,别让面子害了你

大菠萝

28天写作

智汇华云 | 桌面云卓越体验下的协议技术解析

华云数据

观点 | NoSQL 产品的 SaaS 化之路

RadonDB

数据库 nosql NoSQL 数据库

大型软件交付项目注意事项53条

IT民工大叔

项目管理 SaaS

从翻硬币游戏看敏捷开发

华为云开发者联盟

敏捷 敏捷开发 软件开发 团队 开发

低代码行业浅析

凹凸实验室

前端 低代码

探索 Design Token

凹凸实验室

前端 设计

【转】java开发之批处理框架 Spring Batch

@零度

JAVA开发 spring batch

拍乐云解析融合语音通话技术实践

拍乐云Pano

音视频 RTC 拍乐云 技术干货 融合语音通话

28《重学JAVA》--注解

杨鹏Geek

Java25周年 28天写作 12月日更

Java序列化与反序列化

编程江湖

带你详细了解 Node.js 中的事件循环

编程江湖

前端开发 node,js

计划被打乱怎么办?

Tiger

28天写作

参加过 4 届 TiDB Hackathon 是一种什么体验? | TiDB Hackathon 选手访谈

PingCAP

实战大数据,HBase 性能调优指南

编程江湖

HBase

我的2021之感谢有你们(上篇)

坚果

年终总结 28天写作 12月日更 盘点2021

netty系列之:好马配好鞍,为channel选择配套的selector

程序那些事

Java Netty 程序那些事 12月日更

AI实战分享 | 基于CANN的辅助驾驶应用案例

华为云开发者联盟

目标检测算法 CANN 昇腾 辅助驾驶 AscendCL

智汇华云 | ArSDN给VMware带来了什么

华云数据

直播预告|智能运维管理平台OMP核心特性及落地场景介绍

云智慧AIOps社区

DevOps 运维 AIOPS 智能运维 运维管理

Kubernetes 1.2 新功能解析:ConfigMap (中)_语言 & 开发_才云科技_InfoQ精选文章