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 是目前发展最 ...
随机推荐
- joigsc2022_e 题解
翻译 有长度为 \(n\) 的序列 \(a\) 和 \(L\),你需要对于每个 \(x \in[1,n]\) 求出若把第 \(x\) 个数到第 \(n\) 个数依次装入容量为 \(L\) 的箱子中(每 ...
- .NET 9 预览版 5 发布
微软在6月发布了.NET 9预览版的第五个版本.这个新版本的框架预计将在今年晚些时候正式发布,它是一个标准支持(STS)版本,将在2024年11月12日至2026年5月12日期间在多个操作系统上获得1 ...
- Libgdx游戏开发(7)——开始游戏界面实现
原文: Libgdx游戏开发(7)--开始游戏界面实现-Stars-One的杂货小窝 上篇文章也是讲解了如何实现暂停,但实际上,上篇的做法可能不够优雅 因为暂停和游戏界面我们可以分成2个Screen对 ...
- 国产开源存储之光:Curve 通过信创认证
网易数帆喜讯再传,Curve 近日通过信息技术应用创新(信创)认证! Curve 是一款高性能.易运维.云原生的分布式存储系统,由网易数帆存储团队发起开源,现为 CNCF 沙箱项目.国家工业信息安全发 ...
- Windows 10 LTSC中个人版OneDrive失效的问题
该问题是由于LTSC注册表无onedriver的id{A52BBA46-E9E1-435f-B3D9-28DAA648C0F6}定义导致,解决方案是新建一个reg_onedrive.reg文件,并编辑 ...
- oeasy 教您玩转linux 010304 图形界面 xfce
我们来回顾一下 上一部分我们都讲了什么? 讲了文件管理器和命令行终端互相交互 用命令nautilus在文件管理器打开某路径 这次我们来看看 图形用户界面(GUI)的情况 图形界面和发行版的关系 一个发 ...
- AT_abc246_d 题解
洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定整数 \(N\),请你找到最小的整数 \(X\),满足: \(X \ge N\). ...
- java小技巧~修改对象的属性名
今天联调的时候,有个功能是在初始化的时候将图片路径回显到vant组件的上传组件上,但是vant组件需要图片路径名叫url,而后端返给我的路径名叫filePath,而且是双层嵌套.一个个遍历老麻烦了,下 ...
- 后端说,单页面SPA和前端路由是怎么回事
没有请求的路由 在传统开发中,浏览器点击一个超链接,就会像后端web服务器发送一个html文档请求,然后页面刷新.但开始单页面开发后,就完全不同了. 单页面?这个概念难以理解.我用一个js作为整个we ...
- C# 通过反射(Reflection)调用不同名泛型方法
概述 由于工作需要,需要通过数据类型和方法名控制方法走向 用到的数据类型有8种(string,Int16,Int32,Int64,Boolean,Byte,Single,Double) 读取的方法(参 ...