Kubernetes-11:ConfigMap介绍及演示
ConfigMap存在的意义
ConfigMap 功能在 Kubernetes1.2版本引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息,ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象
ConfigMap的创建
I、使用目录创建
## 创建目录
[root@Centos8 k8sYaml]# mkdir dir
[root@Centos8 k8sYaml]# cd dir/ ## 创建2个文件,文件内存放值
[root@Centos8 dir]# cat << EOF > game.properties
> enemies=aliens
> lives=3
> enemies.cheat=true
> enemies.cheat.level=noGoodRotten
> secret.code.passphrase=UUDDLRLRBABAS
> secret.code.allowed=true
> secret.code.lives=30
> EOF [root@Centos8 dir]# cat << EOF > ui.properties
> color.good=purple
> color.bad=yellow
> allow.textmode=true
> how.nice.to.look=fairlyNice
> EOF [root@Centos8 dir]# ls
game.properties ui.properties ## 开始创建ConfigMap
[root@Centos8 dir]# kubectl create configmap game-config --from-file=/root/k8sYaml/dir
configmap/game-config created ### 查看ConfigMap
[root@Centos8 dir]# kubectl get cm
NAME DATA AGE
game-config 2 2m19s [root@Centos8 dir]# kubectl describe cm game-config
Name: game-config
Namespace: default
Labels: <none>
Annotations: <none> Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30 ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice Events: <none>
--from-file= 表示指定该目录下所有的文件都会被用在ConfigMap里创建一个键值对,键的名字就是文件名,值就是文件内容
II、使用文件名创建
## 创建文件
[root@Centos8 dir]# cat wuzi.examplate
NAME=wuzi
URL=www.wuzi.com ## 创建ConfigMap
[root@Centos8 dir]# kubectl create cm wuzi.com --from-file=/root/k8sYaml/dir/wuzi.examplate
configmap/wuzi.com created ## 查看cm
[root@Centos8 dir]# kubectl get cm
NAME DATA AGE
game-config 2 7m37s
wuzi.com 1 41s [root@Centos8 dir]# kubectl describe cm wuzi.com
Name: wuzi.com
Namespace: default
Labels: <none>
Annotations: <none> Data
====
wuzi.examplate:
----
NAME=wuzi
URL=www.wuzi.com Events: <none>
--from-file 可以重复使用,当重复指定多个文件时,效果与直接指定目录相同
III、使用字面值创建(直接创建)
使用字面值创建使用 --from-literal 参数传递配置信息,该参数可以使用多次,格式如下:
## 创建cm
[root@Centos8 dir]# kubectl create cm spec.examplate --from-literal=spec.how=very --from-literal=spec.type=charm
configmap/spec.examplate created ## 查看cm
[root@Centos8 dir]# kubectl describe cm spec.examplate
Name: spec.examplate
Namespace: default
Labels: <none>
Annotations: <none> Data
====
spec.how:
----
very
spec.type:
----
charm
Events: <none> ## 也可以通过资源清单的方式来创建ConfigMap
vim map.yaml
...
apiVersion: v1
kind: ConfigMap
metadata:
name: spec-config
namespace: default
data:
special.now: 6\.4
special.time: 12\:00
... ## 查看
[root@Centos8 dir]# kubectl create -f map.yaml
configmap/spec-config created [root@Centos8 dir]# kubectl describe cm spec-config
Name: spec-config
Namespace: default
Labels: <none>
Annotations: <none> Data
====
special.now:
----
6\.4
special.time:
----
12\:00
Events: <none>
创建Pod 测试ConfigMap
I、使用ConfigMap设置环境变量
vim cm-test.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: cm-pod
spec:
containers:
- name: cm-container
image: hub.vfancloud.com/test/myapp:v1
command: [ "/bin/sh","-c","env" ]
env: #将名为spec.examplate的ConfigMap中名为spec.how的key的value赋值给环境变量SPEC_LEVEL_KEY
- name: SPEC_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: spec.examplate
key: spec.how
- name: SPEC_TYPE_KEY
valueFrom:
configMapKeyRef:
name: spec.examplate
key: spec.type
envFrom: #将名为wizi.com的ConfigMap中定义的所有key:value都导入环境变量
- configMapRef:
name: wuzi.com
restartPolicy: Never
... ## 查看环境变量
[root@Centos8 dir]# kubectl log cm-pod | grep -E "SPEC_LEVEL_KEY|SPEC_TYPE_KEY|NAME|URL"
HOSTNAME=cm-pod
SPEC_LEVEL_KEY=very
wuzi.examplate=NAME=wuzi
URL=www.wuzi.com
SPEC_TYPE_KEY=charm
II、通过数据卷插件使用configMap
vim volum.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: volum-cm
spec:
containers:
- name: volum-ct
image: hub.vfancloud.com/test/myapp:v1
volumeMounts: # 挂载共享数据卷
- name: config-volume # 要挂载共享数据卷的名字
mountPath: /etc/config # 挂载到指定的目录下
volumes: # 定义共享数据卷
- name: config-volume # 共享数据卷名称
configMap:
name: game-config # ConfigMap的名称
# name: wuzi.com
# name: spec-config
restartPolicy: Never
...
[root@Centos8 dir]# kubectl create -f volum.yaml ### 分别以文章开头的第一步创建的ConfigMap类型(目录、文件、键值)三种形式进行试验
## ConfigMap类型为目录的,直接将此目录下的所有文件共享到了container指定目录中
/etc/config # ls
game.properties ui.properties
/etc/config # cat game.properties
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
/etc/config # cat ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice ## ConfigMap类型为文件的,只将此文件共享到了container目录下
/etc/config # ls
wuzi.examplate
/etc/config # cat wuzi.examplate
NAME=wuzi
URL=www.wuzi.com ## ConfigMap类型为键值对的,将key保存成了文件名,value保存为文件内容
/etc/config # ls
special.now special.time
/etc/config # cat special.time
12\:00/etc/config #
/etc/config # cat special.now
6\.4/etc/config #
滚动更新
## 先创建一个索引文件
[root@Centos8 dir]# cat index1.html
Hello World ## 使用此文件创建ConfigMap
[root@Centos8 dir]# kubectl create cm nginx-cm --from-file=./index1.html
configmap/nginx-cm created ## 创建Deployment
[root@Centos8 dir]# vim nginx-cm.yaml
...
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-cm
namespace: default
spec:
replicas: 3
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx-cm
image: hub.vfancloud.com/test/myapp:v1
ports:
- containerPort: 80
volumeMounts:
- name: config-nginx
mountPath: /usr/share/nginx/html/config
volumes:
- name: config-nginx
configMap:
name: nginx-cm
...
kubectl apply -f nginx-cm.yaml ## 测试访问
[root@Centos8 dir]# curl http://10.244.3.170/config/index1.html
Hello World ## 现在创建一个新文件index2.html
[root@Centos8 dir]# cat index2.html
It is a wonderful world ## 删除ConfigMap重建替换index1.html为index2.html
[root@Centos8 dir]# kubectl delete cm nginx-cm
configmap "nginx-cm" deleted
[root@Centos8 dir]# kubectl get cm
No resources found.
[root@Centos8 dir]# kubectl create cm nginx-cm --from-file=./index2.html
configmap/nginx-cm created ## 再次测试,滚动更新完成
[root@Centos8 dir]# curl http://10.244.3.170/config/index2.html
It is a wonderful world
需要等一会才能同步更新,可能10-30s
Kubernetes-11:ConfigMap介绍及演示的更多相关文章
- Kubernetes中StatefulSet介绍
StatefulSet 是Kubernetes1.9版本中稳定的特性,本文使用的环境为 Kubernetes 1.11.如何搭建环境可以参考kubeadm安装kubernetes V1.11.1 集群 ...
- Springboot整合Spring Cloud Kubernetes读取ConfigMap,支持自动刷新配置
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...
- STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- Go 1.11 Module 介绍
title: "Go 1.11 Module" date: 2018-10-26T23:50:56+08:00 draft: false --- Go 1.11 Module 介绍 ...
- kubernetes之configmap,深度解析mountPath,subPath,key,path的关系和作用
参考:https://www.cnblogs.com/breezey/p/6582082.html 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库, ...
- Kubernetes的ConfigMap说明
这篇博文,我们来说一说,关于在kubernetes的pod中自定义配置的问题. 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等. ...
- K8S学习笔记之Kubernetes 配置管理 ConfigMap
0x00 概述 很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用 ...
- Kubernetes 配置管理 ConfigMap(十二)
目录 一.背景 二.创建 ConfigMap 2.1.通过 --from-literal 2.2.通过 --from-file 2.3.通过--from-env-file 2.4.YAML 配置文件 ...
- 第11组 Beta版本演示
第11组 Beta版本演示 组长博客链接 https://www.cnblogs.com/xxylac/p/12039948.html 本组成员(不知道叫什么团队) 031702635 陈郑铧(组 ...
- K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)
K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace) Kubernetes 是目前发展最 ...
随机推荐
- 全国产!全志T3+Logos FPGA核心板(4核ARM Cortex-A7)规格书
核心板简介 创龙科技SOM-TLT3F是一款基于全志科技T3四核ARM Cortex-A7处理器 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核全国产工业核心板,ARM C ...
- Springboot整合Apollo
一.Apollo作用 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址-- 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善 ...
- Math.random()方法的使用及公式
条件1:取n-m范围的随机数(不包含m) 公式1:(int)(Math.random() * (m - n) + n); 条件2:取n-m范围的随机数(包含m) 公式2:(int)(Math.rand ...
- 硬核案例分享,一文带你拆解PHP语言体系下的容器化改造
本文分享自华为云社区<PHP语言体系下的容器化改造,助力夺冠集团应用现代化>,作者: HuaweiCloudDeveloper. 1.摘要 本文主要介绍了PHP语言体系应用现代化改造上云的 ...
- Service Mesh Summit 回顾 | 轻舟服务网格的无侵入增强 Istio 经验
在云原生社区近日主办的 Service Mesh Summit 2022 服务网格峰会上,网易数帆云原生技术专家方志恒分享了轻舟服务网格无侵入增强 Istio 的经验,本文据此次分享整理,介绍了对无侵 ...
- Vscode 一次选中多行 光标一次定位多行
1 . 鼠标点击开始位置(定位到行首时,鼠标就点击第一行的行首:定位到行尾时,鼠标就点击第一行的行尾:) 2. 按住shift+alt 点击结束的位置(定位到行首时,鼠标就点击最后一行的行首:定位到 ...
- Apache基于IP和端口
Apache基于IP 步骤1:添加并配置虚拟网卡 添加虚拟网卡:通常在虚拟机环境中,可以通过虚拟机软件(如VMware或VirtualBox)的网络设置来添加额外的网络适配器. 配置IP地址:编辑/e ...
- [PHP]用socket写一个简单的WEB服务器
今天我就要把我的最新研究成果展示看看,而不玩ARMBIAN了,因为刷了两台S905L3的发现一点挑战都没有 从0.2写WEB服务难啊,你需要懂HTTP协议和SOCKET!不过有经验我们很快就可以搭建一 ...
- [oeasy]python0023_[趣味拓展]Guido的简历_从ABC到python
Guido的简历 回忆上次内容 上次 添加了 各种 符号 铭文 各种 颜色 铸造了 自己的宝剑 添加图片注释,不超过 140 字(可选) 这些都是 用python画出来的宝剑 py ...
- [oeasy]python0108_谷腾堡活字_哥特字体_罗马帝国_希腊文化_文艺复兴
谷腾堡活字 回忆上次内容 上次回顾了字型编码的进化过程 7-seg 七位数码管 显示数字 14-seg 十四位数码管 显示字母 添加图片注释,不超过 140 字(可选) 米字管 ...