k8sConfigMap资源
ConfigMap对象用于为容器中的应用提供配置数据以定制程序的行为,不过敏感的配置信息,例如密钥、证书等通常由Secret对象来进行配置。他们将相应的配置信息保存于对象中,而后在pod资源上以存储卷的形式将其挂载并获取相关的配置,以实现配置与镜像文件的解耦。ConfigMap对象将配置数据以键值对的形式进行存储,这些数据可以在pod对象中使用或为系统组件提供配置,例如控制器对象等。不过,无论应用程序如何使用ConfigMap对象中的数据,用户都完全可以通过在不同的环境中创建名称相同但内存不同的ConfigMap对象,从而为不同环境中同一功能的pod资源提供不同的配置信息,实现应用于配置的灵活勾兑。
一、创建ConfigMap对象
COnfigMap既可以使用命令create创建也可以使用资源配置清单创建
$ kubectl create configmap map-name data-source
其中,map-name为configmap对象的名称,data-source为数据源,它可以通过直接值、文件或目录来获取。无论是哪一种数据源供给方式,都要转换为configmap对象的k-v数据,
其中k由用户在命令行给出或是文件数据源的文件名,它仅能由数字、字母、连接号和点号组成,而v则是直接值或文件数据源的内容
1、利用直接值创建
使用“--from-literal”选项可在命令行直接给出键值对来创建configmap对象,重复使用此选项则可以传递多个键值对。
$ kubectl create configmap test --from-literal=key-name1=value1 --from-literal=key-name2=value2
使用“get configmap”命令可用于查看创建的test对象的相关信息:
[root@master ~]# kubectl get configmap test -o yaml
apiVersion: v1
data:
key1: value1
key2: value2
kind: ConfigMap
metadata:
creationTimestamp: "2019-08-19T06:00:43Z"
name: test
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/configmaps/test
uid: ae14bc78-c246-11e9-827a-000c29b9991f
此类方式提供的数据量有限,一般是在仅通过有限的几个数据项即可为pod资源提供足够的配置信息时使用。
2、基于文件创建
为“kubectl create configmap”命令使用“--from-file”选项即可基于文件内容来创建configmap对象,可重复使用多个“--from-file”选项来传递多个文件内容:
$ kubectl create configmap test1 --from-file=./test1
$ cat ./test1
server {
listen ;
server_name wiki.test.com;
access_log /data/logs/nginx/wiki.test.access.log;
error_log /data/logs/nginx/wiki.test.error.log; location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://192.168.10.54:8090;
} }
这种方式创建的configmap对象,其数据存储的键为文件路径的基名,值为文件内容:
[root@master configmap]# kubectl get configmap -o yaml
apiVersion: v1
items:
- apiVersion: v1
data:
test1: "server {\n listen 80;\n server_name wiki.test.com;\n access_log
/data/logs/nginx/wiki.test.access.log;\n error_log /data/logs/nginx/wiki.test.error.log;\n\n
\ location / {\n \tproxy_set_header Host $host:$server_port;\n
\ proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header
\ X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header
\ X-Forwarded-Proto $scheme;\n\n proxy_pass http://192.168.10.54:8090;\n
\ }\n\n }\n\n"
kind: ConfigMap
metadata:
creationTimestamp: "2019-08-19T06:10:56Z"
name: test1
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/configmaps/test1
uid: 1b6ba6b1-c248-11e9-827a-000c29b9991f
kind: List
metadata:
resourceVersion: ""
selfLink: ""
如果需要自行指定键名,则可在“--from-file”选项中直接指定自定义的键:
$ kubectl create cm test2 --from-file=serverconfig=./test1
[root@master configmap]# kubectl get cm test2 -o yaml
apiVersion: v1
data:
serverconfig: "server {\n listen 80;\n server_name wiki.test.com;\n
\ access_log /data/logs/nginx/wiki.test.access.log;\n error_log /data/logs/nginx/wiki.test.error.log;\n\n
\ location / {\n \tproxy_set_header Host $host:$server_port;\n
\ proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header
\ X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header
\ X-Forwarded-Proto $scheme;\n\n proxy_pass http://192.168.10.54:8090;\n
\ }\n\n }\n\n"
kind: ConfigMap
metadata:
creationTimestamp: "2019-08-19T06:42:54Z"
name: test2
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/configmaps/test2
uid: 92cfc599-c24c-11e9-827a-000c29b9991f
3、基于目录创建
如果配置文件数量较多且存储于有限的目录中时,kubectl还提供了基于目录直接将多个文件分别收纳为键值数据的configmap资源创建方式。将“--from-file”选项后面所跟的路径指向一个目录路径就能将目录下的所有文件一同创建于同一configmap资源中:
$ kubectl create cm test3 --from-file=test3=./
[root@master configmap]# kubectl describe cm test3
Name: test3
Namespace: default
Labels: <none>
Annotations: <none> Data
====
test1:
----
server {
listen 80;
server_name wiki.test.com;
access_log /data/logs/nginx/wiki.test.access.log;
error_log /data/logs/nginx/wiki.test.error.log; location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://192.168.10.54:8090;
} } test2:
----
server {
listen 80;
server_name apidoc.test.com;
access_log /data/logs/nginx/apidoc.access.log;
error_log /data/logs/nginx/apidoc.error.log; location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://192.168.10.54:9013;
} } Events: <none>
PS: describe命令和get -o yaml命令都可显示由文件创建而成的键及其值,不过两者使用的键和值之间的分隔符不同。
4、使用清单创建
基于配置文件创建configmap资源时,它所使用的字段包括通常的apiVersion、kind、metadata字段,以及用于存储数据的关键字段data:
[root@master configmap]# cat cm1.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm1
namespace: testing
data:
log_level: INFO
log_file: /var/log/test.log
如果其值来自于文件内容时,则使用配置文件创建configmap资源的便捷性还不如直接通过命令行的方式,因此,建议直接使用命令行加载文件或目录的方式进行创建。为了便于配置留存,可以在创建完成后使用get -o yaml命令获取到相关信息后再进行编辑留存。
二、向pod环境变量传递configmap对象键值数据
pod资源的环境变量值引用configmap对象的数据时,通过在env字段中为valueFrom内嵌configMapKeyRef对象即可实现:
valueFrom:
configMapKeyRef:
name:
key:
optional:
其中,字段name的值为要引用的ConfigMap对象的名称,字段key可用于指定要引用ConfigMap对象中某键的键名,而字段optional则用于为当前pod资源指明此引用是否为可选。
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-test
namespace: testing
data:
httpd_port: ""
verbose_level: "-vv"
---
apiVersion: v1
kind: Pod
metadata:
name: cm-pod
namespace: testing
spec:
containers:
- name: nginx
image: nginx:1.12-alpine
env:
- name: HTTPD_PORT
valueFrom:
configMapKeyRef:
name: cm-test
key: httpd_port
- name: HTTPD_LOG_VERBOSE
valueFrom:
configMapKeyRef:
name: cm-test
key: verbose_level
pod资源还支持在容器中使用envFrom字段直接将configmap资源中的所有键值一次性地完成导入:
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-test
namespace: testing
data:
httpd_port: ""
verbose_level: "-vv"
---
apiVersion: v1
kind: Pod
metadata:
name: cm-pod
namespace: testing
spec:
containers:
- name: nginx
image: nginx:1.12-alpine
envFrom:
- prefix: HTCFG_
configMapRef:
name: cm-test
optional: false
envFrom字段值是对象列表,可用于同时从多个configmap对象导入键值数据。为了避免从多个configmap引用键值数据时产生键名冲突,可以在每个引用中将被导入的键使用prefix字段(可选)指定一个特定的前缀,如“HTCFG_”,于是,configmap对象中的httpd_port键将称为pod对象中名为HTCFG_httpd_port的变量。
三、configmap存储卷
1、挂载整个存储卷
关联为pod资源的存储卷时,configmap对象中的每个键都对应地表现为一个文件,键名转为文件名,而键值则为相应文件的内容,即便是通过直接值创建的键值数据,也一样表现为文件视图。挂载于容器上之后,由键值数据表现出的文件位于挂载点目录中,容器中的进程可直接读取这些文件的内容。配置pod资源时,基于存储卷的方式引用configmap对象时,仅需要指明存储卷名称及要引用的configmap对象名称即可:
apiVersion: v1
kind: Pod
metadata:
name: cm-vol
namespace: testing
spec:
containers:
- name: vol-nginx
image: nginx:1.12-alpine
volumeMounts:
- name: ngxconfig
mountPath: /etc/nginx/conf.d
readOnly: true
volumes:
- name: ngxconfig
configMap:
name: ngx-cm
2、挂载存储卷中的部分键值
如果在configmap中有多个键值,当前只挂载部分键值,则可:
apiVersion: v1
kind: Pod
metadata:
name: cm-vol
namespace: testing
spec:
containers:
- name: vol-nginx
image: nginx:1.12-alpine
volumeMounts:
- name: ngxconfig
mountPath: /etc/nginx/conf.d
readOnly: true
volumes:
- name: ngxconfig
configMap:
name: ngx-cm
items:
- key: test.conf
path: test2.conf
mode:
- key: test1.conf
path: test1.conf
其中,key:要引用的键名称,必选字段;path:对应的键于挂载点目录中生成的文件的相对路径,可以不同于键名称,必选字段;mode:文件的权限模型,可用范围:0-0777,默认0644
3、独立挂载存储卷中的键值
前述方式中,无论是装载所有文件还是部分文件,挂载点目录下原有的文件都会被隐藏。对于期望configmap对象提供的配置文件补充于挂载点目录下的需求来说,这种方式显然难以如愿。事实上,此种需求可以通过容器的volumeMouts字段中使用subPath字段来解决,它可以支持用户从存储卷挂载单个文件或单个目录而非整个存储卷。
apiVersion: v1
kind: Pod
metadata:
name: cm-vol
namespace: testing
spec:
containers:
- name: vol-nginx
image: nginx:1.12-alpine
volumeMounts:
- name: ngxconfig
mountPath: /etc/nginx/conf.d/test.conf
subPath: test.conf
readOnly: false
- name: ngxconfig
mountPath: /etc/nginx/test1.conf
subPath: test1.conf
volumes:
- name: ngxconfig
configMap:
name: ngx-cm
k8sConfigMap资源的更多相关文章
- k8s-configmap
一.目的 把应用的代码和配置分开,通过配置configmap管理pod,一种统一的集群配置管理方案.ConfigMap API资源提供了将配置数据注入容器的方式,同时保持容器是不知道Kubernete ...
- Fis3的前端工程化之路[三大特性篇之资源定位]
Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- ABP文档 - 嵌入的资源文件
文档目录 本节内容: 简介 创建嵌入的文件 暴露嵌入的文件 使用嵌入的文件 简介 一个web应用里,客户端包含javascript,css,xml等文件,这此文件被添加到一个web项目后,发布成独立的 ...
- 【资源】.Net 入门@提高 - 逆天的高薪之路!
入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~ 官方学习计划 http://www.cnblogs.com/dunitian/p/5667901.html ----- ...
- 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?
0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...
- Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容
我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...
- 一个表缺失索引发的CPU资源瓶颈案例
背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...
- 【NLP】Python NLTK获取文本语料和词汇资源
Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...
随机推荐
- Anaconda环境配置常用命令
1. 新建一个环境: conda create -n ForPytorch python=3.6 该行命令新建了一个叫做ForPytorch的环境,该环境使用的python是3.6版本.新建一个环境的 ...
- 【机器学习理论】概率论与数理统计--假设检验,卡方检验,t检验,F检验,方差分析
显著性水平α与P值: 1.显著性水平是估计总体参数落在某一区间内,可能犯错误的概率,用α表示. 显著性是对差异的程度而言的,是在进行假设检验前确定的一个可允许作为判断界限的小概率标准. 2.P值是用来 ...
- Angular build编译内存溢出"JavaScript heap out of memory"的解决办法
关于最近使用angular build编译打包的时候,遇到内存溢出的突发情况,做一个简单记录 编译报错如下↓↓↓ 报错信息很直观地指出是内存溢出了.是什么导致了内存溢出呢?其根本原因在于 nodejs ...
- [转帖]IBM收购红帽价格是多少?是否会形成垄断企业?会存在什么不安因素?
http://www.techweb.com.cn/it/2019-07-10/2743776.shtml 国产的linux 用centos源的 如何是好呢.. 蓝色巨人IBM官方宣布,已经正式完成对 ...
- [转帖]linux中systemctl详细理解及常用命令
linux中systemctl详细理解及常用命令 2019年06月28日 16:16:52 思维的深度 阅读数 30 https://blog.csdn.net/skh2015java/article ...
- mysql下的sqlmode详解
转自:https://www.cnblogs.com/Zender/p/8270833.html 阅读目录 一,sql_mode值的含义 二,ANSI模式 三,STRICT_TRANS_TABLES模 ...
- Mysql workbench 字段类型(转载)
转载自:https://blog.csdn.net/j_h_xie/article/details/52924521 项目初始,在使用workbench建表时,字段中有PK,NN,UQ,BIN,UN, ...
- C++笔记(3)——string.h相关的一些小知识
strlen() 用于得到字符数组中第一个\0前的字符的个数,格式如下: strlen(数组); 例子: #include <stdio.h> #include <string.h& ...
- BASH的保护性编程技巧
BASH的保护性编程技巧 shell常用逻辑判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d file 若文件存在且是一个目 ...
- docker toolbox的redis 配置主从及哨兵模式保证高可用
redis 的缓存中间件安装方法,简单举例如下: 环境: docker toolbox 一 主从模式1 搜索redis镜像 docker search redis2 拉取镜像docker pul ...